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

Get-ADUser - Как найти и экспортировать пользователей AD с помощью PowerShell


Active Directory является нашим основным источником для управления учетными записями пользователей. Консоль управления отлично подходит для поиска одного пользователя, но когда нам нужно больше информации, команда Get-ADUser в PowerShell гораздо мощнее.

Это позволяет нам быстро получить выборку пользователей или получить детали от одного или нескольких пользователей. Это также отличный способ экспортировать аккаунты или информацию пользователей в файл CSV.

В этой статье мы рассмотрим командлет get aduser в PowerShell. Также я дам вам несколько полезных примеров, касающихся поиска и экспорта пользователей AD. И в качестве бонуса я добавил полный скрипт для экспорта ваших пользователей AD.

Установите модуль Active Directory

Чтобы иметь возможность использовать командлет Get-ADUser в PowerShell, вам необходимо установить модуль Active Directory. По умолчанию он установлен на контроллере домена, но на Windows 10 или 11 вам нужно будет его установить.

Вы можете выполнить следующую команду PowerShell в Windows 10 или 11 для установки модуля:

Add-WindowsCapability -online -Name “Rsat.ActiveDirectory.DS-LDS.Tools~~~~0.0.1.0”

Поиск пользователей с помощью Get ADUser в PowerShell

Командлет Get-ADUser позволяет нам находить учетные записи пользователей в Active Directory и извлекать из них информацию. Истинная сила этого командлета заключается в том, что он предлагает различные параметры для поиска этих учетных записей пользователей.

У нас есть следующие варианты, когда дело касается поиска аккаунтов:

  • Идентификация - Найдите учетную запись пользователя на основе его идентичности. Это вернет только одну учетную запись пользователя.
  • Фильтр - Получить несколько объектов (учетных записей пользователей) на основе запроса
  • LDAPФильтр - Используйте строку запроса LDAP для фильтрации учетных записей пользователей.
  • SearchBase – Укажите путь Active Directory (OU) для поиска
  • SearchScope – Укажите, как глубоко вы хотите искать (базовый уровень, один уровень или полное поддерево)

Параметр идентификатора в основном используется, когда вы знаете SAMAccountName пользователя (имя входа). Это позволяет вам выбрать одного пользователя из Active Directory и просмотреть свойства аккаунта.

Get-ADUser -identity arhodes

Получить-ADПользователь

Как видите, возвращаются некоторые основные свойства пользователя. Мы можем использовать параметр -properties для получения дополнительной информации о пользователе. Я позже объясню больше о том, как получить разные свойства, но если вы хотите увидеть всю возможную информацию о аккаунте пользователя, используйте следующую команду:

Get-ADUser -identity arhodes -Propeties *

Используя фильтр

Более распространенный способ поиска пользователя(ей) в Active Directory - использовать параметр -filter. Параметр фильтра использует язык выражений PowerShell для фильтрации результата. Это означает, что мы можем использовать следующие операторы в наших запросах:

-eq

Равно

-le

Меньше или равно

-ge

Больше или равно

-ne

Не равно

-lt

Меньше чем

-gt

Больше чем

-like

Нравится

-notlike

Не так как

-and -or

и/или

-not

Не

Операторы языка выражений PowerShell

Итак, давайте посмотрим на несколько обычно используемых примеров фильтрации пользователей Active Directory.

Чтобы найти пользователя по его имени или фамилии, мы можем использовать следующий фильтр

Search on first name
Get-ADUser -Filter "GivenName -eq 'Alan'"

Search on last name:
Get-ADUser -Filter "Surname -eq 'Rhodes'"

Другой вариант заключается в использовании оператора like в сочетании с подстановочным знаком. Это особенно полезно, когда вы знаете часть имени. Обратите внимание на символ *, который указывает на подстановку.

Get-ADUser -Filter "name -like '*rho*'"

-ge и -le могут, например, использоваться для поиска всех пользователей на основе их неудачных попыток входа:

Find all users that have more then 3 failed login attempts
Get-ADUser -Filter "badpwdcount -ge 3"

Чтобы найти всех пользователей, у которых не заполнено определенное поле, мы можем использовать оператор -notlike. Например, мы хотим получить всех пользователей, у которых не заполнено поле с адресом электронной почты.

