usuarios listar grupo exportar activos active powershell active-directory powershell-v2.0

grupo - listar usuarios active directory powershell



¿Cómo obtener todos los grupos de los que un usuario es miembro? (25)

Camino de la vieja escuela de CMD:

net user mst999 /domain

El cmdlet Get-ADGroupMember devuelve miembros de un grupo específico. ¿Hay un cmdlet o propiedad para obtener todos los grupos de los que un usuario en particular es miembro?

Get-ADGroupMember mi error: Get-Member debería ser Get-ADGroupMember .


Casi todas las soluciones anteriores utilizaron el módulo ActiveDirecotry , que podría no estar disponible de forma predeterminada en la mayoría de los casos.

Usé el siguiente método. Un poco indirecto, pero cumplió mi propósito.

Listar todos los grupos disponibles

Get-WmiObject -Class Win32_Group

Y luego enumere los grupos a los que pertenece el usuario

[System.Security.Principal.WindowsIdentity]::GetCurrent().Groups

La comparación se puede hacer a través de la verificación a través de los SIDs . Esto funciona para el usuario que ha iniciado sesión. Por favor, corríjame si estoy equivocado. Completamente nuevo para PowerShell, pero tuve que hacer esto para un compromiso de trabajo.


Con la entrada del usuario y el formato de salida elegante:

[CmdletBinding(SupportsShouldProcess=$True)] Param( [Parameter(Mandatory = $True)] [String]$UserName ) Import-Module ActiveDirectory If ($UserName) { $UserName = $UserName.ToUpper().Trim() $Res = (Get-ADPrincipalGroupMembership $UserName | Measure-Object).Count If ($Res -GT 0) { Write-Output "`n" Write-Output "$UserName AD Group Membership:" Write-Output "===========================================================" Get-ADPrincipalGroupMembership $UserName | Select-Object -Property Name, GroupScope, GroupCategory | Sort-Object -Property Name | FT -A } }


El siguiente funciona bien:

get-aduser $username -Properties memberof | select -expand memberof

Si tiene una lista de usuarios:

$list = ''administrator'',''testuser1'',''testuser2'' $list | ` %{ $user = $_; get-aduser $user -Properties memberof | ` select -expand memberof | ` %{new-object PSObject -property @{User=$user;Group=$_;}} ` }


Es solo una linea

(get-aduser joe.bloggs -properties *).memberof

final de :)


Escribí una función de PowerShell llamada Get-ADPrincipalGroupMembershipRecursive. Acepta el DSN de un usuario, computadora, grupo o cuenta de servicio. Recupera una lista inicial de grupos del atributo memberOf de la cuenta, luego revisa recursivamente las membresías de ese grupo. El código abreviado está debajo. El código fuente completo con comentarios se puede encontrar aquí .

function Get-ADPrincipalGroupMembershipRecursive( ) { Param( [string] $dsn, [array]$groups = @() ) $obj = Get-ADObject $dsn -Properties memberOf foreach( $groupDsn in $obj.memberOf ) { $tmpGrp = Get-ADObject $groupDsn -Properties memberOf if( ($groups | where { $_.DistinguishedName -eq $groupDsn }).Count -eq 0 ) { $groups += $tmpGrp $groups = Get-ADPrincipalGroupMembershipRecursive $groupDsn $groups } } return $groups } # Simple Example of how to use the function $username = Read-Host -Prompt "Enter a username" $groups = Get-ADPrincipalGroupMembershipRecursive (Get-ADUser $username).DistinguishedName $groups | Sort-Object -Property name | Format-Table


Esta es la forma más sencilla de obtener los nombres:

Get-ADPrincipalGroupMembership "YourUserName"

# Returns distinguishedName : CN=users,OU=test,DC=SomeWhere GroupCategory : Security GroupScope : Global name : testGroup objectClass : group objectGUID : 2130ed49-24c4-4a17-88e6-dd4477d15a4c SamAccountName : testGroup SID : S-1-5-21-2114067515-1964795913-1973001494-71628

Agregue una declaración de selección para recortar la respuesta o para obtener a cada usuario en una unidad organizativa en cada grupo del que es usuario:

foreach ($user in (get-aduser -SearchScope Subtree -SearchBase $oupath -filter * -Properties samaccountName, MemberOf | select samaccountName)){ Get-ADPrincipalGroupMembership $user.samaccountName | select name}


Get-ADPrincipalGroupMembership USERLOGON | seleccionar nombre


Get-ADPrincipalGroupMembership hará esto.

Get-ADPrincipalGroupMembership username | select name name ---- Domain Users Domain Computers Workstation Admins Company Users Company Developers AutomatedProcessingTeam


