Obtenez AzureADUser - Comment trouver des utilisateurs Azure AD avec PowerShell
Tout comme avec Active Directory sur site, pouvons-nous gérer nos utilisateurs dans Azure AD avec PowerShell. Pour cela, nous devrons utiliser la cmdlet Get AzureADUser dans Powershell. Cette applet de commande fait partie du module PowerShell AzureAD.
Lorsque vous utilisez Microsoft 365, vos utilisateurs sont réellement stockés dans Azure Active Directory (Azure AD). Vous pouvez les gérer via le portail Azure ou le Centre d'administration Microsoft 365, mais PowerShell est beaucoup plus rapide. Il nous permet de trouver et d'exporter rapidement les informations des utilisateurs.
Dans cet article, nous allons examiner l'applet de commande Get AzureADUser. Je vais donner quelques exemples utiles pour rechercher et exporter des informations utilisateur. Et à la fin de l'article, j'ai un script complet pour exporter vos utilisateurs Azure AD.
Note
Le module Azure AD cessera de fonctionner fin 2022. Nous devrons passer au SDK Microsoft Graph pour PowerShell. Lisez cet article pour obtenir et exporter votre utilisateur Azure AD avec la cmdlet Get-MgUser.
Recherche d'utilisateurs Azure AD avec Get-AzureAD dans PowerShell
Avant de commencer, assurez-vous d'avoir installé le module Azure AD.
La cmdlet Get-AzureADUser permet de rechercher et d'extraire les comptes d'utilisateurs d'Azure Active Directory. L'applet de commande n'est livrée qu'avec quelques paramètres que nous pouvons utiliser :
- Filtre - Récupérez plusieurs objets en fonction d'une requête oDate v3
- ObjectId - Renvoie un utilisateur spécifique en fonction de l'UPN ou de l'ObjectID
- SearchString - Obtient tous les utilisateurs correspondant à searchString
- Tous - Récupérer tous les résultats
- Haut - Récupérer uniquement le montant spécifié
Conseil
Par défaut, la cmdlet Get-AzureADUser renvoie uniquement 100 enregistrements. Au paramètre -all $true pour obtenir tous les résultats
Pour rechercher un seul utilisateur dans Azure AD, nous pouvons simplement utiliser l'ObjectID, qui accepte le UserPrincipalName comme valeur.
Get-AzureADUser -ObjectId adelev@lazydev.onmicrosoft.comPar défaut, la cmdlet Get-AzureADUser renvoie uniquement quatre champs. Si vous souhaitez voir toutes les propriétés de l'utilisateur, vous pouvez simplement ajouter select * derrière add :
Get-AzureADUser -ObjectId adelev@lazydev.onmicrosoft.com | select *J'expliquerai plus en détail les propriétés plus loin dans cet article.
Utilisation de SearchString dans AzureADUser
Le paramètre searchString est intéressant. Selon la documentation, le paramètre searchstring recherche uniquement les premiers caractères de DisplayName ou UserPrincipalName.
Mais en testant l'applet de commande, j'ai remarqué qu'elle recherchait dans beaucoup plus de champs :
- UserPrincipalName - Première partie de la chaîne
- DisplayName - Première partie de la chaîne
- Titre du poste - Correspondance exacte
- Département - Correspondance exacte
- Ville - Correspondance exacte
- État - Correspondance exacte
- Pays - Correspondance exacte
Ainsi, le paramètre searchString peut être utilisé pour effectuer une recherche sur le nom complet de l'utilisateur ou sur la première partie du nom. Pour les autres champs, vous devrez rechercher la valeur exacte.
Ci-dessous, vous voyez une capture d'écran d'un de mes utilisateurs dans mon locataire de développement. J'ai renommé les champs prénom et nom de l'utilisateur. Notez également le nom du département que j’ai rendu unique.
Nous allons maintenant trouver l'utilisateur Alex Wilber de toutes les manières possibles avec l'applet de commande Get-AzureADUsers searchString.
Tout d’abord, nous recherchons sur la première partie du nom d’affichage :
Get-AzureADUser -SearchString "Alex"
ObjectId DisplayName UserPrincipalName UserType
-------- ----------- ----- --------
449d2fd4-8165-415f-b4f1- Alex Wilber AlexW@lazydev.onmicrosoft.com MemberSi nous essayons de rechercher le prénom « Alexed » ou le nom de famille « Wilbers », la chaîne de recherche ne fonctionnera pas :
# Search on Firstname
Get-AzureADUser -SearchString "Alexed"
---
# No results
# Search on Lastname
Get-AzureADUser -SearchString "Wilber"
---
# No resultsUtiliser searchString sur d'autres champs
Tous les autres champs doivent correspondre exactement. Le titre du poste d’Alex est assistant marketing. Si nous recherchions uniquement sur la première partie de l’intitulé du poste « marketing », nous n’obtiendrons pas le résultat attendu :
Get-AzureADUser -SearchString "Marketing" | Select DisplayName,UserPrincipalName,jobtitle,department
DisplayName UserPrincipalName JobTitle Department
----------- ----------------- -------- ----------
Megan Bowen MeganB@lazydev.onmicrosoft.com recruiter MarketingCela revient à Megan Bowen car elle travaille dans le département « Marketing ». En recherchant le titre complet du poste d’Alex, nous obtenons le résultat attendu :
Get-AzureADUser -SearchString "Marketing Assistant" | Select DisplayName,UserPrincipalName,jobtitle,department
DisplayName UserPrincipalName JobTitle Department
----------- ----------------- -------- ----------
Alex Wilber AlexW@lazydev.onmicrosoft.com Marketing Assistant MarketingDepartmentNous pouvons utiliser le même principe pour les autres champs, Ville, État et Pays.
Obtenir le filtre AzureADUser
Le paramètre searchString est donc idéal pour trouver rapidement un utilisateur Azure AD sur le prénom, mais pour d’autres données, il n’est pas vraiment précis. Un moyen plus fiable de rechercher des utilisateurs AzureAD consiste à utiliser le paramètre -filter.
La requête de filtre est basée sur l'instruction de filtre oDate v3, ce qui peut être un peu difficile à mettre en œuvre lorsque vous n'y êtes pas habitué. Personnellement, je trouve le langage d'expression PowerShell, utilisé par l'applet de commande Get-ADUser, plus facile à utiliser.
La difficulté de la requête Data v3 est que tous les opérateurs ne sont pas pris en charge sur tous les champs. Par exemple, nous pouvons rechercher tous les utilisateurs portant le titre de poste « Assistant marketing ».
Get-AzureADUser -Filter "jobtitle eq 'Marketing Assistant'"
Cela obtiendra tous les utilisateurs dont le titre du poste est égal à « Assistant marketing ». Mais ce à quoi je m'attendrais, c'est que nous puissions également utiliser ne (pas égal), pour obtenir tous les utilisateurs qui ne sont pas Marketing Assistant.
Get-AzureADUser -Filter "jobtitle ne 'Marketing Assistant'"Mais cet opérateur n'est pas pris en charge. Ainsi, pour le moment, seuls les opérateurs suivants sont pris en charge par le paramètre de filtre Get 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’) |
Exemples de filtres Get-AzureADUser
Jetons donc un coup d'œil à quelques exemples d'utilisation du paramètre de filtre sur l'applet de commande Get-AzureADUser :
Filtrer sur le nom complet
Get-AzureADUser -Filter "DisplayName eq 'Adele Vance'"Filtrer sur le nom de famille
Get-AzureADUser -Filter "Surname eq 'Vance'"Rechercher sur la première partie du nom
Get-AzureADUser -Filter "startswith(DisplayName,'Ade')"Filtrer sur le type d'utilisateur
Notez que j'ai ajouté le paramètre -all ici car nous attendons plus de 100 résultats
# Find all users
Get-AzureADUser -Filter "UserType eq 'Member'" -All $true
# Find all guests
Get-AzureADUser -Filter "UserType eq 'Guest'" -All $trueObtenir des comptes Azure AD désactivés
Notez que j'ai ajouté le paramètre -all ici car nous attendons plus de 100 résultats
Get-AzureADUser -Filter "accountEnabled eq false" -All $trueUtiliser plusieurs conditions
Get-AzureADUser -Filter "department eq 'Marketing' and jobtitle eq 'Manager'"Recherche d'utilisateurs Azure AD en fonction d'autres champs
Lors de l'utilisation du paramètre -filter ou -searchstring, la recherche est effectuée sur le serveur, qui renvoie uniquement les résultats filtrés. Une autre option consiste à demander d’abord tous les utilisateurs à Azure AD, puis à effectuer le filtrage localement dans PowerShell.
Par exemple, lorsque nous souhaitons effectuer une recherche sur une partie du nom d'utilisateur, nous pourrions procéder comme suit :
Get-AzureADUser -All $true | Where-Object {$_.DisplayName -like "*vanc*"}Vous pouvez l'utiliser sur toutes les données renvoyées par l'applet de commande Get-AzureADUser et cela nous permet également d'utiliser les opérateurs différents :
Get-AzureADUser -All $true | Where-Object {$_.jobtitle -ne "Marketing Assistant"} | ftObtenez AzureADUser basé sur l'unité d'organisation
Nous pouvons également utiliser ce principe pour obtenir uniquement les utilisateurs d'une unité organisationnelle spécifique. Le distinguéName de l’unité d’organisation est stocké dans la propriété d’extension onPremisesDistinguishedName du résultat Get-AzureADUser.
Pour filtrer les utilisateurs sur l'UO, nous obtenons d'abord tous les utilisateurs, puis sélectionnons uniquement les utilisateurs dont le nom distinctif correspond à une expression similaire :
# Get all users from the OU Test-Users:
Get-AzureADUser -All $true | Where-Object {$_.ExtensionProperty.onPremisesDistinguishedName -like "*OU=Test-Users*"}Obtenir les propriétés AzureADUser
Par défaut, l’applet de commande AzureAD User n’affiche que quatre champs de l’utilisateur, ce qui ne nous donne pas beaucoup d’informations. Mais il y a beaucoup plus d’informations sur l’utilisateur réellement renvoyées. Si vous sélectionnez un seul utilisateur et utilisez la sortie de liste de formats, vous verrez toutes les données de l'utilisateur.
Get-AzureADUser -ObjectId alexw@lazydev.onmicrosoft.com | flVous pouvez simplement sélectionner les champs dont vous avez besoin en plaçant l'applet de commande select derrière :
Get-AzureADUser -ObjectId alexw@lazydev.onmicrosoft.com | Select DisplayName, Jobtitle, Mail, DepartmentExporter les utilisateurs Azure AD vers CSV
J'ai créé un script complet qui exportera tous les utilisateurs Azure AD avec les propriétés les plus importantes vers un fichier CSV. Le script collecte également le responsable de l'utilisateur et vous pouvez choisir de collecter les comptes des utilisateurs activés et/ou désactivés.
Vous pouvez trouver le script complet ici sur mon Github ou le copier-coller ci-dessous.
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
}Conclusion
La cmdlet Get AzureADUser est assez différente de la cmdlet Get-ADUser. Le filtrage des utilisateurs est un peu un défi, mais vous pouvez toujours récupérer tous les comptes d'utilisateurs et effectuer le filtrage dans PowerShell.
Gardez à l’esprit que la cmdlet Get-AzureADUser ne renvoie que 100 enregistrements par défaut. Ajoutez donc le paramètre -all lorsque vous attendez plus de résultats.
J'espère que vous avez trouvé cet article utile, si vous avez des questions, déposez simplement un commentaire ci-dessous.



