Моя компания хотела бы использовать образ 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 "(?
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
Я ошибаюсь? Любой совет поможет. Мне почти просто нужно второе мнение по этому поводу. Я как бы застрял у стены, потому что мне нечего больше пробовать.
Итак, поработав с этим некоторое время, я наконец получил это.Я использовал Start-Transcript для создания файлов журнала для PowerShell, удалил командные файлы и просто запустил сценарии PowerShell прямо из первой команды входа в систему моего sysprepped образа.
Скорее всего, сценарий даже не запускался, но в конце концов мне удалось присоединить его к домену с помощью команды Rename-Computer
, прежде чем я использовал команду Add-Computer
. Затем я перезагрузил машину, и это сработало!
Спасибо за помощь, ребята, я новичок в написании подобных сценариев, поэтому, если есть чему поучиться у меня, так это тому, что очень важно вести журнал ваших сценариев.