Сценарий проверки 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
Другие вопросы по тегам