Windows
使用 Powershell 作業的 Active Directory sysvol 檢查腳本
我正在研究用於活動目錄監控的 sysvol 檢查腳本。完成了檢查給定域中所有域控制器上 sysvol 連接性的腳本。作為其中的一部分,我正在做以下檢查
Start-Job -sb "(Measure-Command{Dir \\$DCName\sysvol\$Domain\Policies}).Milliseconds"
這將返回以毫秒為單位的時間;不幸的是,由於明顯的原因,即使 sysvol 無法訪問,它也會返回時間,並且與可訪問相比,它甚至更快。
我的問題是當我收到工作時,有沒有辦法找出工作是否有錯誤?因為測量命令並沒有給出全貌。如果對此有任何其他問題,請告訴我。
首先,我不明白你的語法。我在 Windows 10 上執行 PS v5,你的程式碼片段甚至沒有執行,因為你輸入
Start-Job
了一個字元串,而不是一個腳本塊。對我來說,這-sb
不是一個可接受的別名/速記-ScriptBlock
。但誰知道呢,也許這在 PS v4 中是合法的。那是無關緊要的。
您應該添加
-ErrorAction Stop
到您的dir
// cmdlet 以便它在失敗時產生“終止”錯誤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
我不知道這項工作實際上是成功還是失敗。無論作業是否成功,作業的狀態都會從 Running 變為 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
如果作業失敗,將為空。如果要儲存作業中發生的特定錯誤,請嘗試以下操作:
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