Есть ли лучший способ получить членов группы AD для данного списка ObjectGUID группы AD? - PullRequest
0 голосов
/ 27 декабря 2018

У меня есть список ObjectGUID (49 из них), хранящийся в CSV, и я вывожу CSV, который содержит список всех членов этих групп в следующем формате: «LastName, FirstName», «AD GroupИмя "У меня это работает (большую часть времени; иногда я получаю ошибки IOException из командлета Add-Content), но это очень медленно (занимает ~ 30 минут для 8000 членов).У меня нет большого опыта работы с Powershell, но я чувствую, что есть лучший / более эффективный способ сделать это.Любые идеи о том, как сделать это более эффективным?

Примечание: я использую переключатель "-Server", потому что мне действительно нужно запустить этот скрипт на нескольких разных доменах, поэтому вставленный код дважды дублируется в моем исходном коде с другим входом CSVи другой домен передается на коммутатор "-Server".

#read in CSV of ObjectGUIDs
$guids = Import-CSV .\ObjectGUIDs.csv

#loop through each AD group
foreach($group in $guids) {
    $group_name = Get-ADObject -identity $group.objectGUID -server myDomain
    $group_name = $group_name.Name

    #get list of users in current group
    $users = get-adgroupmember  -server myDomain -identity 
             $group.ObjectGUID | where {$_.objectclass -eq 'user'}

    #loop through each user of the current group
    foreach ($user in $users) {
        #get display name of current user
        $display_name = get-aduser -identity $user.objectGUID -server 
                        myDomain -properties DisplayName
        #build the current row
        $row =  ('"' + $display_name.DisplayName + '"' + ',' + '"' + 
                 $group_name + '"')
        add-content -path "C:\Path\to\output.csv"  -value $row
    }
}

Как я уже говорил выше, это обычно работает, но занимает много времени.

1 Ответ

0 голосов
/ 27 декабря 2018

Сбор данных в [PSCustomObject] и использование Export-Csv только один раз должны быть намного более эффективными.

## Q:\Test\2018\12\27\SO_53946702.ps1

$guids = Import-CSV .\ObjectGUIDs.csv
$CsvFile = "C:\Path\to\output.csv"
$Server = myDomain

$CsvData = foreach($group in $guids) {
    $GroupName = (Get-ADObject -identity $group.objectGUID -server $Server).Name

    #get list of users in current group
    $users = Get-ADgroupMember  -Server $Server -Identity $group.ObjectGUID |
              Where-Object ObjectClass -eq 'user'

    foreach ($user in $users) {
        [PSCustomObject]@{
            DisplayName = (Get-ADuser -Identity $user.objectGUID -server $Server -Properties DisplayName).DisplayName
            GroupName   = $GroupName
        }
    }
}
$CsvData | Export-Csv $CsvFile -NoTypeInformation
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...