Se stai gestendo server web o di posta, sai quanto sia importante avere record DNS adeguatamente configurati. La mancanza di record DNS può causare una serie di problemi, tra cui gli utenti che non riescono a trovare il tuo sito web o la non consegna delle email. È una cosa positiva che esista il cmdlet Resolve-DnsName di PowerShell, con il quale è possibile automatizzare il monitoraggio dei record DNS tramite scripting.
La giornata di un amministratore è già abbastanza piena, e controllare manualmente se i record DNS possono essere risolti correttamente significa più sforzo manuale.
In questo articolo, imparerai cosa e come utilizzare il cmdlet Resolve-DnsName
per interrogare i record DNS con PowerShell. Alla fine di questo articolo, avrai anche imparato come creare uno script di base per creare un rapporto dei tuoi record DNS nominati da monitorare.
Prerequisiti
Questo articolo è una guida pratica e, se hai intenzione di seguirla con gli esempi, avrai bisogno di:
- A computer running Windows 10 or above.
- Windows PowerShell 5.1 o PowerShell 7.0
- A script editor such as Visual Studio Code, Atom, or Notepad++.
Resolve-DnsName: Il risolutore DNS di PowerShell
Esistono più modi per effettuare una query DNS. Il cmdlet Resolve-DnsName
è simile al nslookup
strumento da riga di comando incluso in Windows o al dig
comando se sei più orientato a Linux.
Alcuni siti web offrono servizi di monitoraggio/rapporto dei record DNS. Ma, questi servizi di terze parti sono per lo più a pagamento, ovviamente. C’è un’alternativa gratuita, che ti permette anche di mostrare le tue competenze di scripting!
Il cmdlet Resolve-DnsName
, come suggerisce il nome, risolve i nomi DNS in indirizzi IP e viceversa. Questo cmdlet fa parte del modulo PowerShell dnsclient che, al momento della stesura di questo testo, viene fornito con Windows 10, Windows Server 2012/R2, Windows Server 2016 e Windows Server 2019.
Poiché Resolve-DnsName
è un cmdlet di PowerShell, restituisce i risultati come oggetti che possono essere archiviati, manipolati ed esportati. Ad esempio, cercando il record DNS di google.com utilizzando il comando Resolve-DnsName google.com
ti darà l’output mostrato di seguito.

Il risultato è stato restituito come un oggetto che ti permette di esportare i risultati in un file CSV, o manipolare il formato per produrre rapporti in HTML.
Il cmdlet Resolve-DnsName
è diverso dall’utility “vecchia scuola” nslookup
. nslookup
restituisce una semplice stringa. Puoi vedere un esempio nella seguente immagine. Se hai bisogno di estrarre qualsiasi informazione da questa stringa, sarà una lotta.

Interrogare Diversi Tipi di Record DNS
Per impostazione predefinita, il comando Resolve-DnsName
interroga i tipi di record DNS A e AAAA. Ad esempio, se si cerca il record DNS per gmail.com
utilizzando il comando seguente:
Come si può vedere di seguito, vengono restituiti solo i record AAAA e A. Ciò è dovuto al fatto che non è stato specificato il tipo di record DNS da cercare.

Ora, dato che sappiamo tutti che gmail.com è un dominio email utilizzato dal servizio email di Google, ci deve essere un record MX associato, giusto? Beh, non c’è bisogno di supporre quando è possibile confermare utilizzando questo comando:
L’output mostrato nella schermata sottostante mostra l’elenco dei record MX per gmail.com.

Per saperne di più sui diversi tipi di record che possono essere utilizzati con
Resolve-DnsName
, visita questo link e cerca la tabella per il parametro-Type
. Oppure puoi fare riferimento all’aiuto di Resolve-DnsName utilizzando il comandoget-help Resolve-DnsName
.
Utilizzo di Server Specifici per la Ricerca DNS
Resolve-DnsName
utilizza per impostazione predefinita gli indirizzi del server DNS configurati sul tuo computer. Tuttavia, puoi anche fare in modo che Resolve-DnsName
utilizzi un server DNS specifico durante le ricerche.
Ad esempio, se desideri utilizzare Google Public DNS per cercare i record, puoi farlo aggiungendo il parametro -Server
nel tuo comando, come nell’esempio seguente.
Il risultato del comando sarebbe simile a quello mostrato nell’immagine di seguito.

A questo punto, potresti chiederti: “perché dovrei utilizzare un server DNS diverso?”. Questa è una domanda valida. Se provi a cercare lo stesso record utilizzando il server DNS predefinito del tuo computer o un altro server DNS, probabilmente otterrai lo stesso risultato.
Ci potrebbero essere molte ragioni per utilizzare server DNS diversi con Resolve-DnsName
. Alcuni di questi motivi potrebbero includere:
- Velocità – Alcuni server DNS possono essere più veloci di altri.
- Sicurezza – Alcuni server DNS possono avere misure di sicurezza più avanzate rispetto ad altri per prevenire hijack e attacchi.
- Disponibilità dei record – Nella maggior parte dei casi, le organizzazioni hanno i propri server DNS interni che contengono le zone e i record per i nomi che vengono risolti solo internamente. In questo caso, la ricerca di un nome interno utilizzando un server DNS pubblico non avrà successo.

