2014-01-20 4 views
8

Я довольно новый пользователь PS ... Ищете некоторую помощь с скриптом powershell для получения списка пользователей безопасности, членом которых является пользователь.Как указать членство в группе AD для пользователей AD, используя список входных данных?

Чтобы описать то, что мне нужно:

  • У меня есть список ввода (текстовый файл) со многими пользователями (samaccountnames). Каждое имя находится на новой строке.
  • Мне нужен сценарий для поиска этих имен в AD - весь лес, а не только один домен
  • вывод должен выглядеть как «samaccountname» и список групп, в которых эта учетная запись является членом одной строки, поэтому я могу сортировать ее первенствует

Это сценарий, у меня есть:

$users = Get-Content C:\users.txt 

ForEach ($User in $users) { 
    $getmembership = Get-ADUser $User.Users -Properties MemberOf | Select -ExpandProperty memberof 
    $getmembership | Out-File -Append c:\membership.txt 
} 

но он бросает мне ошибку:

Get-ADUser : Cannot validate argument on parameter 'Identity'. The argument is null. Supply a non-null argument and try the command again. 
At line:4 char:28 
+ $getmembership = Get-ADUser <<<< $User.Users -Properties MemberOf | Select -ExpandProperty memberof 
    + CategoryInfo   : InvalidData: (:) [Get-ADUser], ParameterBindingValidationException 
    + FullyQualifiedErrorId : ParameterArgumentValidationError,Microsoft.ActiveDirectory.Management.Commands.GetADUser 

В любом случае, этот скрипт не будет искать весь лес. Список ввода

Пример:

username1 
username2 
username3 
username4... etc 

Пример вывода списка

username1;group1;group2;group3 
username2;group1;group2;group3;group4... etc or something similar 

Любая помощь будет принята с благодарностью.

ответ

11

Первый: В настоящий момент переменная $User не имеет свойства .Users. В вашем коде $User просто представляет одну строку («текущую» строку в цикле foreach) из текстового файла.

$getmembership = Get-ADUser $User -Properties MemberOf | Select -ExpandProperty memberof 

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

  1. запросов леса для списка доменов
  2. Вызов Get-ADUser для каждого домена (вы, возможно, придется указать альтернативные учетные данные с помощью -Credential параметра

в-третьих, чтобы получить список групп, пользователь является членом:

$User = Get-ADUser -Identity trevor -Properties *; 
$GroupMembership = ($user.memberof | % { (Get-ADGroup $_).Name; }) -join ';'; 

# Result: 
Orchestrator Users Group;ConfigMgr Administrators;Service Manager Admins;Domain Admins;Schema Admins 

В-четвертых: Для того, чтобы получить окончательный, желаемый формат строки, просто добавьте $User.Name, точка с запятой, и $GroupMembership строку вместе:

$User.SamAccountName + ';' + $GroupMembership; 
+1

Большое спасибо, это было полезно :) –

+0

Хорошая сделка! Рад, что ты нашел это полезным. Не могли бы вы пометить ответ в зависимости от ситуации? –

6
Get-ADPrincipalGroupMembership username | select name 

Понял из другого ответа, но скрипт работает магия.:)

1

Или добавить «имя сортировки» в список в алфавитном порядке

Get-ADPrincipalGroupMembership username | select name | sort name 
+2

Что такое «выше»? http://stackoverflow.com/help/how-to-answer – freshbm

+0

Мне это нравится, но я не могу заставить его работать, если я использую -ExpandProperty –

0

Ниже код будет возвращать членство в группе, используя имя пользователя SAMAccountName. Вы можете изменить его, чтобы получить данные из файла или изменить запрос, чтобы получить учетные записи с не истекающими паролями и т.д.

$location = "c:\temp\Peace2.txt" 
$users = (get-aduser -filter *).samaccountname 
$le = $users.length 
for($i = 0; $i -lt $le; $i++){ 
    $output = (get-aduser $users[$i] | Get-ADPrincipalGroupMembership).name 
    $users[$i] + " " + $output 
    $z = $users[$i] + " " + $output 
    add-content $location $z 
} 

Пример вывод:

 
Administrator Domain Users Administrators Schema Admins Enterprise Admins Domain Admins Group Policy Creator Owners 
Guest Domain Guests Guests 
krbtgt Domain Users Denied RODC Password Replication Group 
Redacted Domain Users CompanyUsers Production 
Redacted Domain Users CompanyUsers Production 
Redacted Domain Users CompanyUsers Production 
-2

Все в одной строке:

get-aduser -filter * -Properties memberof | select name, @{ l="GroupMembership"; e={$_.memberof -join ";" } } | export-csv membership.csv 
Смежные вопросы