Elencare tutti i gruppi e i relativi membri con PowerShell su Win2008r2


14

Sono nuovo di PowerShell, ma ho letto manuali e mi sono esercitato un po '. Il mio obiettivo è elencare tutti gli utenti in tutti i gruppi di sicurezza nel percorso specificato. Ho trovato il modo di farlo:

 get-adgroup -Filter * -SearchBase "OU=Groups,DC=corp,DC=ourcompany,DC=Com"  | %{Get-ADGroupMember $_.name} | ft name

Ma il problema è che non vedo il nome del gruppo. Tutto quello che ottengo è un gruppo di utenti. Sarebbe bello se qualcuno potesse dirmi come visualizzare il nome del gruppo prima che tutti i membri di questo gruppo vengano elencati. Grazie.


2
Se giochi con il cambio dopo la base di ricerca % { "GroupName: $($_.Name)"; "==========" ; Get-ADGroupMember $_ } | ft name, potresti ottenere anche quello che cerchi. La risposta di Ryan è ancora migliore, ma questa è una sola riga se la vuoi.
TheCleaner,

Grazie TheCleaner. Come ho detto, sono nuovo di PS, ma questi esempi aiutano davvero a capire.
Alec T

Anche il tuo esempio funziona alla grande!
Alec T

Risposte:


26

Gimme the codes! poteri, attiva!

$Groups = Get-ADGroup -Properties * -Filter * -SearchBase "OU=Groups,DC=corp,DC=ourcompany,DC=Com" 
Foreach($G In $Groups)
{
    Write-Host $G.Name
    Write-Host "-------------"
    $G.Members
}

Il punto è che basta prendere il tuo tempo e dividerlo in passaggi. So che è divertente provare a mettere tutto e il lavello della cucina in una fodera con Powershell, ma non è assolutamente necessario.

Alcune note:

  • Non è necessario Get-ADGroupMemberse si raccoglie la proprietà Members nel Get-ADGroupCmdlet iniziale . La cosa positiva di questo è che dimezza la quantità di chiamate che devi effettuare ad AD, il che dovrebbe rendere il tuo script più veloce e alleggerire il controller di dominio.

  • $ G.Members mostrerà tutti i membri del gruppo $ G ... in Powershell 3. In Powershell 2, potresti ancora aver bisogno di inserire un altro Foreach all'interno del Foreach per elencarlo attraverso i membri del gruppo. ( Yo dawg, ti ho sentito come dei loop ... )

  • Uso Write-Hostqui, che è disgustoso. Non dovresti mai usare davvero Write-Host. Invece, dovresti costruire e produrre oggetti, non testo, ma quello era un altro argomento ed ero troppo pigro per farlo per questa risposta.


10

Ecco una soluzione molto migliore. Questo metterà tutto in un csv a 3 colonne con nome gruppo, nome utente e nome account sam. Molto più facile capire in quale gruppo si trova qualcuno quando ci sono 400 utenti in un gruppo in quanto non è necessario scorrere.

Import-Module ActiveDirectory

$Groups = (Get-AdGroup -filter * | Where {$_.name -like "**"} | select name -ExpandProperty name)

$Table = @()

$Record = @{
  "Group Name" = ""
  "Name" = ""
  "Username" = ""
}


Foreach ($Group in $Groups) {

  $Arrayofmembers = Get-ADGroupMember -identity $Group -recursive | select name,samaccountname

  foreach ($Member in $Arrayofmembers) {
    $Record."Group Name" = $Group
    $Record."Name" = $Member.name
    $Record."UserName" = $Member.samaccountname
    $objRecord = New-Object PSObject -property $Record
    $Table += $objrecord

  }
}

$Table | export-csv "C:\temp\SecurityGroups.csv" -NoTypeInformation

Forse è possibile aggiungere 400 utenti in un gruppo e acquisire dati da file CSV o XLSX?
Kiquenet,

scusa per la mia ignoranza ma in che lingua è il tuo codice?
ScottC,

scusate il ritardo nei miei commenti, ma PowerShell era la lingua
Riley Carney

1

Ho dovuto aggiungere .name dopo $groupper farlo funzionare per me.

$Arrayofmembers = Get-ADGroupMember -identity $Group.name -recursive | select name,samaccountname

0

Se si verifica un Size Limitproblema con gruppi contenenti più di 5000 membri, è possibile modificare una riga come segue:

$Arrayofmembers = (Get-ADGroup $Group -Properties member).member | Get-ADUser -Properties *

0

Ecco uno script che esporta tutti i gruppi in un'unità organizzativa in un file separato per ciascun gruppo con il nome e la descrizione del gruppo. Se qualcuno lo vuole ...

$groups = Get-ADGroup -filter * -SearchBase "OU=XXX, DC=XX,DC=XX"
ForEach ($g in $groups) 
{
$path = "c:\scripts\" + $g.Name + ".csv"
Get-ADGroup -Identity $g.Name -Properties * | select name,description | Out-File $path -Append

$results = Get-ADGroupMember -Identity $g.Name -Recursive | Get-ADUser -Properties displayname, name 

ForEach ($r in $results){
New-Object PSObject -Property @{       

    DisplayName = $r.displayname | Out-File $path -Append
  }
}   
}
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.