Я запрашиваю у пользователя имя компьютера во время фазы экранного меню WinPE - PullRequest
0 голосов
/ 05 января 2020

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

Import-Module (Join-Path $(Split-Path $env:SMS_ADMIN_UI_PATH) ConfigurationManager.psd1)
Import-Module ActiveDirectory
Имя файла Set-OSDComputerNamePrompt-TST.ps1 Ниже приведен один из массивов, которые я добавляю
Import-Module ActiveDirectory
$ADSites = (Get-ADReplicationSite -filter *).Name

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

Запрос на имя компьютера

1 Ответ

0 голосов
/ 07 января 2020

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

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

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

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

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

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

...