powerShell内で、変数を開始ジョブに呼び出す最良の方法を学びたいので、スクリプトを配置したクライアントに基づいて特定されるため、サーバーごとにスクリプトを編集する必要はありません。
$Servername = 'Server1'
$pingblock = {
pathping $servername | Out-File C:\client\PS\ServerPing.TXT
}
start-job $pingblock
上記のコードを実行すると、$ servernameの指定を忘れたかのように、ヘルプを含むファイルを取得します。
使用 -ArgumentList
パラメータStart-Job
例:
Start-Job -Scriptblock {param($p) "`$p is $p"} -Arg 'Server1'
あなたの場合:
$pingblock = {param($servername) pathping $servername | Out-File C:\...\ServerPing.txt}
Start-Job $pingblock -Arg Server1
PSv3 +の代替案で キースヒルの役立つ回答 を補完するには:
$using:
スコープ修飾子 は、引数を渡す代わりに、Start-Job
に渡されたスクリプトブロック内の呼び出し元のスコープ内の変数の値を参照するために使用できます(デフォルトでは、バックグラウンドジョブとして実行されたスクリプトブロックは、しない呼び出し元の変数またはその他の定義を参照しません)。
$Servername = 'Server1'
Start-Job { "Target: " + $using:ServerName } | Receive-Job -Wait -AutoRemoveJob
上記の結果は:
Target: Server1
リモートコンピューターで実行するスクリプトブロックをInvoke-Command
に渡す場合も同じ手法を使用できることに注意してください- この質問 を参照してください。