我有一个关于如何使用Powershell正确构建命令的问题。
这是我遇到问题的代码。
$python_command =
{
param($script)
C:\Python27\python.exe $script
return $lastexitcode
}
$exit_code = Invoke-Command Copy-Item -Path C:\TestWare\jsonStuff.json -Destination
C:\Tunnel\Tunneling\jsonStuff.json -ToSession $Session - ScriptBlock $python_command -ArgumentList $exec_script
#Clean up
ExitWithCode($exit_code)
我假设$exit_code
的格式存在问题,因为当它具有此值时
Copy-Item -Path C:\TestWare\jsonStuff.json -Destination C:\Tunnel\Tunneling\jsonStuff.json -ToSession $Session
没有问题。我希望python命令也能运行。这些命令可以分开吗,或者它们如何一起工作?目前,我收到以下错误
Invoke-Command : A parameter cannot be found that matches parameter name 'Path'.
At C:\TestWare\run-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
}
答案 0 :(得分:0)
Invoke-Command
有许多不同的参数集,但是只有两种基本方法可以指定要[远程]调用的命令:
通过-FilePath
参数,该参数需要 local 脚本的路径,该脚本的 content 会转换为脚本块,然后在目标机器。
通过-ScriptBlock
参数,该参数接受脚本块({ ... }
)
因此,您尝试通过脚本块和直接进行Copy-Item
调用的尝试无效。
您似乎需要 2 条语句:
通过Copy-Item
调用将某些内容复制到与$Session
的会话-ToSession
中。
用于在会话Invoke-Command
中执行脚本块$python_command
的{{1}}语句。
如果您将-Session $Session
的 content 读入内存并将其作为 argument 传递,则只能通过一个Invoke-Command
调用才能摆脱困境到脚本块并相应地对该参数执行操作。