пятница, 19 мая 2017 г.

VBScript: скрипт для удалённого изменения настроек DNS и WINS на клиентских ОС Windows для текущего домена Active Directory

Скрипт пригодится для удалённого изменения на клиентских ОС Windows настроек TCP/IP, таких как DNS и WINS, в пределах текущего домена Active Directory. Выполнять лучше всего из командной строки с повышенными привилегиями, используя: "cscript имя_скрипта.vbs", получив таким образом удобный вывод информации о ходе работы алгоритма.
Во время выполнения скрипт делает следующее:
1. Получает список всех машин в текущем домене.
2. Последовательно подключается к ним и проверяет интерфейсы с включённым протоколом TCP/IP.
3. Если настройки DNS и WINS установлены, но не соответствуют адресам, заданным в переменных "strPrimaryServer" и "strSecondaryServer", то происходит изменение этих параметров.

Также запускающий скрипт пользователь обязательно должен обладать правами на подключение и настройку сетевых интерфейсов на всех удалённых ОС.

ON ERROR RESUME NEXT
 'Primary and Secondary DNS,WINS servers IPs
 strPrimaryServer = "192.168.0.11"
 strSecondaryServer = "192.168.0.12"
 '..........................................
 Const ADS_SCOPE_SUBTREE = 2
 arrDNSServers = Array(strPrimaryServer, strSecondaryServer)
 Set Info = CreateObject("AdSystemInfo")
 arrDomLevels = Split(Info.DomainDNSName, ".")
 strADsPath = "dc=" & Join(arrDomLevels, ",dc=")
 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, netbootGUID, distinguishedName from 'LDAP://" & strADsPath & "' " _
   & "Where objectClass='computer'"  
 objCommand.Properties("Page Size") = 1000
 objCommand.Properties("Searchscope") = ADS_SCOPE_SUBTREE 
 Set objRecordSet = objCommand.Execute
 objRecordSet.MoveFirst
 Do Until objRecordSet.EOF
  WScript.Echo objRecordSet.Fields("Name")
  strComputer = objRecordSet.Fields("Name")
  Set objWMIService = GetObject("winmgmts:" _
  & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
  Set colNetCards = objWMIService.ExecQuery _
  ("Select * From Win32_NetworkAdapterConfiguration Where IPEnabled = True and DHCPEnabled = False")
  For Each objNetCard In colNetCards
  If Not (UBound(Filter(objNetCard.DNSServerSearchOrder, strPrimaryServer)) > -1 And UBound(Filter(objNetCard.DNSServerSearchOrder, strSecondaryServer)) > -1) Then
  objNetCard.SetDNSServerSearchOrder(arrDNSServers)
  WScript.Echo "..........................Changed DNS!"
  End If
  If StrComp(objNetCard.WINSPrimaryServer, strPrimaryServer) Or StrComp(objNetCard.WINSSecondaryServer, strSecondaryServer) Then
  objNetCard.SetWINSServer strPrimaryServer, strSecondaryServer
  WScript.Echo ".........................Changed Wins!"
  End If
  Next
  objRecordSet.MoveNext
 Loop

Комментариев нет:

Отправить комментарий