ActiveDirectory監視用のsysvolチェックスクリプトに取り組んでいます。指定されたドメイン内のすべてのドメインコントローラーでsysvolへの接続をチェックするスクリプトを完了しました。この一環として、私は以下のチェックを行っています
Start-Job -sb "(Measure-Command{Dir \\$DCName\sysvol\$Domain\Policies}).Milliseconds"
これは、ミリ秒単位でかかった時間を返します。残念ながら、明らかな理由により、sysvolにアクセスできない場合でも、アクセス可能な場合に比べてさらに高速な時間を返します。
私の質問は、いつ受け取るかです-ジョブ、ジョブにエラーがあるかどうかを確認する方法はありますか?測定コマンドでは全体像がわからないためです。これに関して他にご不明な点がありましたらお知らせください。
まず、あなたの構文がわかりません。私はWindows10でPSv5を実行していますが、スクリプトブロックではなく文字列をStart-Job
に入力したため、コードスニペットも実行されません。そして、-sb
は私にとって-ScriptBlock
の受け入れ可能な別名/省略形ではありませんでした。
しかし、誰が知っているか、多分それはPSv4では合法でした。それは重要なことではありません。
-ErrorAction Stop
をdir
/gci
/get-childitem
コマンドレットに追加して、失敗した場合に「終了」エラーを生成するようにする必要があります。
見よ、これが私が-ErrorAction Stop
を指定しないときの仕事です:
PS C:\> $MyJob = Start-Job -ScriptBlock { (Measure-Command{Dir \\$DCName\sysvol\$Domain\Policies}).Milliseconds }
PS C:\> $MyJob.State
Running
PS C:\> $MyJob.State
Completed
ジョブが実際に成功したか失敗したかはわかりません。ジョブの状態は、ジョブの成功に関係なく、単に実行中から完了になります。
それでは、終了エラーで再試行してみましょう。
PS C:\> $MyJob = Start-Job -ScriptBlock { (Measure-Command{Dir \\$DCName\sysvol\$Domain\Policies -ErrorAction Stop}).Milliseconds }
PS C:\> $MyJob.State
Running
PS C:\> $MyJob.State
Failed
これで、同じジョブが失敗の状態になっていることがわかります。あなたは今あなたの仕事が失敗したことを知っています。さらに、ジョブの結果を次のように保存する場合
PS C:\> $Result = Receive-Job $MyJob
ジョブが失敗した場合、$Result
はnullになります。
ジョブ内で発生した特定のエラーを保存する場合は、次のことを試してください。
PS C:\> Receive-Job $MyJob -ErrorVariable Result
PS C:\> $Result
Cannot find path '\\\sysvol\\Policies' because it does not exist.
+ CategoryInfo : ObjectNotFound: (\\\sysvol\\Policies:String) [Get-ChildItem], ItemNotFoundException
+ FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.GetChildItemCommand
+ PSComputerName : localhost