Получить AzureADUser - Как найти пользователей Azure AD с помощью PowerShell
Так же, как и с локальным Active Directory, мы можем управлять нашими пользователями в Azure AD с помощью PowerShell. Для этого нам нужно будет использовать командлет Get AzureADUser в PowerShell. Этот командлет является частью модуля PowerShell AzureAD.
При использовании Microsoft 365 ваши пользователи фактически хранятся в Azure Active Directory (Azure AD). Вы можете управлять ими через Azure Portal или Центр администрирования Microsoft 365, но PowerShell гораздо быстрее. Он позволяет нам быстро находить и экспортировать информацию о пользователях.
В этой статье мы рассмотрим командлет Get AzureADUser. Я приведу несколько полезных примеров для поиска и экспорта информации о пользователях. А в конце статьи у меня есть полный скрипт для экспорта ваших пользователей Azure AD.
Заметка
Модуль Azure AD перестанет работать в конце 2022 года. Нам нужно будет перейти на Microsoft Graph SDK для PowerShell. Прочитайте эту статью, чтобы получить и экспортировать вашего пользователя Azure AD с помощью команды Get-MgUser.
Поиск пользователей Azure AD с помощью Get-AzureAD в PowerShell
Прежде чем мы начнем, убедитесь, что вы установили модуль Azure AD.
Команда Get-AzureADUser позволяет находить и извлекать учетные записи пользователей из Azure Active Directory. Команда имеет всего несколько параметров, которые мы можем использовать:
- Фильтр - Получить несколько объектов на основе запроса oDate v3
- ObjectId – Вернуть конкретного пользователя на основе UPN или ObjectID
- Поисковая строка – Получить всех пользователей, соответствующих поисковой строке
- Все – Получить все результаты
- Топ – Получить только указанное количество
Совет
По умолчанию команда Get-AzureADUser возвращает только 100 записей. Чтобы получить все результаты, добавьте параметр -all $true
Чтобы найти отдельного пользователя в Azure AD, мы можем просто использовать ObjectID, который принимает UserPrincipalName в качестве значения.
Get-AzureADUser -ObjectId adelev@lazydev.onmicrosoft.comПо умолчанию команда Get-AzureADUser возвращает только четыре поля. Если вы хотите увидеть все свойства пользователя, вы можете просто добавить select * после добавления:
Get-AzureADUser -ObjectId adelev@lazydev.onmicrosoft.com | select *Я объясню больше о свойствах позже в этой статье.
Использование SearchString в AzureADUser
Параметр searchString интересен. Согласно документации, параметр searchString выполняет поиск только по первым символам в имени для отображения или UserPrincipalName.
Но при тестировании cmdlet я заметил, что он ищет по гораздо большему количеству полей:
- UserPrincipalName – Первая часть строки
- Отображаемое имя – первая часть строки
- Название вакансии – точное соответствие
- Отдел - Точное совпадение
- Город - Точное совпадение
- Состояние – Точное совпадение
- Страна - Точное совпадение
Таким образом, параметр searchString можно использовать для поиска по полному имени пользователя или первой части имени. Для других полей вам нужно будет искать точное значение.
Ниже вы видите снимок экрана одного из моих пользователей в моем тестовом арендаторе. Я изменил имена и фамилии пользователя. Обратите внимание и на название отдела, которое я сделал уникальным.
Теперь мы собираемся найти пользователя Алекса Уилбера всеми возможными способами с помощью команды Get-AzureADUsers searchString.
Сначала мы ищем по первой части отображаемого имени:
Get-AzureADUser -SearchString "Alex"
ObjectId DisplayName UserPrincipalName UserType
-------- ----------- ----- --------
449d2fd4-8165-415f-b4f1- Alex Wilber AlexW@lazydev.onmicrosoft.com MemberЕсли мы попытаемся выполнить поиск по имени "Alexed" или фамилии "Wilbers", тогда строка запроса не сработает:
Search on Firstname
Get-AzureADUser -SearchString "Alexed"
---
No results
Search on Lastname
Get-AzureADUser -SearchString "Wilber"
---
No resultsИспользование searchString на других полях
Все остальные поля должны совпадать точно. Должность Алекса — помощник по маркетингу. Если мы будем искать только по первой части должности «маркетинг», то мы не получим ожидаемый результат:
Get-AzureADUser -SearchString "Marketing" | Select DisplayName,UserPrincipalName,jobtitle,department
DisplayName UserPrincipalName JobTitle Department
----------- ----------------- -------- ----------
Megan Bowen MeganB@lazydev.onmicrosoft.com recruiter MarketingЭто возвращает Меган Боуэн, потому что она работает в отделе «Маркетинг». При поиске по всей должности Алекса мы получаем ожидаемый результат:
Get-AzureADUser -SearchString "Marketing Assistant" | Select DisplayName,UserPrincipalName,jobtitle,department
DisplayName UserPrincipalName JobTitle Department
----------- ----------------- -------- ----------
Alex Wilber AlexW@lazydev.onmicrosoft.com Marketing Assistant MarketingDepartmentМы можем использовать тот же принцип для других полей: город, штат и страна.
Получить фильтр AzureADUser
Таким образом, параметр searchString отлично подходит для быстрого поиска пользователя Azure AD по имени, но для других данных он не совсем точен. Более надежный способ находить пользователей AzureAD - использовать параметр -filter.
Запрос фильтра основан на операторе фильтра oDate v3, который может быть несколько сложным для понимания, если вы с ним не знакомы. Лично я считаю, что язык выражений PowerShell, используемый в команде Get-ADUser, проще в работе.
Хитрость запроса Data v3 заключается в том, что не все операторы поддерживаются для всех полей. Например, мы можем искать всех пользователей с должностью «Ассистент по маркетингу».
Get-AzureADUser -Filter "jobtitle eq 'Marketing Assistant'"
Это получит всех пользователей, у которых должность равна "Ассистент по маркетингу". Но я ожидал бы, что мы также могли бы использовать ne (не равно), чтобы получить всех пользователей, которые не являются Ассистентами по маркетингу.
Get-AzureADUser -Filter "jobtitle ne 'Marketing Assistant'"Однако этот оператор не поддерживается. Поэтому в данный момент только следующие операторы поддерживаются параметром фильтра Get AzureADUser:
| Оператор | Описание | Пример |
|---|---|---|
| равно | Равно | должность eq ‘Ассистент по маркетингу’ |
| и | И | должность равна 'Рекрутер' и должность равна 'hr' |
| или | И | должность равна 'Рекрутер' или должность равна 'hr' |
| начинается с | Строка начинается с | начинается с(jobtitle, 'рекр') |
Примеры фильтров для Get-AzureADUser
Итак, давайте рассмотрим пару примеров использования параметра фильтра в команде Get-AzureADUser:
Фильтр по полному имени
Get-AzureADUser -Filter "DisplayName eq 'Adele Vance'"Фильтр по фамилии
Get-AzureADUser -Filter "Surname eq 'Vance'"Поиск по первой части имени
Get-AzureADUser -Filter "startswith(DisplayName,'Ade')"Фильтр по типу пользователя
Обратите внимание, что я добавил параметр -all, потому что мы ожидаем более 100 результатов.
Find all users
Get-AzureADUser -Filter "UserType eq 'Member'" -All $true
Find all guests
Get-AzureADUser -Filter "UserType eq 'Guest'" -All $trueПолучить отключенные учетные записи Azure AD
Обратите внимание, что я добавил параметр -all, потому что мы ожидаем более 100 результатов.
Get-AzureADUser -Filter "accountEnabled eq false" -All $trueИспользование нескольких условий
Get-AzureADUser -Filter "department eq 'Marketing' and jobtitle eq 'Manager'"Поиск пользователей Azure AD на основе других полей
При использовании параметра -filter или -searchstring поиск выполняется на сервере, который возвращает только отфильтрованные результаты. Другой вариант - сначала запросить всех пользователей из Azure AD, а затем выполнить фильтрацию локально в PowerShell.
Например, когда мы хотим искать по части имени пользователя, мы можем сделать следующее:
Get-AzureADUser -All $true | Where-Object {$_.DisplayName -like "*vanc*"}Вы можете использовать это на всех данных, которые возвращает cmdlet Get-AzureADUser, и это также позволяет нам использовать операторы неравенства:
Get-AzureADUser -All $true | Where-Object {$_.jobtitle -ne "Marketing Assistant"} | ftПолучить AzureADUser на основе OU
Мы также можем использовать этот принцип для получения только пользователей из конкретной организационной единицы. DistinguishedName OU хранится в расширенном свойстве onPremisesDistinguishedName результата Get-AzureADUser.
Чтобы отфильтровать пользователей в OU, сначала мы получаем всех пользователей, а затем выбираем только тех пользователей, у которых distinguishedname соответствует шаблону:
Get all users from the OU Test-Users:
Get-AzureADUser -All $true | Where-Object {$_.ExtensionProperty.onPremisesDistinguishedName -like "*OU=Test-Users*"}Получить свойства AzureADUser
По умолчанию, командлет AzureAD User показывает только четыре поля пользователя, что не дает нам много информации. Но на самом деле возвращается гораздо больше информации о пользователе. Если вы выберете одного пользователя и используете вывод в формате списка, вы увидите все данные пользователя.
Get-AzureADUser -ObjectId alexw@lazydev.onmicrosoft.com | flВы можете просто выбрать необходимые поля, добавив командлет select:
Get-AzureADUser -ObjectId alexw@lazydev.onmicrosoft.com | Select DisplayName, Jobtitle, Mail, DepartmentЭкспорт пользователей Azure AD в CSV
Я создал полный скрипт, который экспортирует всех пользователей Azure AD с наиболее важными свойствами в файл CSV. Скрипт также собирает информацию о руководителе пользователя, и вы можете выбрать, собирать ли учетные записи активных и/или отключенных пользователей.
Вы можете найти полный скрипт здесь на моем Github или скопировать его ниже.
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
}Заключение
Команда Get AzureADUser сильно отличается от команды Get-ADUser. Фильтрация пользователей является несколько сложной задачей, но вы всегда можете получить все учетные записи пользователей и выполнить фильтрацию в PowerShell.
Имейте в виду, что командлет Get-AzureADUser по умолчанию возвращает только 100 записей. Поэтому добавьте параметр -all, когда ожидаете больше результатов.
Я надеюсь, что вы нашли эту статью полезной. Если у вас есть вопросы, просто оставьте комментарий ниже.



