我正在尝试使用Invoke-Command
检索位于远程服务器上的文件的哈希值。当我给出完整路径时,它工作正常如下:
Invoke-Command -ComputerName winserver -ScriptBlock {
Get-FileHash -Path E:\test\testfile.zip -Algorithm SHA1
}
但是我需要通过变量传递文件名,如下所示:
Invoke-Command -ComputerName winserver -ScriptBlock {
Get-FileHash -Path "E:\test\$dest.zip" -Algorithm SHA1
}
如何在远程会话的scriptblock
中访问此变量?
在PowerShell 4(实际上3+)中最简单的方法是使用Using
scope modifier:
Invoke-Command -ComputerName winserver -ScriptBlock {
Get-FileHash E:\test\$Using:dest.zip -Algorithm SHA1
}
对于适用于所有版本的解决方案:
Invoke-Command -ComputerName winserver -ScriptBlock {
param($myDest)
Get-FileHash E:\test\$myDest.zip -Algorithm SHA1
} -ArgumentList $dest
传递给Invoke-Command
的脚本块是(按预期)在远程计算机上执行,默认情况下使用远程计算机的变量。
因此,为了使用局部变量(值),需要额外的步骤(换句话说:在远程执行的脚本块中,你不能像往常一样引用局部变量,例如使用$dest
):
using:
范围修饰符,用于直接在脚本块中使用局部变量 - 请参阅briantist的第一个命令。
请注意,using:
仅在Invoke-Command
实际上以远程计算机为目标时才有效。有关更多信息,请参阅Get-Help about_Remote_Variables
或docs online。