Obtener AzureADUser: cómo encontrar usuarios de Azure AD con PowerShell

Al igual que con Active Directory local, podemos administrar nuestros usuarios en Azure AD con PowerShell.

Para esto, necesitaremos usar el cmdlet Get AzureADUser en Powershell. Este cmdlet es parte del módulo AzureAD de PowerShell.

Cuando usa Microsoft 365, sus usuarios se almacenan en Azure Active Directory (Azure AD).

Puede administrarlos a través de Azure Portal o Microsoft 365 Admin Center, pero PowerShell es mucho más rápido.

Nos permite encontrar y exportar rápidamente la información del usuario.

En este artículo, vamos a echar un vistazo al cmdlet Get AzureADUser.

Daré algunos ejemplos útiles para encontrar y exportar información de usuario. Y al final del artículo, tengo un script completo para exportar sus usuarios de Azure AD.

Nota

El módulo de Azure AD se detendrá final de trabajo 2022. Tendremos que cambiar a Microsoft Graph SDK para PowerShell. Lea este artículo para obtener y exportar su usuario de Azure AD con el cmdlet Get-MgUser.

Búsqueda de usuarios de Azure AD con Get-AzureAD en PowerShell

Antes de comenzar, asegúrese de haber instalado el módulo Azure AD.

los Get-AzureADUser cmdlet permite encontrar y extraer cuentas de usuario de Azure Active Directory.

El cmdlet solo viene con un par de parámetros que podemos usar:

  • Filtrar – Recuperar múltiples objetos basados ​​en una consulta oDate v3
  • ID de objeto – Devolver usuario específico basado en UPN u ObjectID
  • Cadena de búsqueda – Obtener todos los usuarios que coincidan con la cadena de búsqueda
  • Todos – Recuperar todos los resultados
  • Parte superior – 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 solo usuario en Azure AD, simplemente podemos usar ObjectID, que acepta UserPrincipalName como valor.

Get-AzureADUser -ObjectId [email protected]
obtener azureaduser
Obtener AzureADUser

De forma predeterminada, el cmdlet Get-AzureADUser solo devuelve cuatro campos. Si desea ver todas las propiedades del usuario, simplemente puede agregar select * detrás añadir:

Get-AzureADUser -ObjectId [email protected] | select *

Explicaré más sobre las propiedades más adelante en este artículo.

Uso de SearchString en AzureADUser

El parámetro searchString es interesante. Según la documentación, el parámetro searchstring solo busca en los primeros caracteres de DisplayName o UserPrincipalName.

Pero al probar el cmdlet, noté que busca en muchos más campos:

  • UserPrincipalName – Primera parte de la cuerda
  • Nombre para mostrar – Primera parte de la cuerda
  • Título profesional – Coincidencia exacta
  • Departamento – Coincidencia exacta
  • Ciudad – Coincidencia exacta
  • Estado – Coincidencia exacta
  • País – Coincidencia exacta

Entonces el searchString El parámetro 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, puede 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.

Usuario de Azure Active Directory

Ahora vamos a encontrar al usuario Alex Wilber de todas las formas posibles con el cmdlet de búsqueda Get-AzureADUsers.

Primero, buscamos en la primera parte del nombre para mostrar:

Get-AzureADUser -SearchString "Alex"

ObjectId                       DisplayName UserPrincipalName             UserType
--------                       ----------- -----                         --------
449d2fd4-8165-415f-b4f1-       Alex Wilber [email protected] Member

Si intentáramos buscar por el nombre «Alexed» o el apellido «Wilbers», entonces la cadena de búsqueda no funcionará:

# Search on Firstname
Get-AzureADUser -SearchString "Alexed"

---
# No results

# Search on Lastname
Get-AzureADUser -SearchString "Wilber"

---
# No results

Usando searchString en otros campos

Todos los demás campos deben ser una coincidencia exacta. El título del trabajo de Alex es Asistente de marketing.

Si solo buscáramos en 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 [email protected] recruiter Marketing

Vuelve Megan Bowen 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 [email protected] Marketing Assistant MarketingDepartment

Podemos usar el mismo principio para los otros campos, Ciudad, Estado y País.

Obtener AzureADUuser Filter

Por lo tanto, el parámetro searchString es excelente para encontrar rápidamente un usuario de Azure AD por el nombre, pero para otros datos, no es realmente preciso.

Una forma más confiable de encontrar usuarios de AzureAD es usar el -filter parámetro.

La consulta de filtro se basa en la declaración de filtro oDate v3, que puede ser un poco difícil de hacer bien cuando no está acostumbrado.

Personalmente, creo que es más fácil trabajar con el lenguaje de expresión de PowerShell, que usa el cmdlet Get-ADUser.

Lo complicado de la consulta de Data v3 es que no todos los operadores son compatibles con todos los campos.

