传递给Powershell的参数中的Escape%

时间:2012-05-25 11:07:45

标签: powershell msbuild

我有一个MSBuild脚本启动PowerShell以在远程计算机上执行某些工作,因此您必须传递密码才能创建远程会话,但是存在问题 - 如果密码包含%字符则解析错误 - %丢失(例如:传递%word - >密码,'%' - >''(无))。

如果我在PowerShell脚本中创建变量$ password =“pass%word”,它可以正常工作。 我知道%是在PowerShell中的foreach,所以我试图用` - 来逃避它 - 但它没有帮助。 我也可以更改密码,但这不是一个选项(现在)。

那我怎么解决这个问题呢?

MSBuild部分

<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" DefaultTargets="Test">
<Target Name="Test">
        <!-- %25 - it's code for %-->
        <Exec Command="powershell &quot;&amp; {. 'C:\test.ps1';Test -password '`%25'}&quot;" />
    </Target>
</Project>

test.ps1

Function Test {
    param (
        [string]$password = $(throw "Please specify password")
    )

    Write-Host $password
}

1 个答案:

答案 0 :(得分:4)

在批处理文件中,可以使用双百分号(%%)“转义”百分号。 所以这将解决问题:

<Exec Command="powershell &quot;&amp; {. 'C:\test.ps1';Test -password '%25%25'}&quot;" />