Sysvol do Active Directory Verifique o script usando o Powershell Jobs

1

Estou trabalhando em um script de verificação sysvol para o monitoramento de diretório ativo. Concluiu o script que verifica a conectividade com o sysvol em todos os controladores de domínio no domínio especificado. Como parte disso eu estou fazendo o check abaixo

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

isso retorna o tempo gasto em milissegundos; infelizmente ele retorna o tempo até que o sysvol é inacessível e é ainda mais rápido se comparado a ele, devido a razões óbvias.

Minha pergunta é quando eu recebo-Job, existe uma maneira de descobrir se o trabalho tem erros? porque o comando de medida não dá a imagem completa. Por favor, deixe-me saber se há outras perguntas adicionais sobre isso.

    
por Darktux 27.11.2015 / 18:06

1 resposta

6

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
    
por 29.11.2015 / 20:51