úterý 16. října 2012

Změna DNS serveru


Hromadná změna DNS serveru pomocí powershellu:
Parametry pro sítový adaptér jsou v drtivé většině případů získávány automaticky.Jenže není tomu tak vždy.Což je i můj případ,je tu spousta serverů a dalších podpůrných PC(stanic) které mají  jak IP tak DNS servery nastaveny natvrdo.A protože přecházíme na nový DNS server...

Máme tu další důvod ke psaní powershell skriptu.Na druhou stranu proč psát další skript když jich na internetu koluje více než dost.Ale vždy je tu nějaké ALE.Například u mne byl problém s notebooky,kdy jejich integrovaný modem znamená další síťový adaptér.Dále pak OpenVPN jenž si vytváří svůj virtuální adaptér.Nemůžu měnit DNS i na těchto adaptérech.Musím vybrat jen ty kterých se to týká.
Ať už adaptér dostane IP od DHCP nebo jí má natvrdo vždy jsou ve stejném rozsahu,jasně jsou i výjimky ale vycházíme z toho že hledáme ve stejném rozsahu IP(typicky   doména) a to je podstata mého filtru který pro změnu DNS serveru vybírá jen ty adaptéry které odpovídají danému rozsahu.
Skript je myšlen pro hromadnou změnu tedy klidně stovky stanic,takže data (názvy stanic) si načítá z obyčejného txt souboru který umístíme na disk C.Txt soubor má tuto podobu:co řádek to název jedné stanice bez prázdných řádků a znaků.Soubor se musi jmenovat seznampc.txt
Výsledek se zapisuje do log souboru který je vytvořen na disku C.Zde si můžeme ověřit zda vše dopadlo tak jak mělo. 
Sekundarní DNS server co tu uvádím(8.8.8.8) patří Google a dle jejich vyjádření bude fungovat vždy až na věčné časy....a nikdy jinak.

################################  Vytvoril:Petr Skrivan #################################### 


#budeme menit DNS na vice stanicich takze promenna ktera bude obsahovat jmena PC musi byt
#..typu pole,takzetakto si zinicializujeme promennou typu pole
$pc = @()
#do promenne si nacteme seznam stanic z textoveho souboru ktery mame ulozen na c:
$pc = cat "c:\seznampc.txt"
#do promenne si nacteme dve hodnoty(primarni a sekundarni DNS)
$newdns = "192.168.100.249" , "8.8.8.8"
#zalozime si textovy soubor do ktereho budeme zapisovat podrobny log udalosti.Jako prvni
#...zapiseme aktualni datum a cas kdy byl log vytvoren znamenko > rika ze zakladame novy
#...soubor.Pokud uz existoval bude prepsan timto novym takze vzdy budeme mit aktualni log
Get-Date > "C:\dnsLog.txt"
#postupne si vyzvedneme vzdy jednu stanici a te priradime promenou $stroj tu pak prozeneme
#...skriptem v zavorkach(cyklus foreach)
foreach($stroj in $pc)
#zacatek hlavniho skriptu vse co je mezi touto zavorkou a zavorkou dole probehne tolikrat
#...kolik jsme zaslali PC do kolecka (vzdy jedno kolo pro jeden stroj)
{
#do promenne $connect si ulozime test spojeni na testovane pc(muze byt true nebo false)
#..true=spojeni uspesne false..spojeni neuspesne
$conect = Test-Path \\$stroj\c$
#otestujeme zda je PC nebo server dostupny
if ($conect -eq "True")
#pokud je spojeni uspesne zapiseme tuto skutecnost do logu
{"$stroj je dostupny" >> "C:\dnsLog.txt"
#promenne $dns priradime udaje o sitovem adapteru konkretniho pc
#...(tedy pc ktere momentalne proudi v roure)
$dns = Get-WmiObject win32_networkadapterconfiguration -computername $stroj
#...vybereme jen ty adaptery ktere maji konkretni IP tedy jsou v domenovem rozsahu
$dnslive = $dns | where-object {$_.ipaddress -like "192.168.100.*" }
#provedeme zmenu DNS serveru na server definovany na zacatku skriptu
$dnslive.setDNSServerSearchOrder($newdns)
#do promenne si nacteme aktualni info o parametrech sitoveho pripojeni a
#...to jen pripojeni ktere ma konkretni IP tedy rozsah domeny
$dnspote = Get-WmiObject win32_networkadapterconfiguration -computername $stroj |
where-object {$_.ipaddress -like "192.168.100.*" }
#promenne $jakedns priradime momentalni hodnotu DNS
$jakedns = $dnspote.DNSServerSearchOrder
#pokud se DNS shoduje se vzorem prvni hodnota je 192.168.100.249 a zaroven
#...druha hodnota je 8.8.8.8 pak je splnena podminka a provede se vse v zavorkach
if (($jakedns -match "192.168.100.249") -and ($jakedns -match "8.8.8.8"))
#podminka vyse byla splnena...zmena probehla v poradku..zapis uspech do logu
{ "Zmena dns na $stroj probehla v poradku ......" >> "C:\dnsLog.txt"}
#zapis se nezdaril..zapis neuspech do logu
else {"POZOR   ...  zmena dns na $stroj selhala ......" >> "C:\dnsLog.txt"}
#prazdne radky do logu(ciste jen graficka uprava vystupu)
" " >> "C:\dnsLog.txt"
" " >> "C:\dnsLog.txt"
#uzaviraci zavorka podminky(zda je dostupny server nebo PC)
}
#podminka dostupnosti PC nebo serveru nebyla splnena provede se ELSE
#..pokud spojeni selhalo zapiseme informaci do logu
else {"nepodarilo se pripojit k $stroj" >> "C:\dnsLog.txt"}
#uzavirajici zavorka bloku foreach
}

Žádné komentáře:

Okomentovat