Getting DNS resolvers via WMI & Powershell
Pentru multe task-uri aleg de multe ori WMI fie via Powershell fie altceva, mai ales pentru compatibilitate cu versiunile mai vechi de Windows. Pentru ultimele versiuni exista cmdlet-uri builtin dar o sa spun cate ceva despre ele mai tarziu.
Task-ul pe care vreau sa-l execut astazi este de a extrage lista de DNS Resolvers de pe un client. Clientul poate fi local sau remote, dar o sa folosim unul remote pentru a merge pe un exemplu mai util. Pentru asta folosim comanda
GWMI –class win32_networkadapterconfiguration –computer “computername” –filter “ipenabled = $true”
Obiectul rezultat va contine multe din setarile IP ale sistemului dar noi vrem doar setarile specifice DNS.
Pentru asta vom stoca rezultatul comenzii intr-o variabila si vom enumera proprietatea DNSSERVERSEARCHORDER. Mai jos vedeti un exemplu in care accesem aceasta proprietate, inclusiv elementele individuale din array.
In exemplul de mai sus puteti vedea cum aflam dimensiunea array-ului folosind proprietatea COUNT.
In Powershell 4 exista si cmdlet-uri specifice pentru DNS iar unul dintre ele este Get-DnsClientServerAddress. Il putem folosi cu parametrul –cimsession pentru a ne conecta la un server remote via WMI:
Get-DnsClientServerAddress –CimSession “computername”
Output-ul este mult prea bogat in informatii asa ca va trebui sa mai restrangem din rezultate. Prima data o sa filtram doar dupa interfetele cu IPv4 iar asta se face filtrand dupa AddressFamily. Atentie ca valoarea dupa care trebuie sa filtrati este 2 nu IPv4 (http://msdn.microsoft.com/en-us/library/hh872425(v=vs.85).aspx)
Get-DnsClientServerAddress -CimSession srv2 | where-object {$_.AddressFamily -eq 2}.
Si ca sa restrangem si mai mult rezultatele o sa eliminam obiectele ce au aceste valori null.
Pingback from Set DNS resolvers via Powershell & WMI » RO Windows Administrators Weblog
Time September 26, 2014 at 4:09 pm
[…] Getting DNS resolvers via WMI & Powershell […]