Есть ли способ вернуть менеджера пользователя из запроса LDAP? - PullRequest
0 голосов
/ 24 января 2020

Сотрудник поручил мне создать запрос LDAP для нового приложения, которое он настраивает, PowerBroker. Цель состоит в том, чтобы получить список менеджеров для всех пользователей в подразделении, если у них есть определенный атрибут AD, давайте назовем его «SecurityLevel». Подразделение имеет текущие административные учетные записи, а «менеджеры» - это стандартные учетные записи пользователей, которым они принадлежат.

Это довольно просто сделать в Powershell, но мы бы хотели, чтобы инструмент автоматически обновлялся по мере создайте новые учетные записи администратора, и у инструмента есть поле для использования запроса LDAP. Я новичок в запросах LDAP, но думал, что это будет просто. К сожалению, это оказалось сложнее, чем я ожидал.

Я думал, что это будет выглядеть примерно так: (manager) (SecurityLevel = 1) .

PowerShell потому что это выглядит примерно так:

$SecondaryAccounts = Get-ADUser -Filter * -SearchBase "OU=SecondaryAccounts,OU=USERS,DC=example,DC=com" -Properties Name, manager, SecurityLevel
foreach ($account in $SecondaryAccounts)
{
    if ($account.SecurityLevel -eq 1)
    {
        $PrimaryAccount = $account.Manager
        Write-Host "Type 1 account: $PrimaryAccount"
    }
}

Любые рекомендации о том, как получить информацию менеджера?

1 Ответ

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

Я думал, что это будет выглядеть примерно так (менеджер) (SecurityLevel = 1).

Закрыть. Что касается запроса LDAP, он должен быть следующим:

(&(manager=*)(SecurityLevel=1))

Это означает: если атрибут manager имеет значение, а атрибут SecurityLevel равен 1.

Чтобы использовать запрос LDAP с Get-ADUser, необходимо использовать параметр -LDAPFilter:

Get-ADUser -LDAPFilter "(&(manager=*)(SecurityLevel=1))" -SearchBase "OU=SecondaryAccounts,OU=USERS,DC=example,DC=com" -Properties Name, manager, SecurityLevel

Параметр -Filter использует условия стиля PowerShell и позволяет использовать имена свойств, которые Get-ADUser предоставляет вместо необработанных имен атрибутов AD (например, «фамилия» вместо «sn»). В этом формате те же условия выглядят так:

Get-ADUser -Filter "manager -like '*' -and SecurityLevel -eq 1" -SearchBase "OU=SecondaryAccounts,OU=USERS,DC=example,DC=com" -Properties Name, manager, SecurityLevel

Атрибут manager содержит distinguishedName учетной записи менеджера. Таким образом, вы можете передать это в Get-ADUser, чтобы прочитать учетную запись менеджера. Все это вместе будет выглядеть примерно так:

$SecondaryAccounts = Get-ADUser -LDAPFilter "(&(manager=*)(SecurityLevel=1))" -SearchBase "OU=SecondaryAccounts,OU=USERS,DC=example,DC=com" -Properties Name, manager, SecurityLevel
foreach ($account in $SecondaryAccounts)
{
    $PrimaryAccount = Get-ADUser $account.Manager
    Write-Host "Type 1 account: $($PrimaryAccount.Name)"
}
...