- I server DNS non inoltrano le richieste – Alcune organizzazioni non consentono l’inoltro DNS. L’utilizzo di tali server per la ricerca di record DNS pubblici non avrà successo.
- Risoluzione dei problemi e testing – Quando i tuoi server DNS preferiti non funzionano correttamente, potresti voler testare le tue ricerche utilizzando un diverso server DNS.
Segnalazione dei record DNS utilizzando uno script PowerShell
Ora che hai imparato le basi su come utilizzare il cmdlet Resolve-DnsName
, in questa sezione imparerai a creare uno script PowerShell per monitorare e segnalare i record DNS. Dovresti essere in grado di applicare le conoscenze acquisite nelle sezioni precedenti per costruire questo script.
Avvia il tuo editor di script preferito e crea un nuovo file chiamato GetDnsRecord.ps1.
Definizione delle variabili
Innanzitutto, determina le variabili da utilizzare. Queste variabili includeranno le seguenti:
$NameList
– Questa variabile conterrà i nomi dei record DNS che desideri che il tuo script interroghi$Serverlist
– Utilizza questa variabile per indicare i server DNS che verranno utilizzati dallo script per le ricerche.
Copia il codice di seguito e incollalo all’inizio del tuo script.
Esecuzione delle ricerche DNS
Successivamente, il codice deve essere in grado di cercare il record DNS di ciascuno dei nomi specificati. In questo caso, verrà utilizzato il ciclo foreach per iterare l’elenco dei record e cercare ciascun nome utilizzando Resolve-DnsName
.
La riga $FinalResult = @()
crea un array vuoto in cui verrà memorizzato il risultato finale. Quindi, utilizzando il ciclo foreach, PowerShell passa ogni elemento nella variabile $NameList
a una variabile chiamata $Name
.
In ogni iterazione, la riga $tempObj = "" | Select-Object Name,IPAddress,Status,ErrorMessage
crea un oggetto temporaneo con quattro proprietà per contenere il risultato della ricerca DNS.
Successivamente, lo statement try{}
viene utilizzato per eseguire il comando Resolve-DnsName
per cercare i record A del DNS e popolare i valori di $tempObj
. Nel caso in cui la ricerca DNS non riesca, lo statement catch{}
cattura l’errore e l’errore verrà incluso nell’oggetto $tempObj
.
Alla fine di ogni iterazione, il valore dell’oggetto $tempObj
verrà aggiunto a $FinalResult
. E una volta elaborato l’ultimo elemento dell’array $NameList
, il ciclo uscirà. Quindi, verrà visualizzato il valore di $FinalResult
.
Copia il codice di seguito e incollalo alla fine del tuo script. Non è necessario modificare alcun valore.
Dopo aver salvato lo script, eseguilo in PowerShell chiamandolo con il suo nome GetDnsRecord.ps1. La dimostrazione seguente mostra l’output.

Come puoi vedere dal risultato sopra, l’output è un oggetto utile se desideri esportare i risultati in un file come CSV usando il comando seguente.
L’output CSV assomiglierebbe a quello qui sotto.

Conclusion
In questo articolo, hai imparato le basi su come utilizzare il cmdlet Resolve-DnsName
per eseguire la ricerca dei record DNS in PowerShell. Hai anche appreso come Resolve-DnsName
è diverso da altri strumenti come l’utilità nslookup.
Hai visto come Resolve-DnsName
può essere utilizzato in uno script per automatizzare la ricerca dei record DNS. Questo sarebbe utile come strumento di monitoraggio per assicurarti di essere a conoscenza dello stato attuale dei record DNS che gestisci.
Utilizzando le tue abilità di scripting di PowerShell, lo script di report può essere ulteriormente migliorato aggiungendo codice per inviare automaticamente il report via email ai destinatari specificati. Può anche essere modificato per creare un output HTML visivamente piacevole.
Alla fine, Resolve-DnsName
è uno strumento eccellente per la ricerca DNS, che tu lo utilizzi manualmente o per l’automazione negli script. Ora hai la conoscenza su come funziona, ed è a te trovare modi per utilizzarlo come parte dei tuoi compiti di amministrazione.
Ulteriori letture
- Google Public DNS
- Tornare alle basi: Comprendere gli oggetti PowerShell
- Export-Csv: Il modo di PowerShell per trattare i file CSV come cittadini di prima classe
- PowerTip: Usa PowerShell per ottenere le impostazioni DNS
- Costruzione di rapporti HTML in PowerShell con ConvertTo-Html
- Come creare un rapporto HTML con PowerShell