无法通过Invoke-Expression传递参数

时间:2017-06-01 11:59:47

标签: powershell windows-server-2008-r2 windows-server-2012 azure-pipelines-release-pipeline

我们正在通过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(脚本不起作用的地方)

0 个答案:

没有答案