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
スコープ修飾子 を使用することです。
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
Tocomplementbriantistの役立つ回答 :
Invoke-Command
に渡されたスクリプトブロックは、リモートマシンの変数を使用して、リモートマシンで(意図したとおりに)実行されます。デフォルトでは。
したがって、local変数(値)を使用するには、追加の手順が必要です(別の言い方をすれば、リモートで実行されるスクリプトブロック内では、$dest
)のように、通常のようにローカル変数を参照することはできません。
PSv3 +はusing:
スコープ修飾子をスクリプトブロック内のローカル変数の直接使用-briantistの最初のコマンドを参照してください。
using:
は、Invoke-Command
が実際にリモートマシンをターゲットにしている場合にのみ機能することに注意してください。以前のバージョンでも機能する唯一のオプションは、ローカル変数をパラメーターとしてスクリプトブロックに渡すことです。-briantistの2番目のコマンドを参照してください。
詳細については、Get-Help about_Remote_Variables
または オンラインドキュメント を参照してください。