Website-Suche

Holen Sie sich AzureADUser – So finden Sie Azure AD-Benutzer mit PowerShell


Genau wie beim On-Premise Active Directory können wir unsere Benutzer in Azure AD mit PowerShell verwalten. Dazu müssen wir das Cmdlet „Get AzureADUser“ in Powershell verwenden. Dieses Cmdlet ist Teil des PowerShell AzureAD-Moduls.

Bei der Nutzung von Microsoft 365 werden Ihre Benutzer tatsächlich im Azure Active Directory (Azure AD) gespeichert. Sie können sie über das Azure-Portal oder das Microsoft 365 Admin Center verwalten, PowerShell ist jedoch viel schneller. Es ermöglicht uns, Benutzerinformationen schnell zu finden und zu exportieren.

In diesem Artikel werfen wir einen Blick auf das Cmdlet Get AzureADUser. Ich werde einige nützliche Beispiele für das Suchen und Exportieren von Benutzerinformationen geben. Und am Ende des Artikels habe ich ein vollständiges Skript zum Exportieren Ihrer Azure AD-Benutzer.

Notiz

Das Azure AD-Modul wird Ende 2022 nicht mehr funktionieren. Wir müssen auf das Microsoft Graph SDK für PowerShell umsteigen. Lesen Sie diesen Artikel, um Ihren Azure AD-Benutzer mit dem Cmdlet Get-MgUser abzurufen und zu exportieren.

Finden von Azure AD-Benutzern mit Get-AzureAD in PowerShell

Bevor wir beginnen, stellen Sie sicher, dass Sie das Azure AD-Modul installiert haben.

Das Cmdlet Get-AzureADUser ermöglicht das Suchen und Extrahieren von Benutzerkonten aus dem Azure Active Directory. Das Cmdlet enthält nur ein paar Parameter, die wir verwenden können:

  • Filter - Rufen Sie mehrere Objekte basierend auf einer oDate v3-Abfrage ab
  • ObjectId - Gibt einen bestimmten Benutzer basierend auf UPN oder ObjectID zurück
  • SearchString - Rufen Sie alle Benutzer ab, die mit dem searchString übereinstimmen
  • Alle - Alle Ergebnisse abrufen
  • Oben - Nur den angegebenen Betrag abrufen

Beratung

Standardmäßig gibt das Cmdlet Get-AzureADUser nur 100 Datensätze zurück. Am Parameter -all $true erhalten Sie alle Ergebnisse

Um einen einzelnen Benutzer in Azure AD zu suchen, können wir einfach die ObjectID verwenden, die den UserPrincipalName als Wert akzeptiert.

Get-AzureADUser -ObjectId adelev@lazydev.onmicrosoft.com

Standardmäßig gibt das Cmdlet Get-AzureADUser nur vier Felder zurück. Wenn Sie alle Eigenschaften des Benutzers sehen möchten, können Sie einfach select * hinter add hinzufügen:

Get-AzureADUser -ObjectId adelev@lazydev.onmicrosoft.com | select *

Ich werde später in diesem Artikel mehr über die Eigenschaften erklären.

Verwenden des SearchString in AzureADUser

Der Parameter searchString ist interessant. Der Dokumentation zufolge sucht der Parameter „searchstring“ nur nach den ersten Zeichen im DisplayName oder UserPrincipalName.

Beim Testen des Cmdlets ist mir jedoch aufgefallen, dass es viel mehr Felder durchsucht:

  • UserPrincipalName - Erster Teil der Zeichenfolge
  • DisplayName - Erster Teil der Zeichenfolge
  • Berufsbezeichnung - Genaue Übereinstimmung
  • Abteilung - Genaue Übereinstimmung
  • Stadt - Genaue Übereinstimmung
  • Status - Genaue Übereinstimmung
  • Land - Genaue Übereinstimmung

Daher kann der Parameter searchString verwendet werden, um nach dem vollständigen Namen des Benutzers oder dem ersten Teil des Namens zu suchen. Für die anderen Felder müssen Sie nach dem genauen Wert suchen.

Unten sehen Sie einen Screenshot eines meiner Benutzer in meinem Entwicklungsmandanten. Ich habe die Vor- und Nachnamenfelder des Benutzers umbenannt. Beachten Sie auch den Abteilungsnamen, den ich eindeutig gemacht habe.

