![]() |
Внимание, важное сообщение: Дорогие Друзья!
В ноябре далекого 2001 года мы решили создать сайт и форум, которые смогут помочь как начинающим, так и продвинутым пользователям разобраться в операционных системах. В 2004-2006г наш проект был одним из самых крупных ИТ ресурсов в рунете, на пике нас посещало более 300 000 человек в день! Наша документация по службам Windows и автоматической установке помогла огромному количеству пользователей и сисадминов. Мы с уверенностью можем сказать, что внесли большой вклад в развитие ИТ сообщества рунета. Но... время меняются, приоритеты тоже. И, к сожалению, пришло время сказать До встречи! После долгих дискуссий было принято решение закрыть наш проект. 1 августа форум переводится в режим Только чтение, а в начале сентября мы переведем рубильник в положение Выключен Огромное спасибо за эти 24 года, это было незабываемое приключение. Сказать спасибо и поделиться своей историей можно в данной теме. С уважением, ваш призрачный админ, BigMac... |
|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » VBS/WSH/JS - [решено] Скрипт не вводит ПК в домен |
|
VBS/WSH/JS - [решено] Скрипт не вводит ПК в домен
|
Новый участник Сообщения: 15 |
Имеется следующий скрипт, который благополучно отрабатывает, под администратором на удаленном Пк, успешно выводит запись в лог, но компьютеры в домен не попадают. Подскажите в чем проблема?
'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
|
Профиль | Отправить PM | Цитировать Castor, нужна ваша помощь... вы ещё в теме?
|
Отправлено: 17:59, 20-11-2011 | #11 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
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 |
|