Я работаю над сценарием проверки 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