Powershell - прямые отчеты -резиденты - PullRequest
0 голосов
/ 01 ноября 2019

Несмотря на то, что я знаю некоторые базовые вещи в Powershell, мне все еще сложно делать более сложные вещи, такие как использование операторов If и т. Д.
У меня есть простой код для получения directReports менеджера:

Get-ADUser -filter {CN -eq "TestMngr"} -properties directReports | 
Select-Object -ExpandProperty directreports |  
Get-ADUser -properties CN, DisplayName, Office, directReports |
Select-Object CN, DisplayName, Office, directReports

Этот код работает нормально и имеет правильную компоновку.
Но теперь я хочу также перечислить directReports первого списка directReports и так далее ...
Я попробовал его с помощью Ifзаявление, но не удалось. Также пытался с -recurse, но также не работал. Также где-то в сети нашел какой-то код, но он был очень сложным и не работал так, как я.
Пожалуйста, помогите, еще раз спасибо: -)

Ответы [ 2 ]

1 голос
/ 01 ноября 2019

Вы можете сделать что-то вроде следующего:

$depth = 2
$UserCN = '<CN of User>'
$user = (Get-ADUser -Filter "CN -eq '$UserCN'").SamAccountName

$output = while ($depth -ge 1) {
    $temp = $user | Foreach-Object {
        Get-ADUser $_ -Properties CN,DirectReports | Where DirectReports |
            Select-Object -Property CN,DirectReports
    }
    $temp
    $user = $temp.DirectReports
    $depth--
}

$output |
    Select-Object CN,@{Name='DirectReports';Expression={
       ($_.DirectReports -replace 'CN=|,OU=.*|,DC=.*|\\') -join '; '}} |
           Export-Csv output.csv -NoType

Объяснение:

$depth будет числом рекурсий, которые вы хотите выполнить. В настоящее время $UserCN содержит значение CN пользовательского объекта AD. Первоначальный запрос для этого пользователя выполняется для сохранения значения в $user, которое может быть передано в параметр -Identity. К коллекции DirectReports присоединяется ;, который вы можете изменить на любое другое.

В настоящее время результаты Get-ADUser не выводятся для пользователей, у которых нет прямого отчета. Вы можете изменить это, удалив Where DirectReports.

0 голосов
/ 04 ноября 2019

Это код, который я наконец-то использую, благодаря @ AdminOfThings.

$Manager = @{Name = "Manager"; Expression = {%{(Get-ADUser $_.Manager -Properties DisplayName).DisplayName}}}
$depth = 8
$UserCN = '<CN of User>'
$user = (Get-ADUser -Filter "CN -eq '$UserCN'").SamAccountName

$output = while ($depth -ge 1) {
    $temp = $user | Foreach-Object {
        Get-ADUser $_ -Properties CN, displayname, office, city, manager, DirectReports | 
            Select-Object -Property CN, displayname, office, city, Manager, DirectReports
    }
    $temp
    $user = $temp.DirectReports
    $depth--
}

$output |
    Select-Object CN, displayname, office, city, $Manager, @{Name='DirectReports';Expression={
       ($_.DirectReports -replace 'CN=|,OU=.*|,DC=.*|\\') -join '; '}} |
           Export-Csv -path C:Temp\Output.csv -Delimiter ";" -NoType
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...