NSLookup no PowerShell sempre gera erro RemoteException

1

Quando executo nslookup de um script do PowerShell, sempre recebo um erro (que é enviado para o console), apesar do fato de a pesquisa ser bem-sucedida:

PS C:\Windows\system32> $MyOutput = nslookup -q=SOA superuser.com
8.8.4.4 nslookup : Non-authoritative answer: At line:1 char:13
+ $MyOutput = nslookup -q=SOA superuser.com 8.8.4.4
+             ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (Non-authoritative answer::String) [], RemoteException
    + FullyQualifiedErrorId : NativeCommandError

Isso parece ser causado pelo fato de a resposta não ser autoritativa. Fazer uma pesquisa em um servidor DNS autoritativo não retorna um erro.

Nas minhas tentativas de encontrar uma solução, encontrei esta resposta SO . Ele sugere o uso do comando Resolve-DNSName . Infelizmente, isso requer o Windows 8.1 / Server 2012 R2 e alguns dos sistemas em que meu script será executado são do Windows 7.

Como posso evitar que esse erro seja exibido?

Pontos de bônus para explicar por que o PowerShell acha que ocorreu um erro!

    
por Twisty Impersonator 24.09.2017 / 22:33

1 resposta

1

Ignore o erro do executável redirecionando para $ null

O seu executável está enviando a saída para o fluxo STDERR. Você pode suprimi-lo redirecionando-o para a variável $ null automática:

nslookup.exe example.com 2>$null

Notas:

  • Você deve redirecionar para a variável $null do PowerShell. O PS não permite que você faça da maneira antiga (por exemplo, 2>nul ).

  • Redirecionar para $null é mais rápido do que usar Out-Null

Explicação

O NSLookup está enviando uma parte de sua saída para o fluxo STDERR . Sempre que um aplicativo de console do Windows faz isso, o PowerShell relata isso como um erro NativeCommandError .

No Prompt de Comando, execute nslookup -q=SOA superuser.com 1>nul 2>con para ver o que o NSLookup está escrevendo para o STDERR:

Non-authoritative answer:

Isso é exatamente que o PowerShell retorna na primeira linha de sua mensagem de erro:

nslookup : Non-authoritative answer:
At line:1 char:1
+ nslookup -q=ns example.com

Aparentemente, o NSLookup retorna um erro quando sua resposta inclui registros de um servidor de nomes não autoritativo. No entanto, no seu caso, isso não parece ser um problema, portanto você pode ignorar o erro conforme descrito acima.

    
por 04.10.2017 / 05:09