Используя фильтр -notlike в комбинации с подстановочным знаком, мы можем искать всех пользователей, у которых нет никаких данных в поле электронной почты.

Get-ADUser -Filter "Email -notlike '*'" | ft

Вы можете легко объединить это с командлетом Set-ADUser, чтобы обновить много пользователей с помощью одной команды. Например, мы получаем всех пользователей, у которых не заполнен атрибут веб-страницы, и устанавливаем его на сайт компании:

Get-ADUser -Filter "homepage -notlike '*'" | Set-ADUser -HomePage "a-d.site"

Комбинирование фильтров

Мы также можем расширить наш фильтр запрос несколькими выражениями. Это позволяет вам еще больше уточнить ваши фильтровые запросы. Например, мы хотим найти всех сотрудников, которые являются «менеджерами по аккаунтам».

Если мы используем следующий фильтр, то он вернет всех пользователей с должностью менеджера по работе с клиентами:

Get-ADUser -Filter "title -eq 'account manager'" | Select Name,Enabled | ft

Но проблема в том, что это также включает отключенные аккаунты. Мы хотим только активных пользователей, нас не интересуют пользователи, которые уже покинули компанию. Таким образом, что мы можем сделать, так это отфильтровать аккаунты, которые включены:

Get-ADUser -Filter "title -eq 'account manager' -and enabled -like 'true'" | Select Name,Enabled | ft

Получить-ADUsers с фильтрами

Последний пример фильтра, который я хочу поделиться с вами, заключается в том, чтобы получить пользователей на основе поля даты. Допустим, мы хотим найти все неактивные аккаунты.

Для этого мы можем использовать поле lastlogon в Active Directory. Сначала нам нужно создать переменную даты, взяв дату сегодняшнего дня и вычитая из нее 30 дней.

Мы можем получить всех пользователей, которые не входили в систему в последние 30 дней на домене:

$date = (Get-Date) - (New-TimeSpan -Days 30)
Get-ADUser -Filter 'lastLogon -lt $date' | ft

Получить ADUser SearchBase

Когда у вас есть много пользователей в вашем Active Directory, вы, вероятно, хотите сузить поиск. Для этого мы можем использовать параметр -SearchBase для команды Get-ADUser. Это позволяет нам указать distinguishedName (уровень OU), где мы хотим искать.

Чтобы указать организационную единицу, в которой мы хотим искать, необходимо записать distinguishedName снизу вверх. Таким образом, строка начинается с ОУ, в котором вы хотите искать, и заканчивается доменным именем.

Возьмите следующую структуру Active Directory, мы хотим получить всех пользователей из OU IT:

Путь SearchBase

Строка SearchBase в этом случае будет:

1: IT
2: Amsterdam
3: Sites
4: Lazyadmin
5: NL

"OU=IT,OU=Amsterdam,OU=Sites,DC=Lazyadmin,DC=NL"

Таким образом, чтобы получить всех пользователей из IT-отдела в Амстердаме, мы можем использовать следующую команду PowerShell:

Get-ADUser -Filter * -SearchBase "OU=IT,OU=Amsterdam,OU=Sites,DC=Lazyadmin,DC=NL" | ft

Используя область поиска

По умолчанию параметр -SearchBase вернет всех пользователей из указанного OU и вложенных OU. С помощью параметра -SearchScope мы можем указать, насколько глубоко или не глубоко мы хотим искать в дереве Active Directory.

Скажем, мы хотим пользователей из OU Амстердама, но не из вложенных OU.

Active Directory

Если мы используем следующую SearchBase, то все пользователи, включая тех, кто из OU IT, Marketing и Production, будут возвращены:

Get-ADUser -Filter * -SearchBase "OU=Amsterdam,OU=Sites,DC=Lazyadmin,DC=NL" | ft

Чтобы получить только пользователей из OU Амстердама, мы можем использовать параметр SearchScope. Это позволяет нам ограничить SearchBase только текущим уровнем:

Get-ADUser -Filter * -SearchBase "OU=IT,OU=Amsterdam,OU=Sites,DC=Lazyadmin,DC=NL" -SearchScope OneLevel | ft

