Como listar os membros do grupo de AD para usuários de AD usando a lista de entrada?
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
$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.
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:
- Query forest para a lista de domínios
- 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;
Get-ADPrincipalGroupMembership username | select name
Obtive-o de outra resposta, mas o guião é mágico. :)
Ou adicionar" sort name " para listar alfabeticamente
Get-ADPrincipalGroupMembership username | select name | sort name
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
Tudo numa linha:
get-aduser -filter * -Properties memberof | select name, @{ l="GroupMembership"; e={$_.memberof -join ";" } } | export-csv membership.csv