Por ejemplo, podemos buscar todos los usuarios con el título de trabajo «Asistente de marketing»

Get-AzureADUser -Filter "jobtitle eq 'Marketing Assistant'"
obtener ejemplos de filtro de azureaduser
Filtrar usuario de Azure AD

Esto obtendrá a todos los usuarios donde el título del trabajo sea igual a «Asistente de marketing».

Pero lo que esperaría es que también podríamos usar ne (no igual), para obtener todos los usuarios que no son asistentes de marketing.

Get-AzureADUser -Filter "jobtitle ne 'Marketing Assistant'"
obtener usuario de publicidad azul
No funciona el operador en Get-AzureADUser Filter

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:

Operador Descripción Ejemplo
equivalente Igual a jobtitle eq ‘Asistente de marketing’
y Y puesto de trabajo eq ‘Reclutador’ y puesto de trabajo eq ‘hr’
o O puesto de trabajo eq ‘Reclutador’ o puesto de trabajo eq ‘hr’
comienza con La cadena comienza con comienza con (título del trabajo, ‘recr’)
Obtener operadores de filtro AzureADUser

Ejemplos de filtros Get-AzureADUser

Así que echemos un vistazo a un par de ejemplos cuando se trata de usar el 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 $true

Obtener 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 $true

Usando múltiples condiciones

Get-AzureADUser -Filter "department eq 'Marketing' and jobtitle eq 'Manager'"

Búsqueda de usuarios de Azure AD en función de otros campos

Al usar el -filter o -searchstring la búsqueda de parámetros 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 queremos buscar por parte del nombre de usuario podemos 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 los operadores no iguales:

Get-AzureADUser -All $true | Where-Object {$_.jobtitle -ne "Marketing Assistant"} | ft

Obtener AzureADUser basado en OU

También podemos usar 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 onPremisesDistinguishedName del resultado Get-AzureADUser.

Para filtrar los usuarios en OU, primero obtenemos todos los usuarios y luego seleccionamos solo los usuarios donde el nombre distinguido coincide 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 de 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 realmente devuelta.

Si selecciona un solo usuario y utiliza la salida de la lista de formato, verá todos los datos del usuario.

Get-AzureADUser -ObjectId [email protected] | fl

Simplemente puede seleccionar los campos que necesita canalizando el cmdlet de selección detrás de él:

Get-AzureADUser -ObjectId [email protected] | Select DisplayName, Jobtitle, Mail, Department

Exportar usuarios de Azure AD a CSV

Creé 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 puede optar por recopilar las cuentas de los usuarios habilitados y/o deshabilitados.

Puedes encontrar el en mi Github o copiar y pegar 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
}

Terminando

El cmdlet Get AzureADUser es bastante diferente al cmdlet Get-ADUser.

Filtrar usuarios es un desafío, pero siempre puede recuperar todas las cuentas de usuario y filtrar en PowerShell.

Tenga en cuenta que el cmdlet Get-AzureADUser solo devuelve 100 registros de forma predeterminada.

Así que agrega el -all parámetro cuando espera más resultados.

Espero que este artículo le haya resultado útil, si tiene alguna pregunta, simplemente deje un comentario a continuación.

Otros artículos relacionados

Uso de PowerShell para actualizar un usuario de AD desde un archivo CSV

Uso de PowerShell para actualizar un usuario de AD desde un archivo CSV

Necesitaba actualizar un grupo de usuarios de AD con sus nuevos títulos de trabajo. Ha comenzado un nuevo año y ...
Leer Más
Eliminar carpetas vacías en SharePoint Online

Eliminar carpetas vacías en SharePoint Online

Después de fusionar carpetas duplicadas en SharePoint Online, necesitaba eliminar las carpetas vacías. Esto es algo que también podemos hacer ...
Leer Más
Cómo instalar el módulo Azure AD en PowerShell

Cómo instalar el módulo Azure AD en PowerShell

Cuando desee utilizar PowerShell para interactuar con su entorno de Azure AD, deberá instalar el módulo de Azure AD. Este ...
Leer Más
GUI de PowerShell - Cómo empezar

GUI de PowerShell – Cómo empezar

He creado muchos scripts de PowerShell durante los últimos años. Todo con un solo propósito para automatizar mi trabajo de ...
Leer Más
Personalizando la nueva Terminal de Windows

Personalizando la nueva Terminal de Windows

Normalmente empiezo un nuevo año limpiando mi escritorio, deshaciéndome de toda la basura que guardé en él durante los últimos ...
Leer Más
Buzón: cambie la configuración del buzón con PowerShell

Buzón: cambie la configuración del buzón con PowerShell

El cmdlet Set-Mailbox en PowerShell nos permite cambiar la configuración del buzón en Exchange Server y Exchange Online. Podemos usar ...
Leer Más

Deja un comentario