Укажите область поиска для получения пользователей AD

Получить свойства пользователя AD

При использовании команды Get ADUser вы, возможно, заметили, что она возвращает только несколько свойств учетной записи пользователя. Но, как вы, вероятно, знаете, у учетной записи пользователя есть гораздо больше свойств.

Чтобы вернуть все свойства, нам нужно добавить параметр -properties к cmdlet:

Get-ADUser -identity arhodes -properties *

Это вернёт длинный список со всеми возможными свойствами учётной записи пользователя. Теперь это, вероятно, слишком много информации, поэтому вам может понадобиться указать конкретные поля, которые вам нужны.

Для этого вам нужно передать команду select после неё, где мы указываем необходимые поля. Также хорошей идеей будет указать те же поля в параметре properties, вместо того чтобы запрашивать все данные.

Например, если вам нужно полное имя, должность и адрес электронной почты, вы можете использовать следующую команду:

Get-ADUser -identity arhodes -properties emailaddress,title | select name,emailaddress,title

Выбор уникальных значений

Следующий совет не совсем связан с командлетом Get-ADUser, но это то, что я часто использую в сочетании с получением информации о пользователях из Active Directory.

Когда вы хотите экспортировать список всех возможных названий должностей в вашем Active Directory, вы можете использовать параметр -Unique в PowerShell.

Get-ADUser -Filter * -Properties title | Select title -Unique

Эта команда предоставит вам все названия должностей, которые вы использовали в вашем Active Directory.

Экспорт пользователей AD в CSV с помощью PowerShell

Экспорт результатов в PowerShell в CSV довольно распространен. Мы все часто используем PowerShell, чтобы получить информацию, а затем обрабатывать ее в Excel. Я написал полное руководство по команде Export-CSV, но я также хочу привести вам пару полезных примеров работы с командой Get-ADUser.

Для простого экспорта всех пользователей AD мы можем использовать следующую команду:

Get-ADUser -filter * | Export-CSV c:\temp\users.csv -NoTypeInformation

Но, как вы заметите, это не даст действительно тех результатов, которые вы ищете. Это включит все учетные записи пользователей, как включенные, так и отключенные, и не даст ту информацию, которая нам нужна.

Экспортировать дополнительные поля

Итак, первым шагом является указание полей, которые мы действительно хотим экспортировать. Например, если мы хотим экспортировать имена, должности, отдел и адреса электронной почты, мы могли бы использовать следующую команду:

Get-ADUser -filter * -properties mail,title,department | select name,title,department,mail | Export-CSV c:\temp\users.csv -NoTypeInformation

Экспортировать только активированных пользователей

Чтобы экспортировать только активных (включенных) пользователей из AD в файл CSV, мы можем использовать следующую команду в PowerShell:

Export all enabled users
Get-ADUser -Filter "Enabled -like 'true'" | Export-CSV c:\temp\users.csv -NoTypeInformation

OR Export only disabled users
Get-ADUser -Filter "Enabled -like 'False'" | Export-CSV c:\temp\users.csv -NoTypeInformation

Скрипт для экспорта пользователей AD в CSV

Я создал скрипт PowerShell, который экспортирует всех пользователей AD в CSV для вас с наиболее часто необходимыми свойствами.

Когда вы запускаете скрипт, вы указываете несколько параметров:

  • Получить имя отображения менеджера или нет (по умолчанию true)
  • Укажите базу поиска (OU), по умолчанию - весь Active Directory
  • Получить включенные или отключенные аккаунты или и те, и другие (по умолчанию только включенные)
  • Экспортировать путь к файлу CSV (местоположение скрипта по умолчанию)

Скрипт получит все учетные записи пользователей из активного каталога, если вы не укажете searchBase (OU). Также можно указать несколько OU:

.\Get-ADusers.ps1 -searchBase "OU=users,OU=Amsterdam,DC=LazyAdmin,DC=Local","OU=users,OU=Oslo,DC=LazyAdmin,DC=Local" -path c:\temp\users.csv

