Вопрос или проблема
Я пытаюсь получить свойства пользователя, такие как путь, имя, фамилия и т. д. из другого домена.
Ниже приведенный код работает нормально, если я запускаю его на контроллере домена Active Directory.
$userId = 'UserID'
$UserDN = (Get-ADUser -F {SamAccountName -eq $userId})
$Command = [ADSI] "LDAP://$UserDN"
$Command | select * | format-list
Затем я попробовал использовать команды Get-StoredCredential и Get-ADUser, чтобы запустить скрипт локально, надеясь получить те же результаты, но он просто возвращает пустые свойства.
$Credential =$(Get-StoredCredential -Target targetdomaincredential)
$userId = 'UserID'
$UserDN = (Get-ADUser -Server ADDCX-Credential $Credential -F {SamAccountName -eq $userId})
$Command = [ADSI] "LDAP://$UserDN"
$Command | select * | format-list
Буду признателен за любую помощь или если кто-то может направить меня в правильном направлении, это было бы здорово!
Если вам нужны учетные данные для запроса AADCX
с помощью модуля AD, логично, что вам также понадобятся они для запроса с помощью adsi
.
$Command = [adsi]::new(
"LDAP://$UserDN",
$Credential.UserName,
$Credential.GetNetworkCredential().Password)
$Command | Select-Object * | Format-List
Вы также можете использовать DirectorySearcher
напрямую…
$userId = 'UserID'
$searcher = [adsisearcher]::new(
[adsi]::new(
'LDAP://DC=ADDCX,DC=....', # Здесь должен быть завершен DN домена
$Credential.UserName,
$Credential.GetNetworkCredential().Password),
"(samAccountName=$userId)")
$searcher.FindOne().GetDirectoryEntry() | Select-Object * | Format-List
Ответ или решение
Для извлечения свойств пользователей Active Directory из другого домена с использованием PowerShell и ADSI, действительно необходимо использовать действительные учетные данные для аутентификации при выполнении запросов к удаленному домену. Ниже представлен полный пример того, как это можно сделать, включая использование Get-StoredCredential
для получения учетных данных:
Шаг 1: Убедитесь, что у вас есть необходимые модули
Убедитесь, что у вас установлен модуль CredentialManager
, который позволит вам работать с Get-StoredCredential
.
Install-Module -Name CredentialManager -Force -Scope CurrentUser
Шаг 2: Получение учетных данных
Подразумевается, что учетные данные для доступа к удаленному домену сохранены с помощью Get-StoredCredential
. Вам нужно будет задать правильное название хранилища учетных данных для доступа к нужному домену.
$Credential = Get-StoredCredential -Target 'targetdomaincredential'
Шаг 3: Поиск пользователя
Замените ADDCX
и ...
на фактические значения вашего домена.
$userId = 'UserID' # Замените на нужное имя пользователя
# Создайте объект DirectorySearcher с вашим DN домена и учетными данными
$searcher = New-Object DirectoryServices.DirectorySearcher(
[adsi]::new(
'LDAP://DC=ADDCX,DC=example,DC=com', # Полное имя домена
$Credential.UserName,
$Credential.GetNetworkCredential().Password),
"(samAccountName=$userId)"
)
# Найдите пользователя и получите его свойства
$userEntry = $searcher.FindOne()
if ($userEntry -ne $null) {
$userObject = $userEntry.GetDirectoryEntry()
$userObject | Select-Object * | Format-List
} else {
Write-Host "Пользователь с указанным именем не найден."
}
Дополнительные примечания
- Убедитесь, что ваш пользователь имеет разрешения на чтение свойств в целевом домене.
- Если ваши учетные данные не верны или недостаточны, вы получите ошибку. Убедитесь, что вы вводите необходимые данные правильно.
- Если требуется, вы можете использовать
Try-Catch
блок для обработки возможных ошибок.
Заключение
Данная реализация позволяет вам безопасно и эффективно извлекать свойства пользователей из удаленного домена Active Directory, используя учетные данные, которые хранятся в защищенном виде. Убедитесь, что все используемые вами объекты и значения соответствуют требованиям вашего окружения.