Извлечение имени и адреса электронной почты менеджеров пользователей AD в существующий сценарий

В настоящее время у меня есть сценарий, который я пытаюсь изменить, который может извлекать из групп AD имена пользователей, имя, адрес электронной почты и менеджеров:

$ou = 'OU=OUoftheADgroups,OU=My,DC=Domain,DC=net'
Get-ADGroup -Filter * -SearchBase $ou -Properties Description | ForEach-Object {
   $params = @{
       LDAPFilter = '(memberof = {0})' -f $_.DistinguishedName
       Properties = 'mail', 'manager'
   }
   foreach($member in Get-ADUser @params) {
       [pscustomobject]@{
           Username       = $member.SamAccountName
           Name           = $member.Name
           Mail           = $member.Mail
           Manager        = $member.Manager
           GroupName      = $_.Name
       }
   }
} | Export-csv C:\Users\TestUser\Desktop\NameOfMyFile.csv -NoTypeInformation

Проблема в том, что данные менеджера просто отображают имя отличающегося имени менеджера, например. CN=Manager1,CN=Пользователи,DC=Мой,DC=Домен,DC=сеть

Я искал в Интернете и пытался заставить это работать, но не смог этого сделать.

Я искал в Интернете и нашел скрипт, который проверяет отдельные группы AD, а не подразделение (найдено через https://forums.powershell.org/t/getaduser-need-manager-name-and-email-in). -results/16471/4)

$adGroupList = 'BI_FINANCE_FULL','BI_FIN_EXP_FACILITIES_FULL_R1'
$results = foreach ($group in $adGroupList) {
    Get-ADGroupMember -identity $group -Recursive | 
        Get-ADUser -Properties * | 
            Select-Object @{Name='Group';Expression = {$group}},
                   displayname,
                   name,
                   employeeID,
                   Department,
                   title,
                   physicalDeliveryOfficeName,
                   Manager,
                   @{Name='ManagerName';Expression = {Get-ADUser -Identity $_.Manager | Select-Object -ExpandProperty DisplayName}},
                   sAMAccountName,
                   givenName,
                   surname,
                   UserPrincipalName
}

$results | Export-Csv -Append “C:\temp\GetADGroupMember4.csv” -NoTypeInformation -Encoding UTF8

ОБНОВЛЕНИЕ 1

Только что запустил приведенный выше сценарий, и с ним возникает та же проблема: сведения о менеджерах предоставляются, но поле имени менеджера пусто, а поле менеджеров имеет значение отличающееся имя (так же, как мой сценарий выше)

ОБНОВЛЕНИЕ 2

Я изменил код по запросу (вероятно, сделал это неправильно):

$ou = 'OU=OUoftheADgroups,OU=My,DC=Domain,DC=net'
Get-ADGroup -Filter * -SearchBase $ou -Properties Description | ForEach-Object {
   $params = @{
       LDAPFilter = '(memberof = {0})' -f $_.DistinguishedName
       Properties = 'mail', 'manager'
   }
   foreach($member in Get-ADUser @params) {
    Manager = (Get-ADuser $member.Manager).DisplayName 
       [pscustomobject]@{
           Username       = $member.SamAccountName
           Name           = $member.Name
           Mail           = $member.Mail
           Manager        = $member.Manager
           GroupName      = $_.Name
       }
   }
} | Export-csv C:\Users\TestUser\Desktop\NameOfMyFile.csv -NoTypeInformation

При попытке запустить код получаю следующую ошибку:

Manager : The term 'Manager' is not recognized as the name of a cmdlet, function, script file, or operable program. Check the spelling of the name, or 
if a path was included, verify that the path is correct and try again.
At C:\Users\TestUser\Desktop\Audit.ps1:9 char:5
+     Manager = (Get-ADuser $member.Manager).DisplayName
+     ~~~~~~~
    + CategoryInfo          : ObjectNotFound: (Manager:String) [], CommandNotFoundException
    + FullyQualifiedErrorId : CommandNotFoundException

Я пытался добавить код Manager = (Get-ADuser $member.Manager).DisplayName в другие области кода, но все равно не получилось.

Обновление 3

Я попробовал это, но, пытаясь разместить строку кода в разных областях, я не стал публиковать кучу ненужного кода.

Внес запрошенное вами изменение и получил следующее сообщение об ошибке:

Get-ADUser : Cannot validate argument on parameter 'Identity'. The argument is null. Provide a valid value for the argument, and then try running the 
command again.
At C:\Users\TestUser\Desktop\Audit.ps1:13 char:42
+             Manager        = (Get-ADUser $member.Manager).DisplayName
+                                          ~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidData: (:) [Get-ADUser], ParameterBindingValidationException
    + FullyQualifiedErrorId : ParameterArgumentValidationError,Microsoft.ActiveDirectory.Management.Commands.GetADUser

Обновление 4

Теперь сценарий работает, но отображаемое имя менеджера не переносится из AD в CSV:

ОБНОВЛЯТЬ

Похоже, что это только один менеджер AD и повторяется для всех пользователей:

«Я обнаружил, и возникает та же проблема» — какая та же проблема? Вы не поделились никакими ошибками или выводами :)

