powershell スクリプトの一部を終了して続行する に関連します。Powershell Job Always Shows Complete
に部分的に関連しています。
私のスクリプトはローカルで実行され、リモート PC のレジストリ ハイブにアクセスします。レジストリ キーの値を$RegHive
変数に書き込む必要があります。そして、一部のPCがフリーズした場合に備えてジョブとして監視したいので、コマンドを終了して別のPCに移動できます。
私の元のコードは次のようになります。
$global:RegHive = $null
$job = Start-Job -ScriptBlock {
$RegHive = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey("SomeKeyName", "SomePCName")
}
しかし、私が何をしても、変数$RegHive
は空です。
何らかの$RegHive = (Get-Job | Receive-Job)
値がそれに割り当てられる$RegHive
と、ジョブ/スクリプトブロックなしで通常どおり実行する場合とまったく同じように見えます。つまり、次のようになります。
$RegHive = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey("SomeKeyName", "SomePCName")
そして同じものを持っています$RegHive.SubKeyCount
しかし、「通常の」ものには$RegHive.GetSubKeyName()
メソッドがあり、ジョブのものにはありません。
Receive-Job
変数の割り当てを回避し、ジョブとして実行されるスクリプトブロック内で直接割り当てを行うにはどうすればよいですか?
簡単に言えば:
$job = Start-Job -ScriptBlock {$a = 1 + 2}
$a
なしで3に等しくなる方法は$a = (Get-job | Receive-job)
?