无法在powershell脚本中参数化下载url
我正在尝试从nexus服务器下载工件。所以我伪造了下面的ps脚本无法在powershell脚本中参数化下载url,powershell,jenkins,nexus,Powershell,Jenkins,Nexus,我正在尝试从nexus服务器下载工件。所以我伪造了下面的ps脚本 $Webclient = New-Object System.Net.WebClient $Nexusurl = "http://ec2-54-xxx-xxx-xxx.us-west-2.compute.amazonaws.com:8081/nexus/content/repositories/releases/org/bar" + "/" + ${BUILD_NUMBER} + "/" + ${ProjectName}.zip
$Webclient = New-Object System.Net.WebClient
$Nexusurl = "http://ec2-54-xxx-xxx-xxx.us-west-2.compute.amazonaws.com:8081/nexus/content/repositories/releases/org/bar" + "/" + ${BUILD_NUMBER} + "/" + ${ProjectName}.zip
$Webclient.DownloadFile($Nexusurl, 'c:\webcontent.zip')
我在PS中有两个参数:jenkin的BUILD_编号和ProjectName。这两个参数在jenkins作业中设置为参数。ProjectName
是nexus服务器上要下载的工件的名称
命令执行时没有错误。但是文件c:\webcontent.zip
在尝试解压缩时显示为无效。因此,我认为URL($Nexusurl)在执行PS时构造不正确
echo$Nexusurl
http://ec2-54-xxx-xxx-xxx.us-west-2.compute.amazonaws.com:8081/nexus/content/repositories/releases/org/bar//
显示URL缺少参数。$Nexusurl
http://ec2-54-xxx-xxx-xxx.us-west-2.compute.amazonaws.com:8081/nexus/content/repositories/releases/org/bar//
我在做什么?URL中没有替换参数。我尝试了很多组合,但至今都不成功 再推一下,我想我就到了。最终的PS脚本如下所示:
$Webclient = New-Object System.Net.WebClient
$Nexusurl = "http://ec2-54-xxx-xxx-xxx.us-west-2.compute.amazonaws.com:8081/nexus/content/repositories/releases/org/bar" + "/" + $ENV:BUILD_NUMBER + "/" + $ENV:ProjectName
echo $Nexusurl
$Webclient.DownloadFile($Nexusurl, 'c:\webcontent.zip')
但是仍然不确定为什么我可以在
$ENV:ProjectName
之后放置.zip的扩展名。。因此,目前,我正在将参数与.zip扩展名一起使用,再推一次,我想我已经做到了。最终的PS脚本如下所示:
$Webclient = New-Object System.Net.WebClient
$Nexusurl = "http://ec2-54-xxx-xxx-xxx.us-west-2.compute.amazonaws.com:8081/nexus/content/repositories/releases/org/bar" + "/" + $ENV:BUILD_NUMBER + "/" + $ENV:ProjectName
echo $Nexusurl
$Webclient.DownloadFile($Nexusurl, 'c:\webcontent.zip')
但是仍然不确定为什么我可以在
$ENV:ProjectName
之后放置.zip的扩展名。。因此,目前我正在使用.zip扩展名的参数,我建议使用格式化字符串来定义$Nexusurl
:
$Nexusurl = "http://ec2-54-xxx-xxx-xxx.us-west-2.compute.amazonaws.com:8081/nexus/content/repositories/releases/org/bar/{0}/{1}.zip" -f $ENV:BUILD_NUMBER, $ENV:ProjectName
这将在第一个参数
{0}
和第二个参数{1}
中进行细分。我建议使用格式化字符串来定义$Nexusurl
:
$Nexusurl = "http://ec2-54-xxx-xxx-xxx.us-west-2.compute.amazonaws.com:8081/nexus/content/repositories/releases/org/bar/{0}/{1}.zip" -f $ENV:BUILD_NUMBER, $ENV:ProjectName
这将在{0}
所在的第一个参数和{1}
所在的第二个参数中进行细分