En esta entrada voy a mostraros un script con el que podéis obtener todos los miembros que componen los distintos grupos de distribución existentes en Office 365.
El proceso es muy sencillo, simplemente tenéis que abrir un bloc de notas, copiar el script que os voy a mostrar a continuación y guardar el archivo con el nombre que queráis con extensión ps1
Es importante que este fichero los guardéis en una carpeta donde tengáis permisos de escritura. Por defecto el fichero CSV resultante se guardará en la misma carpeta donde se encuentre el script.
Si queréis cambiar la ubicación donde se generará el CSV simplemente tendréis que establecer la ruta completa modificando el valor de la variable $OutputFile
#Parametros de Entrada #Este script acepta 2 parametros opcionales como son el login y la contrasena del usuario administrador que utilizaremos para conectarnos a nuestro tenant Param( [Parameter(Position=0, Mandatory=$false, ValueFromPipeline=$true)] [string] $Office365Username, [Parameter(Position=1, Mandatory=$false, ValueFromPipeline=$true)] [string] $Office365Password ) #En esta variable pondremos la ruta o el nombre del fichero CSV resultante de la consulta #En el caso de no especificar una ruta el fichero se genera en la misma ruta donde se encuentre este script $OutputFile = "Listado_Miembros_Grupos.csv" $arrDLMembers = @{} #Eliminamos las sesiones existentes de PowerShell en caso de que existan Get-PSSession | Remove-PSSession #Sino hemos pasado por parametros las credenciales para conectar al tenant se nos requira if (([string]::IsNullOrEmpty($Office365Username) -eq $false) -and ([string]::IsNullOrEmpty($Office365Password) -eq $false)) { $SecureOffice365Password = ConvertTo-SecureString -AsPlainText $Office365Password -Force $Office365Credentials = New-Object System.Management.Automation.PSCredential $Office365Username, $SecureOffice365Password } else { $Office365Credentials = Get-Credential } #Creamos la sesion con nuestro Tenant $Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri https://outlook.office365.com/powershell-liveid/ -Credential $Office365credentials -Authentication Basic –AllowRedirection #Importamos la sesion Import-PSSession $Session -AllowClobber | Out-Null #Preparamos las cabeceras de nuestro fichero CSV Out-File -FilePath $OutputFile -InputObject "Distribution Group DisplayName,Distribution Group Email,Member DisplayName, Member Email, Member Type" -Encoding UTF8 #Obtenemos todos los grupos de distribucion existente en Office 365 $objDistributionGroups = Get-DistributionGroup -ResultSize Unlimited #Recorremos uno a uno cada grupo para ir obteniendo los usuarios Foreach ($objDistributionGroup in $objDistributionGroups) { write-host "Procesando $($objDistributionGroup.DisplayName)..." #Obtenemos los miembros del grupo $objDGMembers = Get-DistributionGroupMember -Identity $($objDistributionGroup.PrimarySmtpAddress) write-host "Encontrados $($objDGMembers.Count) miembros..." #Recorremos cada uno de los miembros para obtener su informacion Foreach ($objMember in $objDGMembers) { Out-File -FilePath $OutputFile -InputObject "$($objDistributionGroup.DisplayName),$($objDistributionGroup.PrimarySMTPAddress),$($objMember.DisplayName),$($objMember.PrimarySMTPAddress),$($objMember.RecipientType)" -Encoding UTF8 -append write-host "`t$($objDistributionGroup.DisplayName),$($objDistributionGroup.PrimarySMTPAddress),$($objMember.DisplayName),$($objMember.PrimarySMTPAddress),$($objMember.RecipientType)" } } #Cerramos la conexion con el tenant de Office 365 Get-PSSession | Remove-PSSession
Una vez tenemos guardado nuestro script, lo ejecutaremos haciendo doble clic sobre él.
A continuación nos solicitará las credenciales de una cuenta con permisos para acceder a nuestro tenant de Office 365, introducimos las credenciales y pulsamos en Aceptar.