Jetzt werden wir den Benutzer Alex Wilber auf alle möglichen Arten mit dem Cmdlet „Get-AzureADUsers searchString“ finden.

Zuerst suchen wir nach dem ersten Teil des Anzeigenamens:

Get-AzureADUser -SearchString "Alex"

ObjectId                       DisplayName UserPrincipalName             UserType
--------                       ----------- -----                         --------
449d2fd4-8165-415f-b4f1-       Alex Wilber AlexW@lazydev.onmicrosoft.com Member

Wenn wir versuchen würden, nach dem Vornamen „Alexed“ oder dem Nachnamen „Wilbers“ zu suchen, würde die Suchzeichenfolge nicht funktionieren:

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

---
# No results

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

---
# No results

SearchString für andere Felder verwenden

Alle anderen Felder müssen exakt übereinstimmen. Die Berufsbezeichnung von Alex ist Marketingassistent. Wenn wir nur nach dem ersten Teil der Berufsbezeichnung „Marketing“ suchen würden, würden wir nicht das erwartete Ergebnis erhalten:

Get-AzureADUser -SearchString "Marketing" | Select DisplayName,UserPrincipalName,jobtitle,department

DisplayName UserPrincipalName              JobTitle  Department
----------- -----------------              --------  ----------
Megan Bowen MeganB@lazydev.onmicrosoft.com recruiter Marketing

Es gibt Megan Bowen zurück, weil sie in der Abteilung „Marketing“ arbeitet. Bei der Suche nach der gesamten Berufsbezeichnung von Alex erhalten wir das erwartete Ergebnis:

Get-AzureADUser -SearchString "Marketing Assistant" | Select DisplayName,UserPrincipalName,jobtitle,department

DisplayName UserPrincipalName             JobTitle            Department
----------- -----------------             --------            ----------
Alex Wilber AlexW@lazydev.onmicrosoft.com Marketing Assistant MarketingDepartment

Dasselbe Prinzip können wir auch für die anderen Felder „Stadt“, „Bundesstaat“ und „Land“ verwenden.

Holen Sie sich den AzureADUser-Filter

Der Parameter „searchString“ ist also großartig, um einen Azure AD-Benutzer schnell anhand des Vornamens zu finden, aber für andere Daten ist er nicht wirklich genau. Eine zuverlässigere Möglichkeit, AzureAD-Benutzer zu finden, ist die Verwendung des Parameters -filter.

Die Filterabfrage basiert auf der oDate v3-Filteranweisung, deren korrekte Ausführung etwas schwierig sein kann, wenn Sie nicht daran gewöhnt sind. Persönlich finde ich es einfacher, mit der PowerShell-Ausdruckssprache zu arbeiten, die das Cmdlet Get-ADUser verwendet.

Das Knifflige an der Data v3-Abfrage ist, dass nicht alle Operatoren in allen Feldern unterstützt werden. Beispielsweise können wir nach allen Benutzern mit der Berufsbezeichnung „Marketingassistent“ suchen.

Get-AzureADUser -Filter "jobtitle eq 'Marketing Assistant'"

Dadurch werden alle Benutzer erfasst, deren Berufsbezeichnung „Marketingassistent“ lautet. Was ich jedoch erwarten würde, ist, dass wir auch ne (nicht gleich) verwenden könnten, um alle Benutzer zu erreichen, die keine Marketingassistenten sind.

Get-AzureADUser -Filter "jobtitle ne 'Marketing Assistant'"

Dieser Operator wird jedoch nicht unterstützt. Daher werden derzeit nur die folgenden Operatoren vom Filterparameter „Get AzureADUser“ unterstützt:

OperatorDescriptionExample
eqEquals tojobtitle eq ‘Marketing Assistant’
andAndjobtitle eq ‘Recruiter’ and jobtitle eq ‘hr’
orOrjobtitle eq ‘Recruiter’ or jobtitle eq ‘hr’
startswithString starts withstartswith(jobtitle,’recr’)

Beispiele für Get-AzureADUser-Filter

Schauen wir uns also ein paar Beispiele für die Verwendung des Filterparameters im Cmdlet Get-AzureADUser an:

Nach vollständigem Namen filtern

Get-AzureADUser -Filter "DisplayName eq 'Adele Vance'"

Nach Nachnamen filtern

Get-AzureADUser -Filter "Surname eq 'Vance'"

Suchen Sie nach dem ersten Teil des Namens

Get-AzureADUser -Filter "startswith(DisplayName,'Ade')"

