Se você gerencia servidores web ou de e-mail, você sabe o quão dependente esses servidores são de registros DNS adequadamente configurados. A ausência de registros DNS pode causar diversos problemas, incluindo a incapacidade dos usuários de encontrar seu site ou a não entrega de e-mails. É algo positivo que o cmdlet Resolve-DnsName do PowerShell exista, e com ele, a monitoração de registros DNS pode ser automatizada por meio de scripts.
O dia de um administrador já é cheio o suficiente, e verificar manualmente se os registros DNS podem ser resolvidos adequadamente significa mais esforço manual.
Neste artigo, você aprenderá o que é e como usar o cmdlet Resolve-DnsName
para consultar registros DNS com o PowerShell. Até o final deste artigo, você também terá aprendido como criar um script básico para gerar um relatório dos seus registros DNS designados para monitoramento.
Pré-requisitos
Este artigo é um passo a passo, e se você planeja seguir com os exemplos, precisará de:
- A computer running Windows 10 or above.
- Windows PowerShell 5.1 ou PowerShell 7.0
- A script editor such as Visual Studio Code, Atom, or Notepad++.
Resolve-DnsName: O Resolvedor DNS do PowerShell
Há mais de uma maneira de realizar uma consulta DNS. O cmdlet Resolve-DnsName
é semelhante à ferramenta de linha de comando nslookup
que vem com o Windows, ou o dig
se você for mais um administrador Linux.
Alguns sites oferecem serviços de monitoramento/relatório de registros DNS. No entanto, esses serviços de terceiros geralmente têm um custo, é claro. Existe uma alternativa gratuita, que também permite mostrar suas habilidades de script!
O cmdlet Resolve-DnsName
, como o próprio nome sugere, resolve nomes DNS para endereços IP e vice-versa. Este cmdlet faz parte do módulo PowerShell dnsclient, que, até o momento desta escrita, é fornecido com o Windows 10, Windows Server 2012/R2, Windows Server 2016 e Windows Server 2019.
Por ser um cmdlet do PowerShell, o Resolve-DnsName
retorna seus resultados como objetos que podem ser armazenados, manipulados e exportados. Por exemplo, ao procurar o registro DNS do google.com usando o comando Resolve-DnsName google.com
, você obtém a saída mostrada abaixo.

O resultado foi retornado como um objeto que permite exportar os resultados para um arquivo CSV, ou manipular o formato para produzir relatórios HTML.
O cmdlet Resolve-DnsName
é diferente do utilitário antigo nslookup
. O nslookup
retorna uma simples string. Você pode ver um exemplo na captura de tela a seguir. Se você precisar analisar qualquer uma dessas informações, será um desafio.

Pesquisando Diferentes Tipos de Registros DNS
Por padrão, o comando Resolve-DnsName
faz consultas aos registros DNS dos tipos A e AAAA. Por exemplo, se você procurar o registro DNS para gmail.com
usando o comando abaixo:
Como pode ser visto abaixo, apenas os registros AAAA e A são retornados. Isso ocorre porque o tipo de registro DNS a ser procurado não foi especificado.

Agora, dado que todos sabemos que gmail.com é um domínio de e-mail usado pelo serviço de e-mail do Google, deve haver um registro MX associado a ele, certo? Bem, não há necessidade de assumir quando você pode confirmar usando este comando:
A saída mostrada na captura de tela abaixo exibe a lista de registros MX para gmail.com.

Para saber mais sobre os diferentes tipos de registros que podem ser usados com o comando
Resolve-DnsName
, visite este link e procure a tabela do parâmetro-Type
. Ou você pode simplesmente consultar a ajuda do Resolve-DnsName usando o comandoget-help Resolve-DnsName
.
Usando Servidores Específicos para Consulta DNS
`Resolve-DnsName` usa os endereços de servidores DNS configurados no seu computador por padrão. No entanto, você também pode fazer com que o `Resolve-DnsName` utilize um servidor DNS específico ao realizar consultas.
Por exemplo, se você deseja usar o Google Public DNS para consultar registros, você pode fazer isso adicionando o parâmetro `-Server` no seu comando, semelhante ao exemplo abaixo.
O resultado do comando acima seria semelhante ao mostrado na captura de tela abaixo.

Neste ponto, você pode estar perguntando, “por que eu precisaria usar um servidor DNS diferente?”. Essa é uma pergunta válida. Se você tentar consultar o mesmo registro usando o servidor DNS padrão da sua máquina, ou outro servidor DNS, você provavelmente obterá o mesmo resultado.
Podem haver muitas razões para usar diferentes servidores DNS com `Resolve-DnsName`. Algumas dessas razões podem incluir:
- Velocidade – Alguns servidores DNS podem ser mais rápidos do que outros.
- Segurança – Alguns servidores DNS podem ter mais medidas de segurança do que outros que previnem sequestros e ataques.
- Disponibilidade de Registros – Na maioria dos cenários, as organizações têm seus próprios servidores DNS internos que contêm as zonas e registros para nomes que são resolvidos apenas internamente. Nesse caso, pesquisar um nome interno usando um servidor DNS público falhará.

