我有一个关于如何使用powershell正确构建命令的问题。
这是我遇到问题的代码。
$python_command =
{
param($script)
C:Python27python.exe $script
return $lastexitcode
}
$exit_code = Invoke-Command Copy-Item -Path C:TestWarejsonStuff.json -Destination
C:TunnelTunnelingjsonStuff.json -ToSession $Session - ScriptBlock $python_command -ArgumentList $exec_script
#Clean up
ExitWithCode($exit_code)
我假设$exit_code
的格式有问题,因为当它有这个值时
Copy-Item -Path C:TestWarejsonStuff.json -Destination C:TunnelTunnelingjsonStuff.json -ToSession $Session
不存在任何问题。不过,我希望python命令也能运行。这些命令可以分开吗?或者它们如何作为一个命令工作?目前,我得到以下错误
Invoke-Command : A parameter cannot be found that matches parameter name 'Path'.
At C:TestWarerun-test3.ps1:122 char:39
+ $exit_code = Invoke-Command Copy-Item -Path C:TestWare ...
+ ~~~~~
+ CategoryInfo : InvalidArgument: (:) [Invoke-Command], ParameterBindingException
+ FullyQualifiedErrorId : NamedParameterNotFound,Microsoft.PowerShell.Commands.InvokeCommandCommand
有关于如何修复的想法吗?我也使用Powershell版本5。
(编辑(这是我的ExitWithCode功能
function ExitWithCode
{
param
(
$exitcode
)
$host.SetShouldExit($exitcode)
exit
}
Invoke-Command
有许多不同的参数集,但只有两种基本方法可以指定要调用的命令[远程]:
-
通过
-FilePath
参数,该参数期望本地脚本的路径,其内容被转换为脚本块,然后在目标计算机上执行。 -
通过接受脚本块(
{ ... }
(的-ScriptBlock
参数
因此,直接传递脚本块和Copy-Item
调用的尝试无法工作。
看起来您需要2语句:
-
Copy-Item
调用,用于将某些内容复制到具有-ToSession
的会话$Session
。 -
用于在会话
-Session $Session
中执行脚本块$python_command
的Invoke-Command
语句。
如果将C:TestWarejsonStuff.json
的内容读取到内存中,并将其作为参数传递到脚本块,并相应地对该参数执行操作,则只能通过一个Invoke-Command
调用逃脱惩罚。