How do I pass a local variable to a remote `Invoke-Command`?
本问题已经有最佳答案,请猛点这里访问。
我正在尝试使用
1 2 3 | Invoke-Command -ComputerName winserver -ScriptBlock { Get-FileHash -Path E:\\test\\testfile.zip -Algorithm SHA1 } |
但是我需要通过一个变量来传递文件名,如下所示:
1 2 3 | Invoke-Command -ComputerName winserver -ScriptBlock { Get-FileHash -Path"E:\\test\\$dest.zip" -Algorithm SHA1 } |
如何在远程会话的
在PowerShell 4(实际上是3)中,最简单的方法是使用
1 2 3 | Invoke-Command -ComputerName winserver -ScriptBlock { Get-FileHash E:\\test\\$Using:dest.zip -Algorithm SHA1 } |
对于适用于所有版本的解决方案:
1 2 3 4 5 | Invoke-Command -ComputerName winserver -ScriptBlock { param($myDest) Get-FileHash E:\\test\\$myDest.zip -Algorithm SHA1 } -ArgumentList $dest |
为补充briantist的有用答案:
默认情况下,使用远程计算机的变量在远程计算机上执行传递给
因此,为了使用局部变量(值),需要执行额外的步骤(换句话说:在远程执行的脚本块中,您不能像通常那样仅引用局部变量,例如
-
PS v3提供了
using: 范围修饰符,可直接在脚本块内使用局部变量-请参见briantist的第一个命令。-
请注意,
using: 仅在Invoke-Command 实际上以诸如-ComputerName 参数为目标的远程计算机为目标时才起作用。
-
请注意,
-
在早期版本中也唯一可行的选项是将局部变量作为参数传递给脚本块。 -请参阅briantist的第二个命令。