1. Skip to Menu
  2. Skip to Content
  3. Skip to Footer

Изменить список DNS серверов (скрипт)

Может возникнуть ситуация, когда в вашем домене изменился IP-адрес DNS сервера. В этом случае необходимо "пройтись" по всем серверам и руками поменять перечень DNS-серверов в настройках сетевых подключений. А теперь представим, что в вашей сети 50 или и того более серверов! Вам придет на помощь vbs-скрипт, который вы сможете запустить на любом компьютере домена из под учетной записи с правами доменного администратора. Данный скрипт выведет результаты своей работы в текстовый файл.

Кроме того, в скрипте я реализовал возможность "перекрестного" указания DNS-серверов: если в вашем домене два DNS-сервера, то их порядок будет менятся в настройках сетевого подключения каждого четного сервера. Например, в вашей инфрастуктуре имеется 4 сервера. Таким образом, четные сервера 2 и 4 получат одну последовательность DNS-серверов, а нечетные 1 и 3 - другую. Это позволит вам равномерно распределить обращения ваших серверов Windows к DNS-севрерам домена.

Данный скрипт не обрабатывает "виртуальные" сервера Failover кластеров, а так же домен-контроллеры.

Отредактируйте в скрипте выделенные красным шрифтом значения и смело пользуйтесь!

Const ADS_SCOPE_SUBTREE = 3
arrNewDNSServerSearchOrder = Array("192.168.0.2","192.168.0.3")
arrNewDNSServerSearchOrder2 = Array("192.168.0.3","192.168.0.2")
Dim c, r, n, i
Set FSO = CreateObject("Scripting.FileSystemObject")
Set TF = FSO.CreateTextFile("C:\log.txt", True)
EnumComputers
SUB EnumComputers
Dim UserPCs(10000,1)
    on error resume next
    strDomain = "domain.local"
    Set objConnection = CreateObject("ADODB.Connection")
    Set objCommand =   CreateObject("ADODB.Command")
    objConnection.Provider = "ADsDSOObject"
    objConnection.Open "Active Directory Provider"
    Set objCOmmand.ActiveConnection = objConnection
    objCommand.CommandText = "SELECT Name, Location, whenChanged, operatingSystem, primaryGroupID FROM 'LDAP://" & strDomain & "' WHERE operatingSystem='Windows*Server*' and primaryGroupID<>'516'"
    objCommand.Properties("Page Size") = 1000
    objCommand.Properties("Searchscope") = ADS_SCOPE_SUBTREE
    Set objRecordSet = objCommand.Execute
    objRecordSet.MoveFirst
    i=1
    Do Until objRecordSet.EOF
        strComputer = objRecordSet.Fields("Name").Value
        UserPCs(i,0)=strComputer&".domain.local"
        UserPCs(i,1)=objRecordSet.Fields("operatingSystem").Value
        serverName = objRecordSet.Fields("Name").Value
        QueryDNS serverName      
        TF.Write (UserPCs(i,0))
        TF.Write " | "
                      TF.Write "старые DNS-сервера: "& r & " "
                      TF.Write " | "
                      TF.Write "результат: " & c & " "
                      TF.Write " | "
        TF.Write (UserPCs(i,1))
        TF.Write vbCrLf
        i=i+1
        objRecordSet.MoveNext
    Loop
END SUB
SUB QueryDNS(strServerName)
    on error resume next
    Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strServerName & "\root\cimv2")
    Set colNICConfigs = objWMIService.ExecQuery("SELECT DNSServerSearchOrder, Description FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled = True AND DHCPEnabled = false")
    for each objNICConfig in colNICConfigs
        OldDNSConfiguration = Join(objNICConfig.DNSServerSearchOrder, ",")
        if LEN(OldDNSConfiguration)>1 THEN
            r = OldDNSConfiguration
             intResult = i Mod 2
            If intResult = 0 then objNICConfig.SetDNSServerSearchOrder(arrNewDNSServerSearchOrder) 
            If intResult = 1 then objNICConfig.SetDNSServerSearchOrder(arrNewDNSServerSearchOrder2)          
             select Case Err.Number
              case 0
               c = 0
              case Else
               c = 1
             end select
        end if
    next
END SUB
 

Добавить комментарий