Назад | Перейти на главную страницу

Сценарий проверки sysvol Active Directory с использованием заданий Powershell

Я работаю над сценарием проверки sysvol для мониторинга активного каталога. Завершил скрипт, который проверяет подключение к sysvol на всех контроллерах домена в данном домене. В рамках этого я выполняю следующую проверку

Start-Job -sb "(Measure-Command{Dir \\$DCName\sysvol\$Domain\Policies}).Milliseconds"

возвращает время в миллисекундах; к сожалению, он возвращает время, даже если sysvol недоступен, и это даже быстрее, чем если бы он был доступен, по очевидным причинам.

Мой вопрос: когда я получаю работу, есть ли способ узнать, есть ли в работе ошибки? потому что команда измерения не дает полной картины. Пожалуйста, дайте мне знать, если у вас возникнут другие вопросы по этому поводу.

Во-первых, я не понимаю вашего синтаксиса. Я использую 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