我试图编写一个powershell脚本,从我的神器仓库下载多个文件。通过传递文件名,我可以使用如下的某种逻辑。
$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 :(得分:2)
您可能缺少与请求一起发送的凭据。
如果您使用Artifactory Key,则可以使用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
}