Quando eseguo nslookupda 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>$nulldovrebbe bastare perché nslookuppubblica il Non-authoritative answer:messaggio su stdERR. Per la prova, corri >NUL nslookup -q=SOA superuser.compure 2>NUL nslookup -q=SOA superuser.comda una cmdfinestra aperta ...
Non-authoritative answer:linea può essere esclusa tramite il 2>$nullreindirizzamento. Se si utilizza una versione inferiore in cui viene generato un errore, è possibile modificare il $ErrorActionPreference. Non pensare -ErrorActionche sarà disponibile qui. Esistono altre alternative a .NET, tra cui [System.Net.Dns]::GetHostAddresses("superuser.com").
[System.Net.Dns]::Resolve("superuser.com")anziché ilResolve-DNSNamecmdlet. 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)