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

Как экспортировать пользователей AD в CSV - бесплатный скрипт


Чтобы экспортировать пользователей AD в CSV, мы можем использовать PowerShell и командлет Get-ADUser. Это позволяет нам быстро экспортировать всех пользователей из вашей активной директории в удобный файл CSV.

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

В этой статье мы рассмотрим, как экспортировать пользователей Active Directory в CSV, и в конце у меня есть для вас полный скрипт.

Требования

Для экспорта пользователей Active Directory мы собираемся использовать PowerShell. Вам нужно убедиться, что у вас установлен модуль Active Directory. Он установлен по умолчанию на контроллере домена, но если вы хотите запускать сценарии или команды с другой машины, вам нужно будет установить его.

Чтобы установить модуль на компьютеры с Windows 10/11, вы можете выполнить следующую команду PowerShell:

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

Экспорт пользователей Active Directory в CSV

Чтобы экспортировать пользователей из вашей Active Directory в файл CSV, мы будем использовать два командлета: Get-ADUser и Export-CSV. Первый командлет получит всех пользователей из вашей AD и позволит вам выбрать только ту информацию, которая вам нужна.

Второй cmdlet экспортирует выбранные данные в CSV-файл. Экспорт в CSV довольно прост, нужно лишь указать путь и имя файла, как я покажу вам в следующих шагах.

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

Шаг 1 - Выбор пользователей с помощью Get-ADUser

Первый шаг к экспорту пользователей — выбрать пользователей, которых вы хотите экспортировать из Active Directory. Мы делаем это с помощью команды Get-ADUser. Эта команда принимает различные фильтры, что позволяет нам выбрать только тех пользователей, которые нам нужны.

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

Get-ADUser -filter * -properties emailaddress,title | select name,emailaddress,title

Выбор и фильтрация пользователей

Вы не всегда хотите экспортировать всех пользователей из Active Directory. Иногда вам нужны только пользователи из определенного OU или только активные или отключенные пользователи. Для этого мы можем использовать различные параметры фильтрации:

  • Фильтр – Позволяет вам фильтровать результаты, например, по имени, заголовку или адресу электронной почты
  • SearchBase – Вы можете указать, из какого(их) OU вы хотите получить пользователей
  • Идентификация – Позволяет указать конкретного пользователя

Я кратко объясню различные варианты ниже, если вы хотите узнать больше, убедитесь, что вы прочитали эту статью о команде Get-ADUser. В ней более подробно объясняется, как работают различные варианты.

Параметр -filter позволяет вам находить всех пользователей с определённым атрибутом. Например, когда вы хотите экспортировать всех пользователей с должностью «постановщик», вы можете использовать следующую команду:

Get-ADUser -filter "title -eq 'fixer'" -properties * | select name, emailaddress, title | Export-CSV -path c:\temp\export.csv

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

Export all disabled user accounts
change false to true for enabled accounts

Get-ADUser -filter "enabled -eq 'false'" -properties * | select name, emailaddress, title | Export-CSV -path c:\temp\export.csv

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

Get-ADUser -Filter * -SearchBase "OU=IT,OU=Amsterdam,OU=Sites,DC=Lazyadmin,DC=NL" | Export-CSV -path c:\temp\export.csv

Шаг 2 - Выбор свойств

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

Чтобы просмотреть все свойства, доступные из командлета Get-ADUser, вы можете использовать команду ниже. Это вернет все свойства одного пользователя:

Get-ADUser -filter * -properties * -ResultSetSize 1 | select *

Or to view all properties from a specific user:
Get-ADUser -identity ztucker -properties * | select *

Когда у вас есть список свойств, которые вы хотите экспортировать, вы можете указать их в параметре -properties и выбрать результат. Рекомендую сначала протестировать/проверить вывод в консоли, прежде чем экспортировать его в файл CSV.

В приведенном ниже примере мы выбираем атрибуты почты, заголовка, менеджера и офиса. Убедитесь, что вы также выбираете эти атрибуты с помощью оператора select, в противном случае вы все равно получите все поля по умолчанию:

Get-ADUser -filter "enabled -eq 'true'" -properties mail, title, department, city | select name, 
 mail, title, department, city | ft

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

$properties = @(
  'name',
  'userprincipalname',
  'mail',
  'title',
  'enabled',
  'department'
)

Get-ADUser -Filter * -Properties $properties | Select-Object $properties

Шаг 3 - Экспорт в CSV

Теперь мы выбрали пользователей Active Directory, которых мы хотим экспортировать, и выбрали атрибуты, которые хотим включить в наш экспорт CSV. Последний шаг - экспортировать результаты в файл CSV. Для этого мы будем использовать командлет Export-CSV.

Команда Export-CSV требует только путь (с именем файла) для экспорта результата. Я также рекомендую добавить следующие два параметра к команде: -NoTypeInformation -Encoding UTF8. Это удалит заголовок с информацией в вашем CSV файле и гарантирует, что все символы будут экспортированы в кодировке UTF8.

Export all enabled user accounts with to a CSV file
Get-ADUser -filter "enabled -eq 'true'" -properties mail, title, department, city | select name, 
 mail, title, department, city | Export-CSV -path c:\temp\users.csv -NoTypeInformation -Encoding UTF8

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

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

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

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

Скрипт получит все учетные записи пользователей из Active Directory, если вы не укажете 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

Вы можете найти последнюю версию скрипта здесь, в моем репозитории на GitHub.

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',
        'passwordlastset'
      )

      # 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-Object $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-Object -ExpandProperty DistinguishedName
      Write-Host "- Get users in $dn" -ForegroundColor Cyan
      $users += Get-Users -dn $dn
    }

    $users | ForEach-Object {

      $manager = ""

      If (($getManager.IsPresent) -and ($_.manager)) {
        # Get the users' manager
        $manager = Get-ADUser -Identity $_.manager | Select-Object -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
        "Password last set" = $_.passwordlastset
      }
    }
  }
}

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 $CSVpath
  } else {
      Write-Host "Failed to create report" -ForegroundColor Red
  }
} Else {
  Get-AllADUsers | Sort-Object Name | ft
}

Заключение

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

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