- Os servidores DNS não estão encaminhando solicitações – Algumas organizações não permitem encaminhamento de DNS. Usá-los para pesquisa DNS de registros DNS públicos falhará.
- Resolução de Problemas e Testes – Quando seus servidores DNS favoritos não estiverem funcionando corretamente, você pode querer testar suas pesquisas usando um servidor DNS diferente.
Relatando Registros DNS usando um Script PowerShell
Agora que você aprendeu o básico de como usar o cmdlet Resolve-DnsName
, nesta seção, você aprenderá a criar um script PowerShell para monitorar e relatar registros DNS. Você deve ser capaz de aplicar o conhecimento que adquiriu nas seções anteriores até agora na construção deste script.
Inicie seu editor de script de escolha e crie um novo arquivo chamado GetDnsRecord.ps1.
Definindo as Variáveis
Primeiro, determine as variáveis a serem usadas. Essas variáveis incluirão o seguinte:
$NameList
– Esta variável conterá os nomes dos registros DNS que você deseja que seu script consulte$Serverlist
– Use esta variável para indicar os servidores DNS que serão usados pelo script para pesquisas.
Copie o código abaixo e cole-o no início do seu script.
Realizando Pesquisas DNS
Em seguida, o código deve ser capaz de buscar o registro DNS de cada um dos nomes especificados. Neste caso, o loop foreach será usado para iterar na lista de registros e buscar cada nome usando Resolve-DnsName
.
A linha $FinalResult = @()
cria um array vazio onde o resultado final será armazenado. Então, usando o loop foreach, o PowerShell passa cada item na variável $NameList
para uma variável chamada $Name
.
Em cada iteração, a linha $tempObj = "" | Select-Object Name,IPAddress,Status,ErrorMessage
cria um objeto temporário com quatro propriedades para armazenar o resultado da consulta DNS bem-sucedida.
Em seguida, a instrução try{}
é usada para executar o comando Resolve-DnsName
para buscar os registros DNS A e popular os valores de $tempObj
. Caso a consulta DNS falhe, a instrução catch{}
captura o erro, e o erro será incluído no objeto $tempObj
.
Ao final de cada iteração, o valor do objeto $tempObj
será anexado ao $FinalResult
. E assim que o último item na matriz $NameList
for processado, o loop sairá. Então, o valor do $FinalResult
será exibido.
Copie o código abaixo e cole-o no final do seu script. Não é necessário alterar nenhum valor.
Após salvar o script, execute-o no PowerShell chamando-o pelo nome GetDnsRecord.ps1. A demonstração abaixo mostra a saída.

Como você pode ver no resultado acima, a saída é um objeto que é útil se você quiser exportar os resultados para um arquivo como CSV usando o comando abaixo.
A saída CSV ficaria semelhante à mostrada abaixo.

Conclusão
Neste artigo, você aprendeu o básico sobre como usar o cmdlet Resolve-DnsName
para realizar a consulta de registros DNS no PowerShell. Você também aprendeu como o Resolve-DnsName
é diferente de outras ferramentas como o utilitário nslookup.
Você viu como o Resolve-DnsName
pode ser usado em um script para automatizar a consulta de registros DNS. Isso seria útil como uma ferramenta de monitoramento para garantir que você esteja ciente do status atual dos registros DNS que você administra.
Usando suas habilidades de script do PowerShell, o script de relatório pode ser aprimorado ainda mais adicionando código para automaticamente enviar o relatório por e-mail para destinatários especificados. Também pode ser modificado para criar uma saída HTML visualmente agradável.
No final, o Resolve-DnsName
é uma excelente ferramenta para consulta de DNS, quer você a utilize manualmente ou para automação em scripts. Agora você tem o conhecimento sobre como ele funciona, e cabe a você encontrar maneiras de usá-lo como parte de suas tarefas administrativas.
Leitura adicional
- Google Public DNS
- De Volta ao Básico: Entendendo Objetos do PowerShell
- Export-Csv: A Forma PowerShell de Tratar Arquivos CSV como Cidadãos de Primeira Classe
- PowerTip: Use o PowerShell para Obter Configurações de DNS
- Construindo Relatórios HTML no PowerShell com ConvertTo-Html
- Como Criar um Relatório HTML Com PowerShell