使用cake-build执行远程PowerShell脚本的问题

时间:2016-10-04 13:46:37

标签: powershell powershell-remoting cakebuild

我正在尝试执行以下test.ps1脚本

param([string]$name,[string]$password);
write-Output "Hello $($name) my password is  $($password)";
dir c:\
New-Item c:\HRTemp\test.txt -ItemType file
使用以下命令

在远程服务器上

StartPowershellScript("Invoke-Command", args =>
{
    args.Append("ScriptBlock", "{{c:\\test.ps1 -name dato -password test}}" );
});

我能够从命令行成功调用此命令,现在我想要使用cake脚本。

我正在使用Cake.Powershell插件。

当我尝试使用一个大括号{c:\\test.ps1 -name dato -password test}执行它时,我收到错误:

Error: Input string was not in a correct format.

当我用两个大括号

尝试时

{{c:\\test.ps1 -name dato -password test}}

输出如下

Executing: Invoke-Command -ScriptBlock {{c:\test.ps1 -name dato -password test}}

但是,当我检查远程服务器时,没有创建test.txt文件。

你知道为什么会这样吗?

1 个答案:

答案 0 :(得分:3)

这是由Cake.Powershell插件内部使用的ProcessArgumentBuilder以及Cake内部记录器内部使用的格式解析器对花括号的不同处理造成的。

我向Cake.Powershell提交了一份PR,现已合并并发布了新版本,因此升级到version 0.2.7将为您解决此问题。

然后您应该可以使用以下内容:

StartPowershellScript("Invoke-Command", args =>
{
    args.Append("hostname").Append("-ScriptBlock {c:\\test.ps1 -name dato - password test}");
});

虽然日志中包含双括号,但实际命令只会使用单个括号,并且应该正确运行。