Obtenga AzureADUser: cómo encontrar usuarios de Azure AD con PowerShell
Al igual que con Active Directory local, podemos administrar a nuestros usuarios en Azure AD con PowerShell. Para ello, necesitaremos utilizar el cmdlet Get AzureADUser en Powershell. Este cmdlet forma parte del módulo PowerShell AzureAD.
Cuando utiliza Microsoft 365, sus usuarios en realidad se almacenan en Azure Active Directory (Azure AD). Puede administrarlos a través del Portal de Azure o del Centro de administración de Microsoft 365, pero PowerShell es mucho más rápido. Nos permite buscar y exportar rápidamente información del usuario.
En este artículo, veremos el cmdlet Get AzureADUser. Daré algunos ejemplos útiles para buscar y exportar información del usuario. Y al final del artículo, tengo un script completo para exportar sus usuarios de Azure AD.
Nota
El módulo Azure AD dejará de funcionar a finales de 2022. Tendremos que cambiar al SDK de Microsoft Graph para PowerShell. Lea este artículo para obtener y exportar su usuario de Azure AD con el cmdlet Get-MgUser.
Encontrar usuarios de Azure AD con Get-AzureAD en PowerShell
Antes de comenzar, asegúrese de haber instalado el módulo Azure AD.
El cmdlet Get-AzureADUser permite buscar y extraer cuentas de usuario de Azure Active Directory. El cmdlet sólo viene con un par de parámetros que podemos usar:
- Filtro : recuperar varios objetos según una consulta de oDate v3
- ObjectId: devuelve un usuario específico según UPN u ObjectID
- SearchString : obtiene todos los usuarios que coinciden con la cadena de búsqueda.
- Todos: recuperar todos los resultados
- Arriba : recuperar solo la cantidad especificada
Consejo
De forma predeterminada, el cmdlet Get-AzureADUser solo devuelve 100 registros. En el parámetro -all $true para obtener todos los resultados
Para buscar un único usuario en Azure AD, simplemente podemos usar ObjectID, que acepta UserPrincipalName como valor.
Get-AzureADUser -ObjectId adelev@lazydev.onmicrosoft.comDe forma predeterminada, el cmdlet Get-AzureADUser solo devuelve cuatro campos. Si desea ver todas las propiedades del usuario, simplemente puede agregar select * detrás de add:
Get-AzureADUser -ObjectId adelev@lazydev.onmicrosoft.com | select *Explicaré más sobre las propiedades más adelante en este artículo.
Usando SearchString en AzureADUser
El parámetro searchString es interesante. Según la documentación, el parámetro de cadena de búsqueda solo busca los primeros caracteres en DisplayName o UserPrincipalName.
Pero al probar el cmdlet, noté que busca en muchos más campos:
- UserPrincipalName: primera parte de la cadena
- DisplayName: primera parte de la cadena
- Título del puesto: coincidencia exacta
- Departamento : coincidencia exacta
- Ciudad : coincidencia exacta
- Estado : coincidencia exacta
- País: coincidencia exacta
Por lo tanto, el parámetro searchString se puede utilizar para buscar el nombre completo del usuario o la primera parte del nombre. Para los demás campos, deberá buscar el valor exacto.
A continuación verá una captura de pantalla de uno de mis usuarios en mi inquilino de desarrollo. He cambiado el nombre de los campos de nombre y apellido del usuario. Además, tenga en cuenta el nombre del departamento que hice único.
Ahora vamos a buscar al usuario Alex Wilber de todas las formas posibles con el cmdlet get-AzureADUsers searchString.
Primero, buscamos en la primera parte del nombre para mostrar:
Get-AzureADUser -SearchString "Alex"
ObjectId DisplayName UserPrincipalName UserType
-------- ----------- ----- --------
449d2fd4-8165-415f-b4f1- Alex Wilber AlexW@lazydev.onmicrosoft.com MemberSi intentáramos buscar por el nombre "Alexed" o el apellido "Wilbers", la cadena de búsqueda no funcionará:
# Search on Firstname
Get-AzureADUser -SearchString "Alexed"
---
# No results
# Search on Lastname
Get-AzureADUser -SearchString "Wilber"
---
# No resultsUsando searchString en otros campos
Todos los demás campos deben coincidir exactamente. El título profesional de Alex es Asistente de marketing. Si solo buscáramos la primera parte del título del trabajo “marketing”, entonces no obtendremos el resultado esperado:
Get-AzureADUser -SearchString "Marketing" | Select DisplayName,UserPrincipalName,jobtitle,department
DisplayName UserPrincipalName JobTitle Department
----------- ----------------- -------- ----------
Megan Bowen MeganB@lazydev.onmicrosoft.com recruiter MarketingMegan Bowen regresa porque trabaja en el departamento de “Marketing”. Al buscar el título completo del trabajo de Alex, obtenemos el resultado esperado:
Get-AzureADUser -SearchString "Marketing Assistant" | Select DisplayName,UserPrincipalName,jobtitle,department
DisplayName UserPrincipalName JobTitle Department
----------- ----------------- -------- ----------
Alex Wilber AlexW@lazydev.onmicrosoft.com Marketing Assistant MarketingDepartmentPodemos utilizar el mismo principio para los otros campos, Ciudad, Estado y País.
Obtenga el filtro AzureADUser
Por lo tanto, el parámetro searchString es excelente para encontrar rápidamente un usuario de Azure AD por su nombre, pero para otros datos, no es realmente preciso. Una forma más confiable de encontrar usuarios de AzureAD es usar el parámetro -filter.
La consulta de filtro se basa en la declaración de filtro de oDate v3, que puede ser un poco difícil de lograr cuando no estás acostumbrado. Personalmente, creo que es más fácil trabajar con el lenguaje de expresión de PowerShell, que utiliza el cmdlet Get-ADUser.
Lo complicado de la consulta Data v3 es que no todos los operadores son compatibles con todos los campos. Por ejemplo, podemos buscar a todos los usuarios con el puesto de trabajo “Asistente de marketing”.
Get-AzureADUser -Filter "jobtitle eq 'Marketing Assistant'"
Esto hará que todos los usuarios cuyo puesto de trabajo sea igual a "Asistente de marketing". Pero lo que esperaría es que también pudiéramos usar ne (no igual) para obtener todos los usuarios que no sean Marketing Assistant.
Get-AzureADUser -Filter "jobtitle ne 'Marketing Assistant'"Pero ese operador no es compatible. Por lo tanto, por el momento, solo los siguientes operadores son compatibles con el parámetro de filtro Obtener AzureADUser:
| Operator | Description | Example |
|---|---|---|
| eq | Equals to | jobtitle eq ‘Marketing Assistant’ |
| and | And | jobtitle eq ‘Recruiter’ and jobtitle eq ‘hr’ |
| or | Or | jobtitle eq ‘Recruiter’ or jobtitle eq ‘hr’ |
| startswith | String starts with | startswith(jobtitle,’recr’) |
Ejemplos de filtros Get-AzureADUser
Entonces, echemos un vistazo a un par de ejemplos sobre el uso del parámetro de filtro en el cmdlet Get-AzureADUser:
Filtrar por nombre completo
Get-AzureADUser -Filter "DisplayName eq 'Adele Vance'"Filtrar por apellido
Get-AzureADUser -Filter "Surname eq 'Vance'"Buscar en la primera parte del nombre
Get-AzureADUser -Filter "startswith(DisplayName,'Ade')"Filtrar por tipo de usuario
Tenga en cuenta que agregué el parámetro -all aquí porque esperamos más de 100 resultados.
# Find all users
Get-AzureADUser -Filter "UserType eq 'Member'" -All $true
# Find all guests
Get-AzureADUser -Filter "UserType eq 'Guest'" -All $trueObtener cuentas de Azure AD deshabilitadas
Tenga en cuenta que agregué el parámetro -all aquí porque esperamos más de 100 resultados.
Get-AzureADUser -Filter "accountEnabled eq false" -All $trueUsar múltiples condiciones
Get-AzureADUser -Filter "department eq 'Marketing' and jobtitle eq 'Manager'"Encontrar usuarios de Azure AD según otros campos
Cuando se utiliza el parámetro -filter o -searchstring, la búsqueda se realiza en el servidor, que solo devuelve los resultados filtrados. Otra opción es solicitar primero a todos los usuarios de Azure AD y luego realizar el filtrado localmente en PowerShell.
Por ejemplo, cuando queramos buscar parte del nombre de usuario podríamos hacer lo siguiente:
Get-AzureADUser -All $true | Where-Object {$_.DisplayName -like "*vanc*"}Puede usar esto en todos los datos que devuelve el cmdlet Get-AzureADUser y esto también nos permite usar operadores no iguales:
Get-AzureADUser -All $true | Where-Object {$_.jobtitle -ne "Marketing Assistant"} | ftObtenga AzureADUser basado en OU
También podemos utilizar este principio para obtener solo los usuarios de una unidad organizativa específica. El nombre distinguido de la unidad organizativa se almacena en la propiedad de extensión onPremisesDistiownedName del resultado de Get-AzureADUser.
Para filtrar los usuarios en OU, primero obtenemos todos los usuarios y luego seleccionamos solo los usuarios cuyo nombre distinguido coincida con una expresión similar:
# Get all users from the OU Test-Users:
Get-AzureADUser -All $true | Where-Object {$_.ExtensionProperty.onPremisesDistinguishedName -like "*OU=Test-Users*"}Obtener propiedades de AzureADUser
De forma predeterminada, el cmdlet Usuario de AzureAD solo muestra cuatro campos del usuario, lo que no nos brinda mucha información. Pero hay mucha más información sobre el usuario que realmente regresó. Si selecciona un solo usuario y utiliza la salida de la lista de formato, verá todos los datos del usuario.
Get-AzureADUser -ObjectId alexw@lazydev.onmicrosoft.com | flSimplemente puede seleccionar los campos que necesita colocando el cmdlet de selección detrás de él:
Get-AzureADUser -ObjectId alexw@lazydev.onmicrosoft.com | Select DisplayName, Jobtitle, Mail, DepartmentExportar usuarios de Azure AD a CSV
He creado un script completo que exportará todos los usuarios de Azure AD con las propiedades más importantes a un archivo CSV. El script también recopila el administrador del usuario y usted puede elegir recopilar las cuentas de los usuarios habilitados y/o deshabilitados.
Puede encontrar el script completo aquí en mi Github o copiarlo y pegarlo desde abajo.
param(
[Parameter(
Mandatory = $false,
HelpMessage = "Get the users manager"
)]
[switch]$getManager = $true,
[Parameter(
Mandatory = $false,
HelpMessage = "Get accounts that are enabled, disabled or both"
)]
[ValidateSet("true", "false", "both")]
[string]$enabled = "true",
[Parameter(
Mandatory = $false,
HelpMessage = "Enter path to save the CSV file"
)]
[string]$path = ".\ADUsers-$((Get-Date -format "MMM-dd-yyyy").ToString()).csv"
)
$ErrorActionPreference = "Stop"
Function Get-Users {
<#
.SYNOPSIS
Get users from the requested DN
#>
process{
# Set the properties to retrieve
$properties = @(
'ObjectId',
'DisplayName',
'userprincipalname',
'mail',
'jobtitle',
'department',
'telephoneNumber',
'PhysicalDeliveryOfficeName',
'mobile',
'streetAddress',
'city',
'postalcode',
'state',
'country',
'AccountEnabled'
)
# Get enabled, disabled or both users
switch ($enabled)
{
"true" {$filter = "AccountEnabled eq true"}
"false" {$filter = "AccountEnabled eq false"}
"both" {$filter = ""}
}
# Get the users
Get-AzureADUser -Filter $filter | select $properties
}
}
Function Get-AllAzureADUsers {
<#
.SYNOPSIS
Get all AD users
#>
process {
Write-Host "Collecting users" -ForegroundColor Cyan
$users = @()
# Collect users
$users += Get-Users
# Loop through all users
$users | ForEach {
$manager = ""
If (($getManager.IsPresent)) {
# Get the users' manager
$manager = Get-AzureADUserManager -ObjectId $_.ObjectId | Select -ExpandProperty DisplayName
}
[pscustomobject]@{
"Name" = $_.DisplayName
"UserPrincipalName" = $_.UserPrincipalName
"Emailaddress" = $_.mail
"Job title" = $_.JobTitle
"Manager" = $manager
"Department" = $_.Department
"Office" = $_.PhysicalDeliveryOfficeName
"Phone" = $_.telephoneNumber
"Mobile" = $_.mobile
"Enabled" = if ($_.AccountEnabled) {"enabled"} else {"disabled"}
"Street" = $_.StreetAddress
"City" = $_.City
"Postal code" = $_.PostalCode
"State" = $_.State
"Country" = $_.Country
}
}
}
}
Get-AllAzureADUsers | Sort-Object Name | Export-CSV -Path $path -NoTypeInformation
if ((Get-Item $path).Length -gt 0) {
Write-Host "Report finished and saved in $path" -ForegroundColor Green
# Open the CSV file
Invoke-Item $path
}else{
Write-Host "Failed to create report" -ForegroundColor Red
}Concluyendo
El cmdlet Get AzureADUser es bastante diferente al cmdlet Get-ADUser. Filtrar usuarios es un desafío, pero siempre puedes recuperar todas las cuentas de usuario y realizar el filtrado en PowerShell.
Tenga en cuenta que el cmdlet Get-AzureADUser solo devuelve 100 registros de forma predeterminada. Así que agregue el parámetro -all cuando espere más resultados.
Espero que este artículo te haya resultado útil. Si tienes alguna pregunta, deja un comentario a continuación.