Y listo ya sólo tendremos que esperar a que se genere nuestro fichero CSV el cual contendrá todos los grupos de distribución que tengamos en Office 365 con cada uno de los miembros que lo forman.
Espero os sea de utilidad.
Hola Sergio si requiero solo extraer información de un usuario en particular? (grupos de distribución y grupos de seguridad al cual pertenece) es posible??
desde ya muchas gracias
Hola Norman,
Es posible pero habría que crear el script y ahora mismo no lo tengo hecho, me lo apunto para una futura entrada. Mientras tanto puedes realizar la exportación tal y como indico en la entrada y una vez lo tengas todo en Excel aplicar un filtro de Excel sobre la columna donde se encuentra los usuarios para que sólo te muestre las filas donde se encuentre.
Saludos.
el script no me funciona, lo puedo ejecutar en la misma venta de powershell?
Hola Ezequiel,
Lo he probado y el script funciona correctamente, ¿qué error te da?.
hola sergio gracias por tu pronta respuesta, este es el error
Import-PSSession : No se pueden cargar los archivos porque la ejecución de scripts está deshabilitada en este
sistema. Proporcione un certificado válido con el que firmar los archivos.
En línea: 33 Carácter: 1
+ Import-PSSession $Session -AllowClobber | Out-Null
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (:) [Import-PSSession], PSInvalidOperationException
+ FullyQualifiedErrorId : InvalidOperation,Microsoft.PowerShell.Commands.ImportPSSessionCommand
Get-DistributionGroup : El término ‘Get-DistributionGroup’ no se reconoce como nombre de un cmdlet, función, archivo
de script o programa ejecutable. Compruebe si escribió correctamente el nombre o, si incluyó una ruta de acceso,
compruebe que dicha ruta es correcta e inténtelo de nuevo.
En línea: 39 Carácter: 26
+ $objDistributionGroups = Get-DistributionGroup -ResultSize Unlimited
+ ~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : ObjectNotFound: (Get-DistributionGroup:String) [], CommandNotFoundException
+ FullyQualifiedErrorId : CommandNotFoundException
Hola Ezequiel,
Por el log que me pones veo varios errores:
1º Tienes deshabilitada la ejecución de script por lo que deberías habilitarla para ello en este enlace puede ver una entrada de blog donde explico como hacerlo. Una vez habilitado prueba a ejecutar nuevamente el script antes de hacer el paso 2 ya que muchas veces en Powershell cuando hay un fallo ya no te reconoce nada más, sino te funcionará entonces sigue con el paso 2.
2º Parece que te falta instalar en PowerShell los paquetes necesarios para conectar con Exchange Online de Office 365. Te dejo el siguiente enlace de Microsoft donde puedes descargar e instalar el paquete que creo te hace falta.
Espero con se resuelvan tus problemas.
Saludos.
me quedo perfecto habilitando la ejecución del script, gracias por tus respuestas
Me alegro te haya funcionado.
Saludos.
Buenas Tardes ,
amigo realizo todos los pasos y me da el siguiente mensaje ,sabra a que se debe y como corregirlo.
ANEXO DETALLES DEL ERROR
ADVERTENCIA: Algunos nombres de comando importados del módulo ‘tmp_rorxsudc.qmo’ incluyen verbos no aprobados que
podrían dificultar su reconocimiento. Para encontrar los comandos con verbos no aprobados, vuelva a ejecutar el comando
Import-Module con el parámetro Verbose. Para obtener una lista de verbos aprobados, escriba Get-Verb.
Hola Freddy,
¿Podría ejecutar el comando Import-Module con el parámetro Verbose para ver que comandos son los que no te reconoce?.
Saludos.
me trae el .csv pero vacio, porque ocurrirá eso
Hola Ezequiel,
No sabría decirte, lo único que se me ocurre es que sea un problema de permisos pero sin verlos es difícil conocer la causa.
Saludos.
Hola, muy bueno el script que haz compartido. ¿Tienes alguno similar pero que obtengas los miembros de los grupos de 365?
Hola Mayra,
Ahora mismo no tengo ninguna entrada para obtener exactamente lo que necesitas, no obstante, me lo apunto para hacerla proximamente.
Saludos.
Hola estoy ejecutando el script me aparece este error:
New-PSSession : [outlook.office365.com] Error de conexión al servidor remoto outlook.office365.com. Mensaje de error:
Acceso denegado. Para obtener más información, consulte el tema de la Ayuda about_Remote_Troubleshooting.
En C:\Users\BryanCamiloBeltránCa\Downloads\Export_member_DistributionGroup.ps1: 46 Carácter: 14
+ … PSSession = New-PSSession -ConfigurationName Microsoft.Exchange -Conn …
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : OpenError: (System.Manageme….RemoteRunspace:RemoteRunspace) [New-PSSession], PSRemotin
gTransportException
+ FullyQualifiedErrorId : AccessDenied,PSSessionOpenFailed
Import-PSSession : No se puede validar el argumento del parámetro ‘Session’. El argumento es null. Proporcione un
valor válido para el argumento e intente ejecutar el comando de nuevo.
En C:\Users\BryanCamiloBeltránCa\Downloads\Export_member_DistributionGroup.ps1: 47 Carácter: 18
+ Import-PSSession $PSSession
+ ~~~~~~~~~~
+ CategoryInfo : InvalidData: (:) [Import-PSSession], ParameterBindingValidationException
+ FullyQualifiedErrorId : ParameterArgumentValidationError,Microsoft.PowerShell.Commands.ImportPSSessionCommand
System.Management.Automation.CommandNotFoundException: El término ‘Get-UnifiedGroup’ no se reconoce como nombre de un cmdlet, función, archivo de script o programa ejecutable. Compruebe si escribió correctamente el nombre o, si incluyó una ruta de acceso, compruebe que dicha ruta es correcta e inténtelo de nuevo.
en System.Management.Automation.ExceptionHandlingOps.CheckActionPreference(FunctionContext funcContext, Exception exception)
en System.Management.Automation.Interpreter.ActionCallInstruction`2.Run(InterpretedFrame frame)
en System.Management.Automation.Interpreter.EnterTryCatchFinallyInstruction.Run(InterpretedFrame frame)
en System.Management.Automation.Interpreter.EnterTryCatchFinallyInstruction.Run(InterpretedFrame frame)
Hola Edward,
Parece un problema de permisos del usuarios que estás utilizando para realizar la conexión, revísalo porque debe faltarle algún tipo de permiso a nivel de Exchange a ese usuario.
Saludos.
Excelente, muchísimas gracias!