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

стырено с isazonov.net, помогло при смене основного контроллера домена и переноса ролей на новый сервер

Может возникнуть ситуация, когда в вашем домене изменился 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

stock-photo-pixelated-acronym-dns-made-from-cubes-mosaic-pattern-216078151[1]
programming-1873854_960_720[1]

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

Ваш e-mail не будет опубликован. Обязательные поля помечены *