Mathias R. Jessen 18.07.2024 13:13

Приносим извинения за ту же проблему, что означает, что данные менеджера указаны как имя менеджера. Я обновлю вопрос.

S.Mahmood 18.07.2024 14:29

Это имеет смысл, вы по-прежнему выбираете Manager как есть, но что вы получаете в качестве значения в добавленном столбце ManagerName?

Mathias R. Jessen 18.07.2024 14:30

Извините, я запутался. поле ManagerName в CSV-файле пусто.

S.Mahmood 18.07.2024 14:32

В вашем первом скрипте вам не хватает Manager = (Get-ADuser $member.Manager).DisplayName

Santiago Squarzon 18.07.2024 15:08

@SantiagoSquarzon, где я добавляю эту строку кода? Я знаю глупый вопрос, но попробовал и не получилось

S.Mahmood 18.07.2024 15:19

в первом фрагменте кода у вас есть цикл для foreach($member in Get-ADUser @params) { для свойства Manager

Santiago Squarzon 18.07.2024 15:21

@SantiagoSquarzon попробовал это, но безуспешно. См. мое Обновление 2, догадавшееся об ошибке пользователя с моей стороны.

S.Mahmood 18.07.2024 16:08

Смотри мой ответ, потом удалю

Santiago Squarzon 18.07.2024 16:11

Кроме того, Get-ADGroupMember также может возвращать объекты типа группа или компьютер, поэтому вы не можете просто передать команду Get-ADUser без предварительной фильтрации объектов .ObjectClass.

Theo 18.07.2024 16:12
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
10
53
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Первый фрагмент кода правильный, вам просто нужно запросить AD, чтобы получить отображаемое имя менеджера из $member.Manager (отличительное имя менеджера). Некоторым пользователям может не быть назначен менеджер, поэтому вы можете просто добавить условие, которое проверяет, заполнен ли атрибут .Manager. Это может быть:

$ou = 'OU=OUoftheADgroups,OU=My,DC=Domain,DC=net'
Get-ADGroup -Filter * -SearchBase $ou -Properties Description | ForEach-Object {
    $params = @{
        LDAPFilter = '(memberof = {0})' -f $_.DistinguishedName
        Properties = 'mail', 'manager'
    }

    foreach ($member in Get-ADUser @params) {
        $manager = if ($member.Manager) {
            (Get-ADUser $member.Manager -Properties DisplayName).DisplayName
        }
        else {
            'No manager assigned in AD'
        }

        [pscustomobject]@{
            Username  = $member.SamAccountName
            Name      = $member.Name
            Mail      = $member.Mail
            Manager   = $manager
            GroupName = $_.Name
        }
    }
} | Export-Csv C:\Users\TestUser\Desktop\NameOfMyFile.csv -NoTypeInformation

Пожалуйста, не могли бы вы увидеть обновление 3.

S.Mahmood 18.07.2024 17:17

@S.Mahmood, эта ошибка возникает, когда пользователю не назначен менеджер. Вы ищете только пользователей, у которых ЕСТЬ менеджер, или всех?

Santiago Squarzon 18.07.2024 17:20

некоторые делают некоторые нет. Я бы предпочел, чтобы все эти поля emtpy-менеджеров не были большой проблемой, НО менеджеры, назначенные в AD, нам нужны с помощью этого скрипта, если это возможно. Было бы хорошо, если бы в поле emtpy было указано «в AD не назначен менеджер».

S.Mahmood 18.07.2024 18:34

@S.Mahmood посмотреть обновление

Santiago Squarzon 18.07.2024 18:38

Как добраться, скрипт работает, НО отображаемое имя менеджера не вводится в CSV, оно пустое - см. обновление 4.

S.Mahmood 18.07.2024 19:39

@S.Mahmood пропал -Properties DisplayName мойб

Santiago Squarzon 18.07.2024 19:43

Сантьяго сейчас добивается прогресса, но, пожалуйста, дождитесь обновления 4.

S.Mahmood 19.07.2024 12:20

@S.Mahmood попробуйте обновление

Santiago Squarzon 19.07.2024 14:25

Сантьяго, ты как всегда МУЖЧИНА!!!! Спасибо!!

S.Mahmood 19.07.2024 15:25

@S.Mahmood рад, что это было полезно, извините за опечатки

Santiago Squarzon 19.07.2024 15:26

Не нужно извиняться, я рад, что получил от вас помощь.

S.Mahmood 19.07.2024 19:34

Другие вопросы по теме