Get-Member no es para obtener la membresía grupal del usuario. Si desea obtener una lista de grupos a los que pertenece un usuario en el sistema local, puede hacerlo de la siguiente manera:

$query = "ASSOCIATORS OF {Win32_Account.Name=''DemoUser1'',Domain=''DomainName''} WHERE ResultRole=GroupComponent ResultClass=Win32_Account" Get-WMIObject -Query $query | Select Name

En la consulta anterior, reemplace DemoUser1 con el nombre de usuario que desee y DomainName con el nombre de su computadora local o el nombre de dominio.


Get-QADUser -SamAccountName ID de inicio de sesión | % {$ _. MemberOf} | Get-QADGroup | seleccionar nombre


No hay necesidad de largas secuencias de comandos cuando se trata de un simple trazador de líneas.

Comando QUEST

(Get-QADUser -Identity john -IncludedProperties MemberOf | Select-Object MemberOf).MemberOf

Comando MS AD

(GET-ADUSER –Identity john –Properties MemberOf | Select-Object MemberOf).MemberOf

Encuentro que el cmd de MS AD es más rápido, pero a algunas personas les gustan más las Quest.

Steve


No pude conseguir que lo siguiente funcione para un usuario en particular:

Get-ADPrincipalGroupMembership username

Lanzó un error que no estaba dispuesto a solucionar.

Sin embargo, presenté una solución diferente usando Get-ADUser. Me gusta un poco mejor porque si no conoces el nombre de la cuenta, puedes obtenerlo a partir de un comodín en el nombre real del usuario. Solo completa PartOfUsersName y lo guarda .

#Get the groups that list of users are the member of using a wildcard search [string]$UserNameLike = "*PartOfUsersName*" #Use * for wildcards here [array]$AccountNames = $(Get-ADUser -Filter {Name -like $UserNameLike}).SamAccountName ForEach ($AccountName In $AccountNames) { Write-Host "`nGETTING GROUPS FOR" $AccountName.ToUpper() ":" (Get-ADUser -Identity $AccountName -Properties MemberOf|select MemberOf).MemberOf| Get-ADGroup|select Name|sort name }

Grandes apoyos para schmeckendeugler y 8DH para llegar a esta solución. +1 a ambos.



Para obtenerlo recursivo, puede usar:

<# .SYNOPSIS Get all the groups that a user is MemberOf. .DESCRIPTION This script retrieves all the groups that a user is MemberOf in a recursive way. .PARAMETER SamAccountName The name of the user you want to check #> Param ( [String]$SamAccountName = ''test'', $DomainUsersGroup = ''CN=Domain Users,CN=Users,DC=domain,DC=net'' ) Function Get-ADMemberOf { Param ( [Parameter(ValueFromPipeline)] [PSObject[]]$Group, [String]$DomainUsersGroup = ''CN=Domain Users,CN=Users,DC=grouphc,DC=net'' ) Process { foreach ($G in $Group) { $G | Get-ADGroup | Select -ExpandProperty Name Get-ADGroup $G -Properties MemberOf| Select-Object Memberof | ForEach-Object { Get-ADMemberOf $_.Memberof } } } } $Groups = Get-ADUser $SamAccountName -Properties MemberOf | Select-Object -ExpandProperty MemberOf $Groups += $DomainUsersGroup $Groups | Get-ADMemberOf | Select -Unique | Sort-Object


Poniendo esto aquí para referencia futura. Estoy en medio de una migración de correo electrónico. Necesito saber cada cuenta de usuario y su respectiva membresía grupal, y también necesito conocer cada grupo y sus respectivos miembros.

Estoy usando el siguiente bloque de código para generar un archivo CSV para cada miembro del grupo de usuarios.

Get-ADUser -Filter * |` ForEach-Object { ` $FileName = $_.SamAccountName + ".csv" ; ` $FileName ; ` Get-ADPrincipalGroupMembership $_ | ` Select-Object -Property SamAccountName, name, GroupScope, GroupCategory | ` Sort-Object -Property SamAccountName | ` Export-Csv -Path $FileName -Encoding ASCII ; ` }

El proceso de exportación para los grupos y sus respectivos miembros fue un poco intrincado, pero el siguiente funciona. Los nombres de archivo de salida incluyen el tipo de grupo. Por lo tanto, los grupos de distribución de correos electrónicos que necesito son / deberían ser los grupos de Distribución Universal y Global. Debería poder eliminar o mover los archivos TXT resultantes que no necesito.

