2017-09-05 45 views
0

我試圖編寫一個powershell腳本,從我的artifactory下載庫下載多個文件。我可以通過傳遞文件名來使用某種邏輯。使用powershell從artifactory下載多個文件

$files = @("test1.zip", "test.zip") 

foreach($file in $files) 
{ 
Invoke-WebRequest -Uri "$artifactory_url/$file" -OutFile "D:\download\$file" 
} 

但是,有什麼辦法可以下載所有的文件沒有傳遞的名字?我嘗試使用通配符(* zip),但看起來像Invoke-webrequest不接受通配符。並且找不到Start-bittransfer cmdlet以及文章https://blogs.technet.microsoft.com/heyscriptingguy/2012/08/17/use-powershell-3-0-to-easily-download-60-spanned-files中描述的運氣。

我能拉起來使用以下命令

((Invoke-WebRequest $url).links | Where href -match "zip$").href 

如何使用這個命令下載文件在回購的文件列表?有沒有更好的方法從artifactory repo或http端點下載多個文件?我必須在多臺服務器上執行此操作。所以,我沒有考慮使用jfrog cli。 在此先感謝

+0

你試過'$文件=((調用-的WebRequest $網址).links ......',然後'foreach($ files in $ files)'? – gms0ulman

+0

我期望你需要[enumerate](https://stackoverflow.com/a/36364859/1630171)這些工件,然後單獨下載它們 –

+0

@ gms0ulman是的,我嘗試使用下面的代碼 invoke-webrequest「$ url」| select -exp links | where {$ _。href -like「* .zip」} | select -exp href | foreach {start-bitstransfer $ _ C:/users/my_home} 但是,它沒有工作 我。 – workholic

回答

1

您可能會錯過與請求一起發送的憑據。

如果您使用的是Artifactory的關鍵,你可以使用WebClient的對象像下面 -

#example Artifactory url 
$artifactory_url = "https://artifactory.company.com/artifactory/" 
#example Artifactory Key 
$ArtifactoryKey = "AKCp2VpEfLuMVkxpmH9rSiZT3RPoWCucL8kEiq4SjbEuuuCFdNf5t5E6dom32TCE3efy2RCyg" 

$wc = New-Object System.Net.WebClient 
$wc.Headers.Add("X-JFrog-Art-Api", $ArtifactoryKey) 
$files = @("test1.zip", "test.zip") 
try { 
    foreach($file in $files) { 
    $wc.DownloadFile("$artifactory_url/$file", "D:\download\$file") 
    } 
} 
catch { 
    $Host.UI.WriteErrorLine("Error while Trying to download Artifacts.") 
    $Host.UI.WriteErrorLine($_.Exception.Message) 
    exit 
}