Автоматизированный пакетный скрипт, использующий netdom для присоединения новых пользователей в домене - PullRequest
0 голосов
/ 09 декабря 2011

Хотя я выгляжу как один из самых умных людей, которые когда-либо ходили по этой земле, я не очень разбираюсь в сценариях и программировании.

Мои основные текущие настройки:

  • Windows 2003 скоро станет схемой 2008 R2 AD
  • Рабочие станции XP SP3 скоро станут Windows 7 (как через год или два).

Это изображение Iя пытаюсь полностью автоматизировать процедуру присоединения к домену, подробно описанную в этом посте.

Я использую несколько пакетных сценариев и пару файлов VBS для запуска после того, как образ SysPrep'ован с использованием сервера GhostCast или Ghost Console GSS версии.2.5.По сути, WSNAME переименовывает компьютеры через MAC-адрес из текстового файла и перезагружается.

Программа должна обновить свой экземпляр базы данных SQL после переименования компьютера, затем компьютер должен перезагрузиться снова.

После этой перезагрузки я хотел бы, чтобы этот сценарий выполнил следующие ВСЕ АВТОМАТИЗИРОВАННЫЕ:

Пакетный сценарий, использующий netdom.

  1. Запрашивает имя компьютера через строку или что-то ещеподходящий
  2. Если имя компьютера совпадает со строкой, присоедините этот компьютер к этому домену и OU, затем перезагрузите компьютер и сценарий должен завершиться или
  3. Если имя компьютера не совпадает, перейдите к следующему оператору, чтобы проверить соответствие иприсоедините этот компьютер к этому домену и OU, затем перезагрузите компьютер и сценарий должен завершиться или
  4. Если совпадения строк не найдены, выполните инструкции через операторы и присоедините компьютер к OU по умолчанию, тогда перезагрузка и сценарий должны завершиться

По сути, все компьютеры будут присоединены к домену с указанным OU.

Важные stuff был изменен для защиты невинных!

Эта попытка была объединена с нескольких веб-сайтов, но в основном с Узнайте, содержит ли переменная среды подстроку .Если это лучше сделать с помощью 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 Ответ

0 голосов
/ 28 января 2014

Я бы не использовал |за исключением некоторых случаев, когда это действительно имеет смысл имени, это не один из них.У пакета всегда были проблемы с конвейером.

Я бы переписал, используя стандартные вызовы функций (используйте: номенклатуру тегов для заголовка ваших функций и GOTO: EOF для их завершения (с тегом: EOF внизуИспользуйте команды Call и Goto для перемещения. Вы можете извлечь необходимую информацию из системы и надежно вставить ее в переменную, записав в нее файлы и используя FOR / F для извлечения.

Единственное время, которое вам нужноиспользовать %% при использовании FOR / F.

Существует несколько способов присоединения домена к системе: функции NetDom, WMIC, Powershell, VBS и т. д. Я предпочитаю использовать новейший метод ипреобразовать его в сценарий (например, перенести данные в текстовый файл, а затем вызвать функцию powershell, которая возвращает переменную, которую читает другой пакет, чтобы определить, что происходит). Пакет действительно создан для использования таким образом.

Наконец, у меня на сервере должен быть скрипт для перемещения компьютеров в соответствующее подразделение после их подключения. Выполнение этого в скрипте хоста может быть грязным, если выдопустить ошибку и поймать ее во время развертывания.Это еще одна кнопка для нажатия, ничего страшного.Также позволяет использовать параметры групповой политики развертывания.

...