Использование PowerShell для извлечения свойств пользователей Active Directory из другого домена с помощью ADSI

Вопрос или проблема

Я пытаюсь получить свойства пользователя, такие как путь, имя, фамилия и т. д. из другого домена.

Ниже приведенный код работает нормально, если я запускаю его на контроллере домена 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, используя учетные данные, которые хранятся в защищенном виде. Убедитесь, что все используемые вами объекты и значения соответствуют требованиям вашего окружения.

Оцените материал
Добавить комментарий

Капча загружается...