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

Компьютерный форум 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

 

Googler


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

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


Castor, для начала закомментируй/удали строчку "On error resume next" и проверь на предмет возникающих в процессе работы скрипта ошибок

Отправлено: 11:30, 19-08-2009 | #2



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

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


Аватара для verna

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


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

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


1. закоментируйте игнорирование ошибок On error resume next и посмотрите что получится.

2. разбейте скрипт на части. для начала на "до перезагрузки" и "после". проверяйте, что бы все работало в первой части, потом добавьте вторую. короче говоря, локализируйте проблему

-------
ООО "ВЕРНА" - ИТ решения для малого и среднего бизнеса
http://verna.com.ua/spec/IT-infrastr..._optimization/


Отправлено: 12:40, 19-08-2009 | #3


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


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

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


Появилась первая ошибка
C:\scripts\vvod_v_domen.vbs(63, 1) SWbemLocator: Отказано в доступе.

Ругается на строку -

ReturnValue = objSWbemLocator.ConnectServer(strComputer, _
"root\cimv2", _
strLocalUser, _
strLocalPasswd)

Хотя попасть на ПК из группы, которую нужно ввести в домен можно, из командной строки тоже.

Отправлено: 13:17, 19-08-2009 | #4


Аватара для verna

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


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

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


у вас в скрипте не одна такая строка


strLocalUser
strLocalPasswd

содержат правильные данные? юзера с правами локального админа на удаленной машине ?

если речь о "Проверка админского пароля" попробуйте вообще закоментить этот блок.

-------
ООО "ВЕРНА" - ИТ решения для малого и среднего бизнеса
http://verna.com.ua/spec/IT-infrastr..._optimization/


Отправлено: 14:26, 19-08-2009 | #5


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


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

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


Цитата verna:
содержат правильные данные? юзера с правами локального админа на удаленной машине ? »
Все данные вводятся правильно.

Цитата verna:
если речь о "Проверка админского пароля" попробуйте вообще закоментить этот блок. »
Пробовал - выдает ошибки в следующем блоке и так до конца скрипта.

Отправлено: 17:15, 19-08-2009 | #6


Аватара для verna

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


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

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


а вам обязательно удаленно компы в домен вводить?

-------
ООО "ВЕРНА" - ИТ решения для малого и среднего бизнеса
http://verna.com.ua/spec/IT-infrastr..._optimization/


Отправлено: 18:11, 19-08-2009 | #7


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


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

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


Цитата verna:
а вам обязательно удаленно компы в домен вводить? »

Ожидается 15 новых ПК с предустановленной системой для филиала. Желательно скриптить, иначе командировка.

Отправлено: 18:35, 19-08-2009 | #8


Аватара для verna

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


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

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


Цитата verna:
а вам обязательно удаленно компы в домен вводить? »
тут дело в том, что есть 100% работающие скрипты для воода в домен с локальным запуском.
(например http://gallery.technet.microsoft.com...a-16d8339b60f1)

дабл клик может сделать любой сотрудник филиала.

а про objSWbemLocator.ConnectServer я почитал. много ругаются на эту же ошибку и ни одного решения конкретного.

-------
ООО "ВЕРНА" - ИТ решения для малого и среднего бизнеса
http://verna.com.ua/spec/IT-infrastr..._optimization/

Это сообщение посчитали полезным следующие участники:

Отправлено: 11:03, 20-08-2009 | #9


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


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

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


Разобрались общими усилиями с доступом, но усилия того стоят.

1. Оказалось дело в правах пользователя SYSTEM. Мой скрипт коннектится к машине с локальным логином и паролем, но потом начинает работать WMI, который запущен от имени SYSTEM удаленного ПК. А пользователю SYSTEM по умолчанию доступ в сеть запрещен.(решается через ГП)

2. В оснастке wmimgmt.msc -свойства-безопастность, пользователя SYSTEM по умолчанию нет.

И... все работает.

Тему можно считать закрытой.

Отправлено: 15:23, 20-08-2009 | #10



Компьютерный форум 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




 
Переход