PowerShell -WebClient DownloadFile Wildcards? - PullRequest
2 голосов
/ 14 июля 2011

Я хочу скопировать несколько файлов из библиотеки SharePoint в локальный каталог. Можно ли использовать Wildcards? Следующий код не работает. Но есть ли способ использовать WebClient и Wildcards? (Я должен использовать WebClient. Невозможно использовать SharePoint WebServices :-()

$url = "http://mySharePoint/websites/Site/TestDocBib/*.jpg"
$path = "D:\temp\"

$WebClient = New-Object System.Net.WebClient
$WebClient.UseDefaultCredentials = $true
$WebClient.DownloadFile($url, $path)

Ответы [ 3 ]

2 голосов
/ 14 июля 2011

А как насчет использования WEBDAV?

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

Если клиентская часть (т.е. не sharepoint) является платформой server 2008+, вам необходимо добавить роль «рабочего стола» и включить службу «веб-клиент».Это не то же самое, что system.net.webclient;это служба перенаправления сети HTTP / DAV.

Если вам нужно войти в систему с разными учетными данными, вы можете использовать это:

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

Надеюсь, это поможет.

2 голосов
/ 14 июля 2011

Нет, извините, вы не можете использовать подстановочные знаки с WebClient. Это не часть HTTP.

1 голос
/ 14 июля 2011

вы можете разобрать хотя бы HTML из списка.

# 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)

как только вы загрузили файл, вы можете проанализировать его через файл - быстрый гугл обнаружил, что Ли Холмс уже сделал большую часть этого:

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

основной бит, который вы хотите, это регулярное выражение:

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

Я очень быстро взломаю - это может (или не может) работать ... но суть есть:)

$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
}
...