PowerShell -WebClient DownloadFile Wildcards?

Je veux copier plusieurs fichiers d’une librairie SharePoint dans un répertoire local. Il est possible d’utiliser des Wildcards? Le code suivant ne fonctionne pas. Mais existe-t-il un moyen d’utiliser WebClient et les caractères génériques? (Je dois utiliser le client Web. Il n’est pas possible d’utiliser les services Web SharePoint :-()

$url = "http://soffr.miximages.com/webclient/.jpg" $path = "D:\temp\" $WebClient = New-Object System.Net.WebClient $WebClient.UseDefaultCredentials = $true $WebClient.DownloadFile($url, $path) 

vous pouvez parsingr le code HTML de la liste.

 # dummy url - i've added allitems.aspx $url = "http://mySharePoint/websites/Site/TestDocBib/allitems.aspx" $path = "D:\temp\" $dl_file = $path + "allitems.html" $WebClient = New-Object System.Net.WebClient $WebClient.UseDefaultCredentials = $true $WebClient.DownloadFile($url, $dl_file) 

une fois que vous avez téléchargé le fichier, vous pouvez parsingr le fichier – un rapide Google a révélé que Lee Holmes en avait déjà fait l’essentiel:

http://www.leeholmes.com/blog/2005/09/05/unit-testing-in-powershell-%E2%80%93-a-link-parser/

le bit principal que vous voulez est la regex:

 $regex = “<\s*a\s*[^>]*?href\s*=\s*[`"']*([^`"'>]+)[^>]*?>” 

Je bidouille très rapidement – cela peut (ou peut ne pas) fonctionner … mais l’essentiel est là 🙂

 $test = gc $dl_file $t = [Regex]::Matches($test, $regex, "IgnoreCase") $i = 0 foreach ($tt in $t) { # this assumes absolute paths - you may need to add the hostname if the paths are relative $url = $tt.Groups[1].Value.Trim() $WebClient = New-Object System.Net.WebClient $WebClient.UseDefaultCredentials = $true $WebClient.DownloadFile($url, $($path + $i + ".jpg")) $i = $i + 1 } 

Non, désolé, vous ne pouvez pas utiliser de caractères génériques avec WebClient. Cela ne fait pas partie de HTTP.

Qu’en est-il de l’utilisation de WEBDAV?

 c:\> copy \\my.sharepoint.site\sites\foo\doclib\*.jpg c:\temp\ 

Si le client (c’est-à-dire pas le sharepoint partage) est une plate-forme serveur 2008+, vous devez append le rôle “Expérience de bureau” et activer le service “Client Web”. Ce n’est pas la même chose que system.net.webclient; c’est le service de redirection de réseau HTTP / DAV.

Si vous devez vous connecter avec des informations d’identification différentes, vous pouvez utiliser ceci:

 c:\> net use * "http://my.sharepoint.site/sites/foo/doclib" /user:foobar mapped h: to ... c:\> copy h:\*.jpg c:\temp 

J’espère que cela t’aides.