Следуйте этим шагам, чтобы экспортировать пользователей AD с помощью скрипта PowerShell:

  1. Скачайте полный скрипт Export AD Users из моего Github
  2. Откройте PowerShell и перейдите к скрипту
  3. Запустите скрипт экспорта: Get-ADUsers.ps1 -csvpath c:\temp\adusers.csv

Когда скрипт будет завершен, он автоматически откроет Excel для вас. Вы также можете запустить скрипт без параметра csvpath, чтобы вывести результат в консоль.

param(
  [Parameter(
    Mandatory = $false,
    HelpMessage = "Get the users manager"
  )]
  [switch]$getManager = $true,

  [Parameter(
    Mandatory = $false,
    HelpMessage = "Enter the searchbase between quotes or multiple separated with a comma"
    )]
  [string[]]$searchBase,

  [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]$CSVpath
)

Function Get-Users {
    <#
    .SYNOPSIS
      Get users from the requested DN
    #>
    param(
      [Parameter(
        Mandatory = $true
      )]
      $dn
    )
    process{
      # Set the properties to retrieve
      $properties = @(
        'name',
        'userprincipalname',
        'mail',
        'title',
        'enabled',
        'manager',
        'department',
        'telephoneNumber',
        'office',
        'mobile',
        'streetAddress',
        'city',
        'postalcode',
        'state',
        'country',
        'description',
        'lastlogondate'
      )

      # Get enabled, disabled or both users
      switch ($enabled)
      {
        "true" {$filter = "enabled -eq 'true'"}
        "false" {$filter = "enabled -eq 'false'"}
        "both" {$filter = "*"}
      }

      # Get the users
      Get-ADUser -Filter $filter -Properties $properties -SearchBase $dn | select $properties
    }
}


Function Get-AllADUsers {
  <#
    .SYNOPSIS
      Get all AD users
  #>
  process {
    Write-Host "Collecting users" -ForegroundColor Cyan
    $users = @()

    if ($searchBase) {
     # Get the requested mailboxes
      foreach ($dn in $searchBase) {
        Write-Host "- Get users in $dn" -ForegroundColor Cyan
        $users += Get-Users -dn $dn
      }
    }else{
      # Get distinguishedName of the domain
      $dn = Get-ADDomain | Select -ExpandProperty DistinguishedName
      Write-Host "- Get users in $dn" -ForegroundColor Cyan
      $users += Get-Users -dn $dn
    }

    $users | ForEach {

      $manager = ""

      If (($getManager.IsPresent) -and ($_.manager)) {
        # Get the users' manager
        $manager = Get-ADUser -Identity $_.manager | Select -ExpandProperty Name
      }

      [pscustomobject]@{
        "Name" = $_.Name
        "UserPrincipalName" = $_.UserPrincipalName
        "Emailaddress" = $_.mail
        "Job title" = $_.Title
        "Manager" = $manager
        "Department" = $_.Department
        "Office" = $_.Office
        "Phone" = $_.telephoneNumber
        "Mobile" = $_.mobile
        "Enabled" = $_.enabled
        "Street" = $_.StreetAddress
        "City" = $_.City
        "Postal code" = $_.PostalCode
        "State" = $_.State
        "Country" = $_.Country
        "Description" = $_.Description
        "Last login" = $_.lastlogondate
      }
    }
  }
}

If ($CSVpath) {
  # Get mailbox status
  Get-AllADUsers | Sort-Object Name | Export-CSV -Path $CSVpath -NoTypeInformation -Encoding UTF8
  if ((Get-Item $CSVpath).Length -gt 0) {
      Write-Host "Report finished and saved in $CSVpath" -ForegroundColor Green

      # Open the CSV file
      Invoke-Item $path
  } 
  else {
      Write-Host "Failed to create report" -ForegroundColor Red
  }
}
Else {
  Get-AllADUsers | Sort-Object Name 
}

Заключение

Команда Get ADUser действительно полезна, когда нужно извлечь информацию из Active Directory. Использование различных фильтров позволяет получать только ту информацию, которая действительно нужна.

Чтобы экспортировать пользователей AD в CSV, вы можете попробовать этот скрипт. Вы можете легко изменить свойства, которые он извлекает, под свои нужды.

Если у вас есть вопросы, просто оставьте комментарий ниже.