Como listar os membros do grupo de AD para usuários de AD usando a lista de entrada?

Sou um novo utilizador de PS... À procura de alguma assistência com um script powershell para obter a lista de Usuários de grupos de segurança é membro.

para descrever o que eu preciso:

  • eu tenho a lista de entrada (ficheiro txt) com muitos utilizadores (samaccountnames). Todos os nomes estão numa nova linha.
  • Preciso do guião para procurar estes nomes em toda a floresta, e não apenas num único domínio.
  • o resultado deve parecer o "samaccountname" e a lista de grupos de que esta conta é membro num só linha, para que eu possa ordená-la no excel
Este é o guião que eu tenho.
$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 
}
Mas dá-me um erro.
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
De qualquer forma, este guião não Revistaria toda a floresta.

Lista de entrada de amostras:

username1
username2
username3
username4... etc

Lista de saída da amostra

username1;group1;group2;group3
username2;group1;group2;group3;group4... etc or something similar
Qualquer ajuda seria muito apreciada.

Author: Peter Hall, 2014-01-20

5 answers

Primeiro: tal como está actualmente, a variável $User não tem uma propriedade .Users. Em seu código, $User simplesmente representa uma linha (a linha "atual" no laço foreach) do arquivo de texto.

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

Em segundo lugar, não creio que possa questionar uma floresta inteira com um comando. Você terá que quebrá-lo em pedaços menores:

  1. Query forest para a lista de domínios
  2. chamada Get-ADUser para cada domínio (poderá ter de especificar credenciais alternativas através do parâmetro -Credential

Em Terceiro Lugar , para obter uma lista de grupos de que um utilizador é membro:

$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

Em quarto lugar: para obter o formato final, desejado, basta adicionar o $User.Name, um ponto-e-vírgula, e a sequência $GroupMembership juntos:

$User.SamAccountName + ';' + $GroupMembership;
 11
Author: Trevor Sullivan, 2014-01-20 16:24:01
Get-ADPrincipalGroupMembership username | select name
Obtive-o de outra resposta, mas o guião é mágico. :)
 7
Author: genius_monkey, 2014-12-12 10:43:33

Ou adicionar" sort name " para listar alfabeticamente

Get-ADPrincipalGroupMembership username | select name | sort name
 1
Author: nilz76, 2015-09-07 12:59:27

O código abaixo irá devolver os membros do grupo do utilizador usando o samaccountname. Você pode modificá-lo para obter dados de um arquivo ou alterar a consulta para obter contas com senhas não expirantes etc

$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
}

Saída Da Amostra:

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
 0
Author: notforsale, 2017-06-30 13:41:23

Tudo numa linha:

get-aduser -filter * -Properties memberof | select name, @{ l="GroupMembership"; e={$_.memberof  -join ";"  } } | export-csv membership.csv
 -2
Author: Frank, 2017-06-30 13:40:34