Get-ADGroup -Filter * | ` Select-Object -Property Name, DistinguishedName, GroupScope, GroupCategory | ` Sort-Object -Property GroupScope, GroupCategory, Name | ` Export-Csv -Path ADGroupsNew.csv -Encoding ASCII $MyCSV = Import-Csv -Path ./ADGroupsNew.csv -Encoding ASCII $MyCSV | ` ForEach-Object { ` $FN = $_.GroupScope + ", " + $_.GroupCategory + ", " + $_.Name + ".txt" ; ` $FN ; ` Get-ADGroupMember -Identity $_.DistinguishedName | ` Out-File -FilePath $FN -Encoding ASCII ; $FN=""; ` }


Primero, importe el módulo activedirectory:

import-module activedirectory

Luego emita este comando:

Get-ADGroupMember -Identity $group | foreach-object { Write-Host $_.SamAccountName }

Esto mostrará los miembros del grupo especificado.


Si no tiene privilegios para consultar a otros grupos miembros, tiene el privilegio de consultar a los miembros del grupo. puede hacer lo siguiente para crear un mapa de qué usuario tiene acceso a qué grupos.

$groups = get-adgroup -Filter * | sort name | select Name $users = @{} foreach($group in $groups) { $groupUsers = @() $groupUsers = Get-ADGroupMember -Identity $group.Name | Select-Object SamAccountName $groupUsers | % { if(!$users.ContainsKey($_.SamAccountName)){ $users[$_.SamAccountName] = @() } ($users[$_.SamAccountName]) += ($group.Name) } }


Una alternativa más concisa a la publicada por Canoas, para obtener membresía grupal para el usuario que actualmente está conectado.

Encontré este método en esta publicación de blog: http://www.travisrunyard.com/2013/03/26/auto-create-outlook-mapi-user-profiles/

([ADSISEARCHER]"samaccountname=$($env:USERNAME)").Findone().Properties.memberof

Una versión aún mejor que usa una expresión regular para quitar la máscara de LDAP y deja solo los nombres de los grupos:

([ADSISEARCHER]"samaccountname=$($env:USERNAME)").Findone().Properties.memberof -replace ''^CN=([^,]+).+$'',''$1''

Se pueden encontrar más detalles sobre el uso del acelerador de tipo [ADSISEARCHER] en el blog del tipo scripting: http://blogs.technet.com/b/heyscriptingguy/archive/2010/08/24/use-the-powershell-adsisearcher-type-accelerator-to-search-active-directory.aspx


Una sola línea, sin módulos necesarios, usa el usuario registrado actual:

(New-Object System.DirectoryServices.DirectorySearcher("(&(objectCategory=User)(samAccountName=$($env:username)))")).FindOne().GetDirectoryEntry().memberOf

Qudos de este artículo de vbs / powershell: http://technet.microsoft.com/en-us/library/ff730963.aspx


Utilizar:

Get-ADPrincipalGroupMembership username | select name | export-CSV username.csv

Esto canaliza la salida del comando a un archivo CSV .


Get-Member es un cmdlet para listar los miembros de un object .NET. Esto no tiene nada que ver con la membresía del usuario / grupo. Puede obtener la membresía del grupo del usuario actual así:

PS> [System.Security.Principal.WindowsIdentity]::GetCurrent().Groups | Format-Table -auto BinaryLength AccountDomainSid Value ------------ ---------------- ----- 28 S-1-5-21-... S-1-5-21-2229937839-1383249143-3977914998-513 12 S-1-1-0 28 S-1-5-21-... S-1-5-21-2229937839-1383249143-3977914998-1010 28 S-1-5-21-... S-1-5-21-2229937839-1383249143-3977914998-1003 16 S-1-5-32-545 ...

Si necesita acceder a la información de grupo de usuarios arbitrarios, la sugerencia de @tiagoinu de usar los cmdlets de Quest AD es una mejor manera de hacerlo.


Get-ADUser -Filter { memberOf -RecursiveMatch "CN=Administrators,CN=Builtin,DC=Fabrikam,DC=com" } -SearchBase "CN=Administrator,CN=Users,DC=Fabrikam,DC=com" -SearchScope Base ## NOTE: The above command will return the user object (Administrator in this case) if it finds a match recursively in memberOf attribute.


(GET-ADUSER –Identity USERNAME –Properties MemberOf | Select-Object MemberOf).MemberOf


Import-Module ActiveDirectory Get-ADUser -SearchBase "OU=Users,DC=domain,DC=local" -Filter * | foreach-object { write-host "User:" $_.Name -foreground green Get-ADPrincipalGroupMembership $_.SamAccountName | foreach-object { write-host "Member Of:" $_.name } }

Cambie el valor de -SearchBase para reflejar la OU que necesita para enumerar a los usuarios desde :)

Esto mostrará una lista de todos los usuarios en esa unidad organizativa y le mostrará a qué grupos pertenecen.