我已经通过 WebClient 对象从 Artifactory (Generic Repo) 成功下载了一个文件。我在通过相同方法上传文件时遇到问题。我正在尝试找出通过 Powershell 上传到我们服务器的最简单方法。
请注意,目前无法安装其他实用程序(如 Curl)。我正在编写自动化脚本并希望坚持使用基本的 Windows 2008 r2 服务器,不安装其他实用程序,因为我不能指望它们在所有服务器上都存在。
如果有人有使用 Rest API 的示例脚本,那就太完美了!
下载代码示例(有效):
$SOURCE = "https://artifactory.example.com/artifactory/net-generic-local/APP/BF_1.0.zip"
$DESTINATION = ".\BF_1.0.zip"
$AF_USER ="user"
$AF_PWD ="password"
$WebClient = New-Object System.Net.WebClient
$WebClient.Credentials = New-Object System.Net.NetworkCredential($AF_USER,$AF_PWD)
$WebClient.DownloadFile($SOURCE,$DESTINATION)
这是上传代码的示例(不起作用):
$SOURCE = ".\BF_2.0.zip"
$DESTINATION = "https://artifactory.example.com/artifactory/net-generic-local/APP/BF_2.0.zip"
$AF_USER ="user"
$AF_PWD ="password"
$WebClient = New-Object System.Net.WebClient
$WebClient.Credentials = New-Object System.Net.NetworkCredential($AF_USER, $AF_PWD)
$URI = New-Object System.Uri($DESTINATION)
$WebClient.UploadFile($URI,$SOURCE)
这是我在上传时遇到的错误:
Exception calling "UploadFile" with "2" argument(s): "The remote server returned an error: (405) Method Not Allowed."
At E:\transient\af_put.ps1:8 char:1
+ $WebClient.UploadFile($URI,$SOURCE)
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [], MethodInvocationException
+ FullyQualifiedErrorId : WebException
最佳答案
我尝试了 Invoke-WebRequest 选项并且能够让它工作:
$URI = New-Object System.Uri("https://artifactory.example.com/artifactory/net-generic-local/APP/BF_2.0.zip")
$SOURCE = ".\BF_2.0.zip"
$AF_USER = "user"
$AF_PWD = ConvertTo-SecureString "password" -AsPlainText -Force
$CREDS = New-Object System.Management.Automation.PSCredential ($AF_USER, $AF_PWD)
Invoke-WebRequest -Uri $URI -InFile $SOURCE -Method Put -Credential $CREDS
必须创建一个 PSCrendential 对象,这样它就不会提示输入用户密码。但除此之外,这项工作完全符合我的需要。
关于windows - 从 Windows Powershell 脚本上传到 Artifactory,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36265752/