14 votos

Lista de Todos los Grupos y Sus Miembros con PowerShell en Win2008r2

Soy nuevo en powershell, pero he estado leyendo los manuales y practicado un poco. Mi objetivo es hacer una Lista de todos los usuarios en todos los Grupos de Seguridad bajo la ruta de acceso especificada. He encontrado la manera de hacerlo:

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

Pero el problema es que no veo el nombre del grupo. Todo lo que veo es un montón de usuarios. Sería bueno si alguien me pudiera decir cómo mostrar el nombre del grupo antes de que todos los miembros de este grupo para obtener la lista. Gracias.

26voto

Ryan Ries Puntos 33449

Gimme the codes! poderes, activar!

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

El punto es, simplemente tome su tiempo y dividirlo en pasos. Sé que es divertido para tratar de conseguir todo y el fregadero de la cocina para que quepa en una sola línea con Powershell, pero no es necesario.

Un par de notas:

  • Usted no necesita hacer Get-ADGroupMember si usted recoge a los Miembros de propiedad en la inicial Get-ADGroup Cmdlet. Lo bueno de esto es que se reduce a la mitad la cantidad de llamadas que tiene que hacer para AD, lo que debería hacer el script se ejecute más rápido y facilita la carga en el controlador de dominio.

  • $G. los Miembros mostrará todos los miembros del grupo $G... en Powershell 3. En Powershell 2, usted todavía podría necesitar para poner otro Foreach dentro del Foreach no a enumerar a través de los miembros del grupo. (Yo dawg, he oído que te gusta bucles...)

  • Yo uso Write-Host aquí, que es bruto. Usted nunca debe utilizar realmente Write-Host. En su lugar, usted debe ser la generación y emisión de los objetos, no de texto, pero eso era otro tema y yo era demasiado perezoso para hacer que para esta respuesta.

10voto

Joseph Alves Puntos 21

Aquí es una solución mucho mejor. Esto va a poner todo en la columna 3 csv con el nombre del grupo, nombre de usuario y nombre de cuenta sam. Mucho más fácil averiguar a qué grupo a alguien es cuando hay 400 usuarios en un grupo, ya que usted no tenga que desplazarse.

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

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by: