Новый участник
Сообщения: 15
Благодарности: 0
|
Профиль
|
Отправить PM
| Цитировать
Имеется следующий скрипт, который благополучно отрабатывает, под администратором на удаленном Пк, успешно выводит запись в лог, но компьютеры в домен не попадают. Подскажите в чем проблема?
Код: 
'Cкрипт для подключения к домену компьютеров. (VBScript)
'///////////////////////////////////////////////////////////////////////////////////////////////////////
' AutoJoin.vbs
' Этот скрипт подключает к домену компьютеры рабочей группы из списка
' computers.txt добавляя их в определенный организационный юнит Active
' Directory, используя удаленное подключение к WMI под учетными данными
' локального администратора этих рабочих станций, а также вносит
' изменения в реестре для смены дефолтного имени домена при входе в
' систему, меняет DNS, SID с последующей перезагрузкой.
' Заранее создаем ОГП , ниже вводим имя домена и ОГП, также адрес DNS
' сервера
' программу newsid - от Sysinternals в System32
' и программу moveuser из WinResKit для W2k3
'
'//////////////////////////////////////////////////////////////////////////////////////////////////////
'меняем нижеприведенные данные на свои
'локального админа на ПК в группе
'и данные учетки пользователя с правами админа домена
strLocalUser = "Administrator"
strLocalPasswd = "password"
strDomain = "local.loc"
strDomainUser = "Administrator@local.loc"
strDomainPasswd = "password_adm_domena"
Const JOIN_DOMAIN = 1
Const ACCT_CREATE = 2
Const ACCT_DELETE = 4
Const WIN9X_UPGRADE = 16
Const DOMAIN_JOIN_IF_JOINED = 32
Const JOIN_UNSECURE = 64
Const MACHINE_PASSWORD_PASSED = 128
Const DEFERRED_SPN_SET = 256
Const INSTALL_INVOCATION = 262144
' здесь вводим созданный ОГП для нового ПК и имя домена
Const strOU = "ou=Manage, dc=local, dc=loc"
Const HKEY_LOCAL_MACHINE = &H80000002
Const HKEY_CURRENT_USER = &H80000001
Dim objFile, objIE, objFiles, objFSO, ForAppending, objExcel, objWorkbook, objClass, objServices
ForAppending = 8
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objTS = objFSO.OpenTextFile("computers.txt")
Set objFile = objFSO.OpenTextFile("log.txt", ForAppending, False)
Do Until objTS.AtEndOfStream
On error resume next
strComputer = objTS.ReadLine
WScript.Echo "_" & Now & "___________________________________________________________" & vbCrLf
WScript.Echo "Рабочая станция " & strComputer & " подключается к домену " & strDomain & vbCrLf
'///////////////////////////////////////
'Проверка админского пароля
'///////////////////////////////////////
Set objSWbemLocator = CreateObject("WbemScripting.SWbemLocator")
ReturnValue = objSWbemLocator.ConnectServer(strComputer, _
"root\cimv2", _
strLocalUser, _
strLocalPasswd)
if ReturnValue = 0 then
WScript.Echo " - выбран основной админский пароль"
Else
strLocalPasswd = "dop_passw"
WScript.Echo " - выбран дополнительный админский пароль"
End If
'///////////////////////////////////////////////
'Копирование необходимых файлов
'///////////////////////////////////////////////
WScript.Echo " - подготовка файлов для выполнения операций"
Set objSWbemLocator = CreateObject("WbemScripting.SWbemLocator")
Set objSWbemServices = objSWbemLocator.ConnectServer(strComputer, _
"root\cimv2", _
strLocalUser, _
strLocalPasswd)
Set colFolders = objSWbemServices.ExecQuery("SELECT * FROM Win32_Directory WHERE Name = 'С:\Utils'")
For Each objFolder In colFolders
objFolder.Copy "C:\Temp\"
Next
'/////////////////
'Смена SID'a
'/////////////////
Dim strSid
Set objSWbemLocator = CreateObject("WbemScripting.SWbemLocator")
objSWbemLocator.Security_.Privileges.AddAsString("SeSecurityPrivilege")
Set objWMIService = objSWbemLocator.ConnectServer(strComputer, _
"root\cimv2", _
strLocalUser, _
strLocalPasswd, _
"", _
"", _
&H80)
Set objReg = objSWbemLocator.ConnectServer(strComputer, _
"root\default", _
strLocalUser, _
strLocalPasswd, _
"", _
"", _
&H80)
Set oReg = objReg.Get("StdRegProv")
strKeyPath = "SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnceEx"
oReg.CreateKey HKEY_LOCAL_MACHINE,strKeyPath
strKeyPath = "SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnceEx"
strValueName = "SidChange"
strValue = "newsid.bat"
oReg.SetStringValue HKEY_LOCAL_MACHINE,strKeyPath,strValueName,strValue
objReg.GetStringValue HKEY_LOCAL_MACHINE, "SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnceEx", "SidChange", strSid
WScript.Echo " - SID будет изменен при следующей перезагрузке "
Set objSWbemLocator = CreateObject("WbemScripting.SWbemLocator")
Set objServices = objSWbemLocator.ConnectServer(strComputer, _
"root\cimv2", _
strLocalUser, _
strLocalPasswd)
Set objClass = objServices.Get("Win32_Process")
WScript.Echo " - присваиваем компьютеру новый SID"
strRun = "newsid.exe /a"
Res = objClass.Create(strRun, Null, Null, PID)
WScript.Sleep 10000
If Res <> 0 Then
WScript.Echo " - смена SID завершена с ошибкой: " & Res
Else
WScript.Echo " - смена SID успешно завершена с процессом: " & PID
End If
'/////////////////
'Смена DNS
'/////////////////
Dim objNetCard
Dim colNetCards
Set objSWbemLocator = CreateObject("WbemScripting.SWbemLocator")
Set objSWbemServices = objSWbemLocator.ConnectServer(strComputer, _
"root\cimv2", _
strLocalUser, _
strLocalPasswd)
Set colNetCards = objSWbemServices.ExecQuery("Select * From Win32_NetworkAdapterConfiguration Where IPEnabled = True")
For Each objNetCard in colNetCards
strDNSServer = Array("192.168.0.10")
objNetCard.SetDNSServerSearchOrder(strDNSServer)
Next
WScript.Echo " - корректировка DNS завершена"
'//////////////////////////////////////////////////
'Принудительное завершение сеанса
'//////////////////////////////////////////////////
WScript.Echo " - принудительное завершение сеанса"
Set objSWbemLocator = CreateObject("WbemScripting.SWbemLocator")
Set objSWbemServices = objSWbemLocator.ConnectServer(strComputer, _
"root\cimv2", _
strLocalUser, _
strLocalPasswd)
Set colSwbemObjectSet = _
objSWbemServices.ExecQuery("Select * from Win32_OperatingSystem")
For Each objOS in colSWbemObjectSet
ObjOS.Win32Shutdown(4)
Next
WScript.Sleep 30000
'///////////////////////////////////////////////////////////
'Подключение к рабочей станции через WMI
'///////////////////////////////////////////////////////////
Set objWMILocator = CreateObject("WbemScripting.SWbemLocator")
objWMILocator.Security_.AuthenticationLevel = 6
Set objWMIComputer = objWMILocator.ConnectServer(strComputer, _
"root\cimv2", _
strLocalUser, _
strLocalPasswd)
Set objWMIComputerSystem = objWMIComputer.Get( _
"Win32_ComputerSystem.Name='" & _
strComputer & "'")
'//////////////////////////////////////////
'Ввод рабочей станции в домен
'//////////////////////////////////////////
WScript.Echo " - ввод рабочей станции в домен"
ReturnValue = objWMIComputerSystem.JoinDomainOrWorkGroup(strDomain, _
strDomainPasswd, _
strDomainUser, _
strOU, _
JOIN_DOMAIN + ACCT_CREATE)
'/////////////////////////////////////////
'Вывод отчетов и логирование
'/////////////////////////////////////////
If ReturnValue = 5 then
objFile.Write " [" & Now & "] " & strComputer & " | Ошибка: Отсутствует доступ на добавление компьютера в домен" & vbCrLf
WScript.Echo " - отсутствует доступ на добавление компьютера в домен"
End If
If ReturnValue = 2224 then
objFile.Write " [" & Now & "] " & strComputer & " | Ошибка: Компьютер уже находится в домене" & vbCrLf
WScript.Echo " - компьютер уже находится в домене"
End If
if ReturnValue > 2691 then
objFile.Write " [" & Now & "] " & strComputer & " | Компьютер успешно добавлен в домен" & vbCrLf
WScript.Echo " - компьютер успешно добавлен в домен"
Else
objFile.Write " [" & Now & "] " & strComputer & " | Компьютер успешно добавлен в домен" & vbCrLf
WScript.Echo " - компьютер успешно добавлен в домен"
End if
'//////////////////////////////////////////////////////////////////////////////
'Изменение дефолтного имени домена при входе в систему
'//////////////////////////////////////////////////////////////////////////////
WScript.Echo " - изменение дефолтного имени домена при входе в систему"
WScript.Sleep 5000
Set objSWbemLocator = CreateObject("WbemScripting.SWbemLocator")
objSWbemLocator.Security_.Privileges.AddAsString("SeSecurityPrivilege")
Set objWMIService = objSWbemLocator.ConnectServer(strComputer, _
"root\cimv2", _
strLocalUser, _
strLocalPasswd, _
"", _
"", _
&H80)
Set objReg = objSWbemLocator.ConnectServer(strComputer, _
"root\default", _
strLocalUser, _
strLocalPasswd, _
"", _
"", _
&H80)
Set oReg = objReg.Get("StdRegProv")
strKeyPath = "SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon"
oReg.SetStringValue HKEY_LOCAL_MACHINE, strKeyPath, _
"DefaultDomainName",strDomain
strKeyPath = "SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon"
oReg.SetStringValue HKEY_LOCAL_MACHINE, strKeyPath, _
"AltDefaultDomainName",strDomain
strKeyPath = "SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon"
oReg.SetStringValue HKEY_LOCAL_MACHINE, strKeyPath, _
"CachePrimaryDomain",strDomain
'//////////////////////////////////////////////////
'Перемещение профиля пользователя
'//////////////////////////////////////////////////
Set objSWbemLocator = CreateObject("WbemScripting.SWbemLocator")
objSWbemLocator.Security_.Privileges.AddAsString("SeSecurityPrivilege")
Set objWMIService = objSWbemLocator.ConnectServer(strComputer, _
"root\cimv2", _
strLocalUser, _
strLocalPasswd, _
"", _
"", _
&H80)
Set objReg = objSWbemLocator.ConnectServer(strComputer, _
"root\default", _
strLocalUser, _
strLocalPasswd, _
"", _
"", _
&H80)
Set oReg = objReg.Get("StdRegProv")
strKeyPath = "SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon"
oReg.GetStringValue HKEY_LOCAL_MACHINE, strKeyPath, _
"DefaultUserName",strUser
'On Error Resume Next
Set objSWbemLocator = CreateObject("WbemScripting.SWbemLocator")
Set objServices = objSWbemLocator.ConnectServer(strComputer, _
"root\cimv2", _
strLocalUser, _
strLocalPasswd)
Set objClass = objServices.Get("Win32_Process")
WScript.Echo " - запуск перемещения локального профиля пользователя " & strUser & " в домен " & strDomain
WScript.Sleep 10000
MoveUser = "moveuser.exe " & strUser & " " & strDomain & "\" & strUser & " /y /k 1>c:\logmu.txt 2>c:\errmu.txt"
strRun = "cmd.exe /c " & chr(34) & "" & MoveUser & "" & chr(34) &""
Res = objClass.Create(strRun, Null, Null, PID)
If Res <> 0 Then
WScript.Echo " - перемещение профиля пользователя завершено с ошибкой: " & Res
Else
WScript.Echo " - перемещение завершено"
End If
WScript.Sleep 20000
'/////////////////////////////////////////////
'Перезагрузка удаленной машины
'/////////////////////////////////////////////
WScript.Echo " - перезагрузка рабочей станции"
Set objSWbemLocator = CreateObject("WbemScripting.SWbemLocator")
Set objSWbemServices = objSWbemLocator.ConnectServer(strComputer, _
"root\cimv2", _
strLocalUser, _
strLocalPasswd)
Set colSwbemObjectSet = _
objSWbemServices.ExecQuery("Select * from Win32_OperatingSystem")
For Each objOS in colSWbemObjectSet
ObjOS.Win32Shutdown(2)
Next
WScript.Echo " - операции AutoJoin с " & strComputer & " завершены." & vbCrLf
Loop
objFile.Close
objTS.Close
|