通过ps远程会话复制文件时调用命令失败



我有一个关于如何使用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_commandInvoke-Command语句。

如果将C:TestWarejsonStuff.json内容读取到内存中,并将其作为参数传递到脚本块,并相应地对该参数执行操作,则只能通过一个Invoke-Command调用逃脱惩罚。

最新更新