Nach Benutzertyp filtern

Beachten Sie, dass ich hier den Parameter -all hinzugefügt habe, da wir mehr als 100 Ergebnisse erwarten

# Find all users
Get-AzureADUser -Filter "UserType eq 'Member'" -All $true

# Find all guests
Get-AzureADUser -Filter "UserType eq 'Guest'" -All $true

Deaktivierte Azure AD-Konten erhalten

Beachten Sie, dass ich hier den Parameter -all hinzugefügt habe, da wir mehr als 100 Ergebnisse erwarten

Get-AzureADUser -Filter "accountEnabled eq false" -All $true

Mehrere Bedingungen verwenden

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

Suchen von Azure AD-Benutzern anhand anderer Felder

Bei Verwendung der Parameter -filter oder -searchstring erfolgt die Suche auf dem Server, der nur die gefilterten Ergebnisse zurückgibt. Eine andere Möglichkeit besteht darin, zunächst alle Benutzer von Azure AD anzufordern und die Filterung dann lokal in PowerShell durchzuführen.

Wenn wir beispielsweise nach einem Teil des Benutzernamens suchen möchten, könnten wir Folgendes tun:

Get-AzureADUser -All $true | Where-Object {$_.DisplayName -like "*vanc*"}

Sie können dies für alle Daten verwenden, die vom Cmdlet „Get-AzureADUser“ zurückgegeben werden, und dies ermöglicht uns auch die Verwendung der Ungleichheitsoperatoren:

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

Rufen Sie AzureADUser basierend auf der Organisationseinheit ab

Wir können dieses Prinzip auch nutzen, um nur die Benutzer einer bestimmten Organisationseinheit zu erhalten. Der DistinguishedName der Organisationseinheit wird in der Erweiterungseigenschaft onPremisesDistinguishedName des Get-AzureADUser-Ergebnisses gespeichert.

Um die Benutzer nach OU zu filtern, rufen wir zunächst alle Benutzer ab und wählen dann nur die Benutzer aus, bei denen der Distinguished Name mit einem Like-Ausdruck übereinstimmt:

# Get all users from the OU Test-Users:
Get-AzureADUser -All $true | Where-Object {$_.ExtensionProperty.onPremisesDistinguishedName -like "*OU=Test-Users*"}

Rufen Sie AzureADUser-Eigenschaften ab

Standardmäßig zeigt das AzureAD-Benutzer-Cmdlet nur vier Felder des Benutzers an, was uns nicht viele Informationen liefert. Aber es gibt noch viel mehr Informationen über den tatsächlich zurückgegebenen Benutzer. Wenn Sie einen einzelnen Benutzer auswählen und die Formatlistenausgabe verwenden, werden Ihnen alle Daten des Benutzers angezeigt.

Get-AzureADUser -ObjectId alexw@lazydev.onmicrosoft.com | fl

Sie können einfach die Felder auswählen, die Sie benötigen, indem Sie das dahinter liegende Cmdlet „select“ weiterleiten:

Get-AzureADUser -ObjectId alexw@lazydev.onmicrosoft.com | Select DisplayName, Jobtitle, Mail, Department

Exportieren Sie Azure AD-Benutzer in CSV

Ich habe ein komplettes Skript erstellt, das alle Azure AD-Benutzer mit den wichtigsten Eigenschaften in eine CSV-Datei exportiert. Das Skript erfasst auch den Manager des Benutzers und Sie können wählen, ob Sie die Konten aktivierter und/oder deaktivierter Benutzer erfassen möchten.

Sie können das vollständige Skript hier auf meinem Github finden oder es von unten kopieren und einfügen.

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
}

Zusammenfassung

Das Cmdlet „Get AzureADUser“ unterscheidet sich deutlich vom Cmdlet „Get-ADUser“. Das Filtern von Benutzern ist eine kleine Herausforderung, aber Sie können jederzeit alle Benutzerkonten abrufen und die Filterung in PowerShell durchführen.

Beachten Sie, dass das Cmdlet Get-AzureADUser standardmäßig nur 100 Datensätze zurückgibt. Fügen Sie also den Parameter -all hinzu, wenn Sie mehr Ergebnisse erwarten.

Ich hoffe, dass Sie diesen Artikel hilfreich fanden. Wenn Sie Fragen haben, hinterlassen Sie einfach unten einen Kommentar.

Verwandte Artikel