Quando eseguo nslookup
da uno script di PowerShell, ricevo sempre un errore (che viene inviato alla console) nonostante il fatto che la ricerca abbia esito positivo:
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
Ciò sembra essere causato dal fatto che la risposta non è autorevole. Effettuare una ricerca su un server DNS autorevole non restituisce un errore.
Nei miei tentativi di trovare una soluzione da solo, ho trovato questa risposta SO . Suggerisce di usare il comando Resolve-DNSName . Sfortunatamente ciò richiede Windows 8.1 / Server 2012 R2 e alcuni dei sistemi su cui verrà eseguito il mio script sono Windows 7-era.
Come posso impedire che questo errore venga visualizzato?
Punti bonus per spiegare perché PowerShell pensa che si sia verificato un errore!
$ErrorActionPreference = "SilentlyContinue"
all'inizio dello script. Tieni presente che questo eliminerà qualsiasi errore nello script dalla visualizzazione
$MyOutput = nslookup -q=SOA superuser.com 2>$null
dovrebbe bastare perché nslookup
pubblica il Non-authoritative answer:
messaggio su stdERR. Per la prova, corri >NUL nslookup -q=SOA superuser.com
pure 2>NUL nslookup -q=SOA superuser.com
da una cmd
finestra aperta ...
Non-authoritative answer:
linea può essere esclusa tramite il 2>$null
reindirizzamento. Se si utilizza una versione inferiore in cui viene generato un errore, è possibile modificare il $ErrorActionPreference
. Non pensare -ErrorAction
che sarà disponibile qui. Esistono altre alternative a .NET, tra cui [System.Net.Dns]::GetHostAddresses("superuser.com")
.
[System.Net.Dns]::Resolve("superuser.com")
anziché ilResolve-DNSName
cmdlet. Per quanto riguardanslookup
, interessante notare che non sta generando un errore in Posh 5, ma dirige ilNon-authoritative answer:
verso la console (anche se l'output è valutato in variabile - proprio come nel tuo esempio)