Primeiro, não entendo sua sintaxe. Estou executando o PS v5 no Windows 10 e seu snippet de código nem funciona, porque você alimentou Start-Job
uma string, não um bloco de script. E -sb
não era um alias / atalho aceitável para -ScriptBlock
para mim.
Mas quem sabe, talvez isso tenha sido legal no PS v4. Isso é irrelevante.
Você deve adicionar -ErrorAction Stop
ao cmdlet dir
/ gci
/ get-childitem
para gerar um erro de "término" se falhar.
Eis que aqui está o trabalho quando não especifico -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
Não sei se o trabalho foi realmente bem-sucedido ou não. O estado do trabalho simplesmente passa de Executar para Concluído, independentemente do sucesso do trabalho.
Agora vamos tentar novamente com um erro de finalização:
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
Agora você vê que o mesmo trabalho entra em estado de Falha. Você agora sabe que seu trabalho falhou. Além disso, se você salvasse os resultados do trabalho com
PS C:\> $Result = Receive-Job $MyJob
$Result
será nulo se o trabalho falhar.
Se você deseja armazenar o erro específico que ocorreu no trabalho, tente o seguinte:
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