我们正在通过VSTS使用远程PowerShell部署并调用部署脚本。
当我从VSTS代理运行此脚本(代理程序在Windows 2008 R2上运行)并使用Windows 2012在计算机(目标)上部署时,脚本可以传递参数。但是,当我尝试在Windows 2008的目标计算机上部署它时,没有任何参数被传递。
编辑,以便更好地参考,粘贴函数的完整代码:
function ExecuteDSCScript([string]$file, [string]$machine, [object]$params) {
# Sample value for $file is MyDeploymentFolder\MyDeploymentScript.ps1
$arguments = ""
foreach ($param in $params) {
$arguments = $arguments + " -" + $param.name + " '" + $param.value + "'" #Param is a key value pair
}
Write-Verbose $arguments.ToString() -Verbose
$command = $file + $arguments + " -Ensure " + $Ensure + " -DeployServerName " + $machine #Forming PS command for remote execution
# writing command in log with our password
$paramslogging = $params
foreach ($param in $paramslogging) {
if ($param.Name.ToLower() -eq "password") {
#masking the password so that it doesnt appear on console logs
$param.Value= "************"
}
}
$argumentslogging = ""
foreach ($param in $paramslogging) {
$argumentslogging = $argumentslogging + " -" + $param.Name + " '" + $param.Value + "'"
}
$commandlogging = $file + $argumentslogging + " -Ensure " + $Ensure + " -DeployServerName " + $machine
Write-Verbose $commandlogging -Verbose # I am able to get the complete list of parameters here (i.e. value of $argumentslogging)
$result = Invoke-Expression -Command $command
}
脚本$file
中的所有参数都是空的,因为远程执行失败,我还将日志放入调用的脚本中,当目标机器是2008 R2时,所有值都为空,但是我尝试在使用Windows Server 2012的计算机上运行相同的脚本,它可以工作。
更新: - 下面的另一个不同之处是机器的.Net版本: - 代理 - .Net 4.6 Target1 - .Net 4.6(脚本工作的地方) Target2 - .Net 4.5.2(脚本不起作用的地方)