Я запрашиваю у пользователя имя компьютера во время фазы WinPE экранного меню

На этапе WinPE развертывания OSD я запускаю форму, в которой пользователь должен ввести имя компьютера. Часть сценария PS требует импорта модуля ActiveDirectory, однако я не могу импортировать модуль AD.

Import-Module (Join-Path $(Split-Path $env:SMS_ADMIN_UI_PATH) ConfigurationManager.psd1)
Import-Module ActiveDirectory
File Name Set-OSDComputerNamePrompt-TST.ps1 Below is one of the Array's I'm adding
Import-Module ActiveDirectory
$ADSites = (Get-ADReplicationSite -filter *).Name

У меня есть модуль PowerShell, добавленный в файл Boot.Wim, и я скопировал

Форма запроса имени компьютера


person MSantoro64    schedule 05.01.2020    source источник
comment
В Интернете есть несколько документов о том, как добавить модуль PS Active Directory в WinPE, но я бы рекомендуется не использовать AD в PE, а использовать Интерфейсы службы Active Directory (ADSI) вместо этого, чтобы образ ASD оставался компактным. См., например: Работа с Active Directory с помощью адаптера PowerShell ADSI   -  person iRon    schedule 05.01.2020
comment
iron, спасибо за ответ. Я просмотрел ссылки, и только первая из них была близка к работе, однако ActiveDirectory Install-Module не работает в моих системах. Windows 10 1909 Windows Server 2016 ADK Win 1903 Поэтому я не могу использовать ActiveDirectory Import-Module, поэтому я могу использовать командлет Get-ADReplicationSite. ;(   -  person MSantoro64    schedule 05.01.2020


Ответы (1)


WinPE — это не обычная Windows, а командлеты Active Directory очень особенные (им нужна настройка для работы на несерверных ОС), так что это плохая комбинация.

Как прокомментировал iRon, есть способы включить это, но они всегда будут неподдерживаемым взломом. Если версия PE изменится, возможно, это нужно сделать с другими файлами, или может случиться так, что новая версия просто полностью нарушит хак. Вы не должны полагаться на что-то подобное для OSD. (Я не знаю о вашей конкретной настройке AD, но для большинства из них будет гораздо меньше работы по жесткому кодированию доменных имен в скрипте и обновлению скрипта при каждом добавлении сайта, чем всегда идти в ногу с изменениями PE, которые по плану 3 раза в год)

Запасной вариант для всех вещей, связанных с AD, которые работают без модуля, будет adsi, который может работать в PE (в целом, чтобы Powershell работал, вам нужно изменить загрузочный образ, но эти изменения поддерживаются SCCM, поэтому они не обеспечивают дополнительной работы над изменениями выпуска). и вы, вероятно, уже сделали это, чтобы зайти так далеко)

С помощью adsi вы можете получить список своих сайтов следующим образом:

$sitesDN = "LDAP://CN=Sites," + $([adsi] "LDAP://RootDSE").Get("ConfigurationNamingContext")
$ADSites = (([adsi]$sitesDN).psbase.children | where {$_.Objectclass -ieq "site"}).Name

В качестве примечания: я предполагаю, что у вас есть разные сайты для этого кода. Если это один из тех случаев, когда этот метод будет «золотым стандартом», потому что он работает независимо от настройки AD, но лично у вас есть только один сайт, который вряд ли изменится (как, вероятно, многие люди), я бы не советовал такое сложное решение, даже если оно отказоустойчиво и просто жестко кодирует имя. PE имеет много особых случаев, и иногда его трудно отлаживать, поэтому, если возможно, уменьшите сложность (конечно, если это позволяет вам сохранять то же удобство).

person Syberdoor    schedule 07.01.2020