Мне нужно обновить некоторые атрибуты учетной записи AD пользователя с помощью Set-ADUser
, но пользователь идентифицируется по электронной почте, и я не знаю, в каком из доменов моего леса он находится.
Допустим, мой лес example.com
с доменами south.example.com
, north
, east
и west
. Электронные письма для каждого цвета, например red.example.com
(white.
, pink.
и т. д.).
Просто чтение атрибутов работает, если я запрашиваю глобальный каталог (Get-ADUser -server east.example.com:3268
), но результирующий объект нельзя использовать для Set-ADUser
(поскольку глобальный кот доступен только для чтения).
Есть ли другой вариант, кроме лестницы ifs в последовательных доменах? Что 1) некрасиво, 2) может пропустить другие домены, о которых я не знаю (не спрашивайте, это сложно).
Я попробовал Get-ADUser -server example.com
(запрос корневого домена) - на прошлой неделе это сработало, больше не работает, и я понятия не имею, почему - нет сообщения об ошибке, объект просто появляется пустым.
Но я привел примеры того, что я делаю?
В Интернете есть много примеров для этого варианта использования... Просто найдите их, используя заголовок сообщения.
Примеры):
Powershell для вывода списка всех пользователей из доменов в лесу
Import-Module ActiveDirectory
(Get-ADForest).domains |
% {
Get-ADUser -filter * -SearchBase "OU=Accounts,$((Get-ADDomain -Server $_).distinguishedname)" -Server $_ |
Select Name,sAMAccountName | Export-CSV "C:\$_ User Accounts.csv" -nti
}
Смотрите также образцы здесь:
Код PowerShell: найти пользователя в лесу Active Directory
Как запросить пользователя в нескольких лесах с помощью AD powershell
Клянусь вам, я потратил пару дней на поиски, видимо, я задавал все неправильные вопросы... Теперь мне просто нужно проверить, смогу ли Set-ADUser работать с объектом, найденным с помощью этого метода. Спасибо, в любом случае!
Не волнуйтесь. Это случается, и иногда это просто вопрос разбиения вопроса на части или строки, цитирующей части вопроса для более точного соответствия. Возьмите книгу «Взлом Google», в ней много хитростей. Многие из них работают в разных поисковых системах, и при поиске технических материалов я использую DuckDuckGo, так как он дает мне наилучшие технические результаты. Как только я нахожу интересные вещи, ища что-то конкретное, я всегда сохраняю это для дальнейшего использования. Это мои поисковые данные копят вещи об ОКР. ;-} --- ТБ за эти годы.
Мой Google Fu обычно справляется с задачей, кажется, моя ошибка заключалась в том, что я сосредоточился на «Get-ADUser весь лес» вместо более общего запроса :-)
Чтобы закрыть тему, вот что мне нужно: (Get-ADForest).domains |% { Get-ADUser -Server $_ -Filter {EmailAddress -eq $Mail} -Property Certificates}
Итак, Get-ADUser поверх леса работает так, как указано выше, но поскольку я изначально хотел использовать Set-ADUser с использованием объекта из поиска, мне нужно написать немного больше кода.
Видите ли, Get-ADUser возвращает «независимый от сервера» объект, что означает, что использование этого объекта для Set-ADUser требует указания -Server, если пользователь находится в другом домене, чем вы.
Результирующий код:
(Get-ADForest).domains |% {
$tmpUser = Get-ADUser -Server $_ -Filter {EmailAddress -eq $Mail}
if ($tmpUser) {
$user = $tmpUser
$server = $_
$tmpUser = $null
}
}
$user | Set-ADUser -Certificates @{Add=$newCert} -server $server
Не так красиво, но РАБОТАЕТ.
Давайте посмотрим на код, и мы сможем начать помогать.