Автоматизированный пакетный скрипт с использованием netdom для присоединения новых пользователей в домене
Хотя я выгляжу как один из самых умных людей, когда-либо ходивших по земле, я не разбираюсь в сценариях и программировании.
Моя основная текущая настройка:
- Windows 2003 скоро будет 2008 R2 AD схема
- На рабочих станциях XP SP3 скоро будет Windows 7 (как через год или два).
Это изображение, которое я пытаюсь полностью автоматизировать процедуру присоединения к домену, подробно описанную в этом посте.
Я использую несколько пакетных сценариев и пару vbs-файлов для запуска после того, как образ SysPrep создан с использованием сервера GhostCast или Ghost Console GSS версии 2.5. По сути, WSNAME переименовывает компьютеры через MAC-адрес из текстового файла и перезагружается.
Программа должна обновить свой экземпляр базы данных SQL после того, как компьютер был переименован, затем компьютер должен перезагрузиться снова.
После этой перезагрузки я хотел бы, чтобы этот скрипт выполнил следующее ВСЕ АВТОМАТИЗИРОВАННОЕ:
Пакетный скрипт с использованием netdom является предпочтительным.
- Запрашивает имя компьютера через строку или как угодно
- Если имя компьютера соответствует строке, присоедините этот компьютер к этому домену и OU, затем перезагрузите компьютер и сценарий должен завершиться или
- Если имя компьютера не совпадает, перейдите к следующему оператору, чтобы проверить соответствие, и присоедините этот компьютер к этому домену и OU, после чего перезагрузка и сценарий должны завершиться, или
- Если совпадения строк не найдены, выполните процедуру через операторы и присоедините компьютер к OU по умолчанию, затем перезагрузите компьютер и сценарий должен завершиться.
По сути, все компьютеры будут присоединены к домену с указанным подразделением.
Важные вещи были изменены, чтобы защитить невинных!
Эта попытка была объединена с нескольких веб-сайтов, но в основном из " Узнайте, содержит ли переменная среды подстроку" Если это лучше сделать с помощью VBS или любых других программ, пожалуйста, предоставьте файлы.
Я также понимаю, что один знак процента (%) может быть двойным знаком процента (%%) при запуске в виде пакетного сценария.
У меня есть около четырех других файловых итераций в этой попытке заставить эту штуку работать. Так что я тщетно пытался последние пару недель.
Основная проблема заключается в получении правильного синтаксиса для запроса имени компьютера на основе findstr
команда. Я могу манипулировать операторами, чтобы заставить их работать вручную через командную строку, но не как один пакетный скрипт.
После дальнейших исследований также кажется, что возможно использование команды Set для установки переменных для строк поиска также может быть правдоподобным. Некоторые из этих компьютеров принадлежат одному и тому же подразделению, поэтому пара этих операторов может быть пересмотрена или опущена, если учитывается правильная строка запроса.
Пожалуйста, возьмите и пересмотрите это или даже уничтожьте это вообще. Я просто хочу что-то, что будет работать без нареканий. Любая помощь очень ценится.
ЭТОТ СКРИПТ ВРУЧНУЮ РАБОТАЕТ, но, очевидно, он только интерактивный.
::netdom join %computername% /Domain:handsome.and.smart.com /userd:delegate /passwordd:topsecret /OU:"ou=Secret Stations,ou=Domain Computers,dc=handsome,dc=and,dc=smart,dc=com" /REBOOT
echo.%computername%|findstr /B /I /C:"12" >nul 2>&1 && goto move_to_XPOU || goto move_to_secretOU
echo.%computername%|findstr /B /I /C:"745" >nul 2>&1 && goto move_to_secretOU || goto move_to_85OU
echo.%computername%|findstr /B /I /C:"85-712" >nul 2>&1 && goto move_to_85OU || goto move_to_859OU
echo.%computername%|findstr /B /I /C:"85-9" >nul 2>&1 && goto move_to_859OU || goto move_to_ctdOU
echo.%computername%|findstr /B /I /C:"CTD" >nul 2>&1 && goto move_to_ctdOU || goto move_to_coajOU
echo.%computername%|findstr /B /I /C:"COAJ" >nul 2>&1 && goto move_to_coajOU || goto move_to_65OU
echo.%computername%|findstr /B /I /C:"65" >nul 2>&1 && goto move_to_65OU || goto move_to_16
echo.%computername%|findstr /B /I /C:"16" >nul 2>&1 && goto move_to_16 || goto move_to_104OU
echo.%computername%|findstr /B /I /C:"104" >nul 2>&1 && goto move_to_104OU || goto move_to_secretOU
echo.%computername%|findstr /B /I /C:"Sec" >nul 2>&1 && goto move_to_secretOU || goto move_to_scscOU
echo.%computername%|findstr /B /I /C:"SCSC" >nul 2>&1 && goto move_to_scscOU || goto move_to_defaultOU
echo.%computername%|findstr /B /I /C:"740" >nul 2>&1 && goto move_to_defaultOU || goto end
::If name does not match any strings, place computer in default container.
echo.%computername%|findstr /B /I /C:"" >nul 2>&1 && goto move_to_default_OU || goto end
:move_to_XPOU
echo.%computername%|findstr /B /I /C:"12" >nul 2>&1 && netdom JOIN %computername% /Domain:handsome.and.smart.com /userd:delegate /passwordd:topsecret /OU:"ou=XP Client,ou=Domain Computers,dc=handsome,dc=and,dc=smart,dc=com" /REBOOT && goto end || goto move_to_ghostOU
:move_to_secretOU
echo.%computername%|findstr /B /I /C:"745" >nul 2>&1 && netdom JOIN %computername% /Domain:handsome.and.smart.com userd:delegate /passwordd:topsecret /OU:"ou=Secret Stations,ou=Domain Computers,dc=handsome,dc=and,dc=smart,dc=com" /REBOOT:34 && goto end || goto move_to_puka
:move_to_85OU
echo.%computername%|findstr /B /I /C:"85-712" >nul 2>&1 && netdom JOIN %computername% /Domain:handsome.and.smart.com /userd:delegate /passwordd:topsecret /OU:"ou=85 COMPUTERS,ou=Domain Computers,dc=handsome,dc=and,dc=smart,dc=com" /REBOOT && goto end || goto move_to_859OU
:move_to_859OU
echo.%computername%|findstr /B /I /C:"85-9" >nul 2>&1 && netdom JOIN %computername% /Domain:handsome.and.smart.com /userd:delegate /passwordd:topsecret /OU:"OU=859 CLIENTS,OU=BLDG 85 OU,dc=handsome,dc=and,dc=smart,dc=com" /REBOOT && goto end || goto move_to_ctdOU
:move_to_ctdOU
echo.%computername%|findstr /B /I /C:"CTD" >nul 2>&1 && netdom JOIN %computername% /Domain:handsome.and.smart.com /userd:delegate /passwordd:topsecret /OU:"ou=CTD COMPUTERS,ou=Domain Computers,dc=handsome,dc=and,dc=smart,dc=com" /REBOOT && goto end || goto move_to_coajOU
:move_to_coajOU
echo.%computername%|findstr /B /I /C:"COAJ" >nul 2>&1 && netdom JOIN %computername% /Domain:handsome.and.smart.com /userd:delegate /passwordd:topsecret /OU:"ou=COAJ COMPUTERS,ou=Domain Computers,dc=handsome,dc=and,dc=smart,dc=com" /REBOOT && goto end || goto move_to_65OU
:move_to_65OU
echo.%computername%|findstr /B /I /C:"65" >nul 2>&1 && netdom JOIN %computername% /Domain:handsome.and.smart.com /userd:delegate /passwordd:topsecret /OU:"ou=XP Client,ou=Domain Computers,dc=handsome,dc=and,dc=smart,dc=com" /REBOOT && goto end || goto move_to_16
:move_to_16
echo.%computername%|findstr /B /I /C:"16" >nul 2>&1 && netdom JOIN %computername% /Domain:handsome.and.smart.com /userd:delegate /passwordd:topsecret /OU:"ou=XP Client,ou=Domain Computers,dc=handsome,dc=and,dc=smart,dc=com" /REBOOT && goto end || goto move_to_104OU
:move_to_104OU
echo.%computername%|findstr /B /I /C:"104" >nul 2>&1 && netdom JOIN %computername% /Domain:handsome.and.smart.com /userd:delegate /passwordd:topsecret /OU:"ou=104 Computers,dc=handsome,dc=and,dc=smart,dc=com" /REBOOT && goto end || goto move_to_scscOU
:move_to_scscOU
echo.%computername%|findstr /B /I /C:"SCSC" >nul 2>&1 && netdom JOIN %computername% /Domain:handsome.and.smart.com /userd:delegate /passwordd:topsecret /OU:"ou=SCSC COMPUTERS,ou=Domain Computers,dc=handsome,dc=and,dc=smart,dc=com" /REBOOT:22 && goto end || goto default_OU
:move_to_default_OU
::If name does not match any strings, place computer in default container.
echo.%computername%|findstr /B /I /C:"" >nul 2>&1 && netdom JOIN %computername% /Domain:handsome.and.smart.com /userd:delegate /passwordd:topsecret /OU:"OU=DEFAULT CLIENTS,OU=XP ALL OU,dc=handsome,dc=and,dc=smart,dc=com" /REBOOT && goto end
:end
::Pause was used in the attempt to troubleshoot.
pause
1 ответ
Я не буду использовать | за исключением некоторых случаев, когда это действительно имеет смысл имени, это не один из них. У партии всегда были проблемы с обвязкой.
Я бы переписал, используя стандартные вызовы функций (используйте: номенклатуру тегов для заголовка ваших функций и GOTO:EOF для их завершения (с тегом: EOF внизу). Используйте команды Call и Goto для перемещения. Вы можете извлечь необходимую информацию из системы и надежно вставить в нее переменную, записав в файлы и используя FOR /F для извлечения.
Единственный раз, когда вам нужно использовать %%, это при использовании FOR /F.
Есть несколько способов присоединения домена к системе; Функции NetDom, WMIC, Powershell, VBS и т. Д. Я предпочитаю использовать новейший метод и выводить его в скрипт (например, перенести данные в текстовый файл, а затем вызвать функцию powershell, которая возвращает переменную, которую читает другой пакет, чтобы определить, что происходит). Пакет был действительно построен для использования таким образом.
Наконец, у меня был скрипт на сервере, чтобы переместить компьютеры в соответствующее подразделение после подключения. Выполнение этого в сценарии хоста может привести к ошибкам, если вы допустите ошибку и поймаете ее во время развертывания. Это еще одна кнопка для нажатия, ничего страшного. Также позволяет использовать параметры групповой политики развертывания.