Экспорт групп участников для пользователей из входного файла - PullRequest
0 голосов
/ 11 января 2019

У меня есть этот скрипт, который читает samaccountnames из файла и выводит имя пользователя с информацией о его членстве. Тем не менее, выходной файл показывает только последнюю запись. Кажется, мой код перезаписывает предыдущую запись. Что мне не хватает? Большое вам спасибо.

ForEach ($user in $(Get-Content -Path C:\MyScripts\UsersInput.csv)) 
{
    $username = Get-ADUser –Identity $user -Properties * 
    Get-ADPrincipalGroupMembership $user | select $username.DisplayName, name | 
    export-csv "C:\MyScripts\UsersAndTheirADGroups.csv" -NoTypeInformation  
}

Ответы [ 3 ]

0 голосов
/ 11 января 2019

Вы действительно переписываете код ForEach пользователя. Вы включили Export-Csv в ForEach. Вместо этого экспортируйте весь массив, который создает ForEach:

ForEach ($user in $(Get-Content -Path C:\MyScripts\UsersInput.csv)) 
{
    $username = Get-ADUser –Identity $user -Properties * 
    Get-ADPrincipalGroupMembership $user | select $username.DisplayName, name
} | export-csv "C:\MyScripts\UsersAndTheirADGroups.csv" -NoTypeInformation  
0 голосов
/ 11 января 2019

Вы читаете файл CSV, используя Get-Content. Это позволяет мне думать, что файл - это просто список пользователей SamAccountNames, каждый в отдельной строке. Нет заголовков.
Возможно, что-то вроде этого:

jdoe
jsmith

Если это так, прочитайте входной файл следующим образом:

$users = Get-Content -Path 'C:\MyScripts\UsersInput.csv'

Чтобы получить массив пользовательских SAMAccountnames.

Если , однако это правильный файл CSV с заголовками, который выглядит примерно так:

"SamAccountName","Email","More","Stuff"
"jdoe","john.doe@yourdomain.com","blah","blah"
"jsmith","jane.smith@yourdomain.com","blah","blah"

Затем вы должны использовать командлет Import-Csv, чтобы получить записи в качестве объектов и получить массив SamAccountNames из этого:

$users = Import-Csv -Path 'C:\MyScripts\UsersInput.csv' | Select-Object -ExpandProperty SamAccountName

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

Непроверенные

$result = foreach ($accountName in $users) {
    Get-ADUser –Identity $accountName -Properties DistinguishedName, DisplayName |
        Select-Object @{Name = 'User'; Expression = {$_.DisplayName}},  
                      @{Name = 'Groups'; Expression = { ( $_ | Get-ADPrincipalGroupMembership | Select-Object -ExpandProperty name) -join ', '}}
}
$result | Export-Csv "C:\MyScripts\UsersAndTheirADGroups.csv" -NoTypeInformation  
0 голосов
/ 11 января 2019

Export-Csv имеет параметр -append, так что вы можете использовать его. то есть он будет добавляться в CSV-файл с каждой итерацией цикла. Вы должны убедиться, что файл не существует, прежде чем запускать цикл, или он будет увеличиваться и увеличиваться при каждом запуске кода.

Другой способ добавить элементы в объект, а затем экспортировать их в конце. т.е. $ username + = Get-ADUser ......

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...