get-service usando o powershell não retorna

1

Se eu enviar este verso para o Powershell

$sName = "ALG"
$service = Get-Service -computername db-name -Name $sName

Eu receberei informações sobre esse serviço nesse computador. Se eu mudar o nome para "db-nameXXX" (nome falso), recebo um erro informando que o serviço não foi encontrado. No entanto, eu tenho um servidor que pára de aceitar sessões de área de trabalho remota (eu também não consigo conectar com o MS SQL Manaagement studio) e enviar esses comandos para essa máquina (quando em uma condição de erro) simplesmente trava ... O script é executado mas nunca retorna. Eu gostaria de ter uma funcionalidade de 'tempo limite' para que, em determinado momento, eu possa enviar uma mensagem dizendo que a máquina não está respondendo. Agora, o roteiro não me deixa fazer nada. Eu tentei um start / process / end block, mas contanto que o get-service não retorne um erro, eu não posso chegar a lugar algum.

    
por richard beck 22.05.2013 / 18:20

1 resposta

6

Tente algo assim:

$sb = [scriptblock]::create("Get-Service -computername db-name -Name $sName")
$job = Start-Job -ScriptBlock $sb | Wait-Job -Timeout 10
if($job -eq $null) {
    #timed out
}
else {
     $service = Receive-Job $job
}

Isso enviará Get-Service como um trabalho e aguardará a conclusão do trabalho. Ao definir um tempo limite no trabalho, se ele falhar, o retorno será nulo. Faça o tratamento de erros que você precisa se o valor for nulo, ou receba o job e elimine o resultado na variável $service se ele for concluído. Isso retornará um objeto Deserialized.System.ServiceProcess.ServiceController . Ajuste -Timeout em Wait-Job para atender às suas necessidades.

    
por 22.05.2013 / 18:51

Tags