Автоматическое присоединение машины к домену

Моя компания хотела бы использовать образ Syprep и файл autounattend.xml для развертывания новых машин или восстановления старых с помощью USB-накопителя. Мы не хотим использовать SCCM.Я буду подталкивать нас к использованию WDS в будущем, но мы все еще хотим иметь возможность сделать это, просто вставив USB в машину.

Некоторое время я сталкивался с одним препятствием: я не могу заставить машину автоматически присоединиться к домену после первого входа в систему. Для этого я использую несколько сценариев PowerShell. Пока я просто тестирую сценарий для переименования машины. Это работает, если я сам запустил его на виртуальной машине, но не будет работать, если я запущу его из autounattend.xml. Unattend запустит сценарий при входе в систему в качестве администратора, который откроет командный файл, который запускает сценарий PowerShell от имени администратора и обходит политику выполнения сценария. Затем этот сценарий переименует компьютер.

За исключением того, что это не так. В сети Я заметил, что вы не можете выполнить автоматическое присоединение к домену через WDS в любом случае, поскольку у Microsoft есть ошибка, которая не позволяет вам присоединиться через какой-либо другой проход, кроме OOBE. Это означает, что в любом случае я должен заставить этот скрипт работать для автоматического присоединения к домену.

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

Приведенные ниже сценарии просто переименовывают машину. Это просто проверка.

Сценарий автоматической установки:

C: \ _ scripts \ 4_psbypass.bat

Пакетный сценарий:

@echo off PowerShell -NoProfile -ExecutionPolicy Bypass -Command "& {Start-Process PowerShell -ArgumentList '-NoProfile -ExecutionPolicy Bypass -File" "C: \ _ scripts \ Rename-PC.ps1" "' -Verb RunAs}" @echo - имя ПК изменено >> C: \ log.txt @echo - присоединен к домену примера >> C: \ log.текст @echo - Машина перезагружена >> C: \ log.txt del% 0

Сценарий Powershell:

Этот сценарий будет помещен в WIM-файл образа, который мы развернем. Этот сценарий будет выполнен после того, как учетная запись администратора выполнит первоначальный автоматический вход. Сценарий использует учетные данные администратора домена, чтобы найти файл списка, к которому он будет обращаться. После ввода учетных данных сценарий проверит соответствующее имя ПК. Если это новая сборка, он просто посмотрит на верхний номер ПК в списке. и переименуйте себя в этот номер, добавляя следующий номер в начало списка. Если ПК требует восстановления, добавьте '-r' рядом с его номером, например: << 199 -r >>. Затем сценарий удалит '-r', переименует компьютер и не будет добавлен в список. Если имеется несколько отмеченных номеров, то он будет нацелен на наименьшее число. Сценарий перезагрузит компьютер и удалит себя после выполнения.

Создает учетные данные для всего сценария PowerShell. Должен быть администратором домена.

$ user = "Домен \ админ" $ pass = Get-Content "C: \ _ scripts \ _cred \ adaapass.txt" | ConvertTo-SecureString $ cred = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $ user, $ pass

Временно подключает сетевой диск на время выполнения сценария.

New-PSDrive -Name 'X' -PSProvider FileSystem -Root "\\ path \ c $ \ DiskImagingPathTests \ _scripts" -Credential $ cred

Определяет путь к существующему списку компьютеров домена. Находит файл txt exlist txt на смонтированном диске.

$ path = "X: \ exlist.txt"

Сохраняет верхний номер списка.$ listName = Get-Content -Path $ path -TotalCount 1

Заменяет номер, сохраненный с наименьшим отмеченным компьютером, если он существует.

Get-Content $ path | ForEach-Object { если ($ _ -матч '-r'){ $ listName = $ _ } }

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

if ($ listName -match "(? . *) -R") { (Get-Content $ path) -replace $ listName, $ listName.split ("") [0] | Set-Content $ path $ listName = $ соответствует ['content'] } еще { $ listName = [строка] ([int] $ listName + 1) $ listName + " n" + (Get-Content $ path -Raw) | Set-Content $ path } `

Очищает белые линии.

(gc $ path) | ? {$ _. trim () -ne ""} | set-content $ path

Отключение сетевого диска

Remove-PSDrive -Name 'X'

Правильное форматирование имени для домена.

$ listName = "Домен" + $ listName

Переименовывает компьютер и перезагружается (требуются локальные учетные данные).

Rename-Computer -NewName $ listName -Restart

Я ошибаюсь? Любой совет поможет. Мне почти просто нужно второе мнение по этому поводу. Я как бы застрял у стены, потому что мне нечего больше пробовать.

0
задан 17 October 2019 в 13:21
1 ответ

Итак, поработав с этим некоторое время, я наконец получил это.Я использовал Start-Transcript для создания файлов журнала для PowerShell, удалил командные файлы и просто запустил сценарии PowerShell прямо из первой команды входа в систему моего sysprepped образа.

Скорее всего, сценарий даже не запускался, но в конце концов мне удалось присоединить его к домену с помощью команды Rename-Computer , прежде чем я использовал команду Add-Computer . Затем я перезагрузил машину, и это сработало!

Спасибо за помощь, ребята, я новичок в написании подобных сценариев, поэтому, если есть чему поучиться у меня, так это тому, что очень важно вести журнал ваших сценариев.

0
ответ дан 7 February 2020 в 08:51

Теги

Похожие вопросы