Сценарий проверки sysvol Active Directory с помощью заданий Powershell
Я работаю над сценарием проверки sysvol для мониторинга активной директории. Завершен скрипт, который проверяет подключение к sysvol на всех контроллерах домена в данном домене. В рамках этого я делаю проверку ниже
Start-Job -sb "(Measure-Command{Dir \\$DCName\sysvol\$Domain\Policies}).Milliseconds"
возвращает время, затраченное на миллисекунды; к сожалению, он возвращает время, даже когда sysvol недоступен, и он еще быстрее по сравнению с доступным по очевидным причинам.
Мой вопрос: когда я получаю работу, есть ли способ узнать, есть ли ошибки на работе? потому что команда измерения не дает всей картины. Пожалуйста, дайте мне знать, если есть какие-либо дополнительные вопросы по этому поводу.
1 ответ
Во-первых, я не понимаю ваш синтаксис. Я использую PS v5 на Windows 10, и ваш фрагмент кода даже не запускается, потому что вы покормили Start-Job
строка, а не блок скрипта. А также -sb
не был приемлемым псевдонимом / сокращением для -ScriptBlock
для меня.
Но кто знает, может быть, это было законно в PS v4. Это не относится к делу.
Вы должны добавить -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
Теперь вы видите, что та же самая работа входит в состояние 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