使用 cake-build 执行远程 powershell 脚本的问题
Issues of executing remote powershell script using cake-build
我正在尝试执行以下 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 文件没有创建。
你知道为什么会这样吗?
这是由于 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}");
});
虽然日志将包含双大括号,但实际命令将仅使用单大括号并且应该 运行 正确。
我正在尝试执行以下 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 文件没有创建。
你知道为什么会这样吗?
这是由于 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}");
});
虽然日志将包含双大括号,但实际命令将仅使用单大括号并且应该 运行 正确。