3

我有一个 psake 脚本来管理我的部署,过程如下:

  1. 编译和运行测试
  2. 使用 msbuild 生成部署包
  3. 检查我们是在内部部署还是在外部部署
  4. 如果是内部的,执行生成的cmd文件
  5. 如果是外部的,则提示输入用户名和密码,并以用户名和密码作为参数执行生成的 cmd 文件

我在外部部署时以以下方式执行 msdeploy:

exec { & $deploy_cmd /Y /M:$msdeploy_url /U:$user /P:$pwd /A:NTLM }

当密码包含与号 (&) 时,我假设 cmd 文件在将参数分配给变量时会分配 & 之前的密码部分,然后尝试执行该部分。这是 bat 文件行为(& 用于分隔命令)。

我尝试在提示输入密码时使用插入符号 (^) 转义密码,但这没有用。

除了更改密码,还有其他选择吗?

4

1 回答 1

0

因为 cmd 文件正在解析参数,然后将它们作为原始字符串再次传递,这是我得到 | 的唯一方法。在密码中使用的字符是在某些特殊字符之前使用 ^^^ 对其进行三次转义。我假设 & 会以类似的方式工作。或者您可以转义密码中的所有字符:

    $pwd = $pwd -replace '.','^^^$&'
于 2017-09-02T13:22:46.547 回答