Windows

使用 Powershell 作業的 Active Directory sysvol 檢查腳本

  • November 29, 2015

我正在研究用於活動目錄監控的 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 以便它在失敗時產生“終止”錯誤gciget-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

引用自:https://serverfault.com/questions/739379