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.comStandardmäß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 MemberWenn 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 resultsSearchString 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 MarketingEs 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 MarketingDepartmentDasselbe 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:
| 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’) |
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 $trueDeaktivierte 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 $trueMehrere 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"} | ftRufen 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 | flSie 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, DepartmentExportieren 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.



