2016-02-18 14 views
6

Invoke-Commandを使用してリモートサーバーにあるファイルのファイルハッシュを取得しようとしています。Invoke-Commandでリモートマシン上で実行されるスクリプトブロックにローカル変数を渡すにはどうしたらいいですか?

Invoke-Command -ComputerName winserver -ScriptBlock { 
    Get-FileHash E:\test\testfile.zip -Algorithm SHA1 
} 

上記のコマンド作品:私は以下のようにフルパスを与えるとき、私は、それが正常に動作PowerShellのバージョン4に私のスクリプトを実行していますよ。しかし、私は以下のように変数を使ってファイル名を渡す必要があります:

Invoke-Command -ComputerName winserver -ScriptBlock { 
    Get-FileHash E:\test\$dest.zip -Algorithm SHA1 
} 

私はスクリプトとpowershellを初めて使いました。どうぞ、これを解決するために私を助けてください! PowerShellの4において

答えて

9

(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 
4

を補完briantist's helpful answer

Invoke-Commandに渡されるスクリプトブロックは、(意図された)execuです。 リモートマシンで、リモートのデフォルトでマシン変数を使用します。

したがって、ローカル変数(値)を使用するために、追加の手順が異なり、それを置くために(を必要としている:通常どおり、リモートで実行されるスクリプトブロック内で、あなただけのローカル変数を参照することができません、このような)$destと同様:

  • PS V3 +は、スクリプトブロック内のローカル変数の直接使用するためusing:スコープ修飾子を提供 - ブライアントの最初のコマンドを参照してください。 Invoke-Commandが実際にリモートマシンをターゲットにしたときにusing:にのみ動作することを

    • 注意。
  • も以前のバージョンで動作する唯一のオプションは、スクリプトブロックへパラメータとしてローカル変数を渡すです。 - ブライアントの第2のコマンドを参照してください。詳細について

Get-Help about_Remote_Variablesまたはdocs onlineを指します。

+1

ありがとうございます、私は通常このものを追加し、時間がありませんでした。 +1 – briantist

関連する問題