Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » VBS/WSH/JS - [решено] Скрипт не вводит ПК в домен

Ответить
Настройки темы
VBS/WSH/JS - [решено] Скрипт не вводит ПК в домен

Новый участник


Сообщения: 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

Отправлено: 18:55, 18-08-2009

 

Новый участник


Сообщения: 1
Благодарности: 0

Профиль | Отправить PM | Цитировать


Castor, нужна ваша помощь... вы ещё в теме?

Отправлено: 17:59, 20-11-2011 | #11



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » VBS/WSH/JS - [решено] Скрипт не вводит ПК в домен

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Intel вводит ''звездный'' рейтинг для своих процессоров OSZone News Новости железа 7 12-05-2009 18:24
Microsoft вводит поддержку Open Document Format в MS Office OSZone News Новости и события Microsoft 10 22-12-2008 16:33
Разное - Avast вводит в заблуждения. Показывает чего-то не то. verdix Microsoft Windows Vista 7 08-07-2008 14:46
[решено] Скрипт справочника Artem-Samsung Вебмастеру 2 19-06-2008 17:14
[решено] ява скрипт jokeroto Вебмастеру 6 16-01-2008 19:45




 
Переход