Поиск по сайту:

Получить 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

ПолучитьAzureADПользователя

По умолчанию команда 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'"

Фильтровать пользователей Azure AD

Это получит всех пользователей, у которых должность равна "Ассистент по маркетингу". Но я ожидал бы, что мы также могли бы использовать ne (не равно), чтобы получить всех пользователей, которые не являются Ассистентами по маркетингу.

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

Не работающий оператор в Get-AzureADUser Filter

Однако этот оператор не поддерживается. Поэтому в данный момент только следующие операторы поддерживаются параметром фильтра Get AzureADUser:

ОператорОписаниеПример
равноРавнодолжность eq ‘Ассистент по маркетингу’
иИдолжность равна 'Рекрутер' и должность равна 'hr'
илиИдолжность равна 'Рекрутер' или должность равна 'hr'
начинается сСтрока начинается сначинается с(jobtitle, 'рекр')
Получить операторы фильтра AzureADUser

Примеры фильтров для 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, когда ожидаете больше результатов.

Я надеюсь, что вы нашли эту статью полезной. Если у вас есть вопросы, просто оставьте комментарий ниже.