
Quando executo nslookup
um script do PowerShell, sempre recebo um erro (que é enviado para o console), apesar de a pesquisa ter sido 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 oficial. Fazer uma pesquisa em um servidor DNS autoritativo não retorna um erro.
Nas minhas tentativas de encontrar uma solução, descobri issoEntão responde. Ele sugere usar oResolver-DNSNamecomando. Infelizmente, isso requer o Windows 8.1/Server 2012 R2 e alguns dos sistemas em que meu script será executado são da era Windows 7.
Como posso evitar que esse erro seja exibido?
Pontos extras por explicar por que o PowerShell acha que ocorreu um erro!
Responder1
Ignore o erro do executável redirecionando para $null
Seu executável está enviando 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
$null
a variável do PowerShell. PS não permitirá que você faça isso à moda antiga (ou seja2>nul
).Redirecionando para
$null
é mais rápidodo que usarOut-Null
Explicação
NSLookup está enviando uma parte de sua saída para oFluxo STDERR. Sempre que um aplicativo de console do Windows faz isso, o PowerShell relata isso como umNativeCommandErrorerro.
No prompt de comando, execute nslookup -q=SOA superuser.com 1>nul 2>con
para ver o que o NSLookup está gravando no STDERR:
Resposta não oficial:
Isso éexatamenteo que o PowerShell retorna na primeira linha de sua mensagem de erro:
nslookup: Resposta não oficial:
Na linha: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, então você pode ignorar o erro descrito acima.