29 Mayıs 2013 Çarşamba

CHANGE DNS ADDRESS WITH POWERSHELL (Powershell kullanarak clientlerin dns adreslerini değiştirmek)

Bazen dns hizmeti veren sunucular çeşitli sebeplerle değiştirilir kimi zaman taşınır kimi zaman sunucu çöker.Bu sebeple yeni dns sunucular kurulur.Kurulmasınından sonra ilk iş clientlerin bu dnsleri kullanmalarıdır.
Ortamımızda dhcp sunucusu varsa bu yapacağımız dhcp konsolundan yapılabilir.Fakat Ortamda dhcp sunucusu yoksa yani sabit ip ile çalışıyorsa bu iş tam bir çile olabilir.Bu işlemi 2 komut ile halledebiliriz.
ilk komut ile Active Directory üzerinde bilgisayarları bilgisayarlar.txt adında bir dosyaya çıkartıyoruz.
ikinci komut ise bu bilgisayarlara arka planda bağlanıp değiştiriyor.

 Komut çalıştırmadan önce değiştireceğimiz bilgisayarın ip ayarlarını gösterelim.Daha sonra aşağıdaki işlemleri yapacağız.

Önce Active Directory üzerinde dns değişikliği yapacağımız yapısal birimdeki bilgisayarları çekelim bu komutları bilgisayarlar.ps1 uzantılı olarak kaydediyoruz.komutları şu şekilde;
$cokeski=(Get-Date).AddDays(0)
Get-ADComputer -Filter * -searchBase "OU=BILGISAYARLAR,OU=DENEME,OU=DEPARTMANLAR,DC=mustafa,DC=local" -Properties pwdlastset,IPv4Address|ForEach-Object{
 $adi=$_.Name
 $ip=$_.IPv4Address
 $DN=$_.DistinguishedName
 $sifre=$_.pwdlastset
 $sifre=[DateTime]$sifre
 $sifre=$sifre.AddYears(1600)
 if($sifre -le $cokeski)
 {
 Get-AdComputer -Identity $adi | Select -Expand Name  >> bilgisayarlar.txt
 }
 else
 {
 # Write-Host "YENI"
 }
}
bu komutu çalıştırınca bilgisayarlar.txt adında bir klasör oluşturuyor.

Bu klasörü açınca yapısal birimde olan bilgisayarlar çıkıyor.
 Şimdi bu klasörü C sürücüsünün içine kopyalıyoruz çünkü dns değişikliği yapacak kod da bilgisayarları çekecek dosyayı C sürücüsünün içinde göstermiştik.

Daha sonra dns.ps1 adında powershell dosyasını çalıştırıyoruz. Ve bize değiştirdiğine dair aşağıda bir satır yazı yazıyor.Ve başarılı ise başarılı değilse başarısız şeklinde ekrana uyarı yazısı yazıyor.
Dns.ps1 powershellinin kodları:

$servers = Get-Content C:\bilgisayarlar.txt

 foreach($server in $servers)

 {

     Write-Host "Connect to $server..."

     $nics = Get-WmiObject Win32_NetworkAdapterConfiguration -ComputerName $server -ErrorAction Inquire | Where{$_.IPEnabled -eq "TRUE"}

     $newDNS = "38.0.0.1","38.0.0.2"

     foreach($nic in $nics)

     {

         Write-Host "`tExisting DNS Servers " $nic.DNSServerSearchOrder

         $x = $nic.SetDNSServerSearchOrder($newDNS)

         if($x.ReturnValue -eq 0)

         {

             Write-Host "`tSuccessfully Changed DNS Servers on " $server

         }

         else

         {

             Write-Host "`tFailed to Change DNS Servers on " $server

         }

     }

 }

 Başarılı şeklinde uyarı aldıktan sonra sunucumuzdan psexec.exe adlı microsoftun toolunu kullanarak o bilgisayarın ip adresine bakarıız.
 Bu tool çalıştıktan sonra dns adreslerine bakıyoruz ve planladığımız ipler dns sunucusu olarak gözükmektedir.

 İstersek bilgisayara bağlanıp kontrol de edebiliriz.
umarım yararlı olur.