AD Kullanıcılarını CSV'ye Aktarma - Ücretsiz Komut Dosyası


AD kullanıcılarınızı CSV'ye aktarmak için PowerShell ve Get-ADUser cmdlet'ini kullanabiliriz. Bu, aktif dizininizdeki tüm kullanıcıları hızlı bir şekilde kullanılabilir bir CSV dosyasına aktarmamıza olanak tanır.

Kullanıcılarınızın doğru özniteliklere sahip olup olmadıklarını kontrol etmek için dışa aktarmak, sistem yöneticilerinin ortak bir görevidir. Bu, hâlâ doğru iletişim bilgilerinin listelenip listelenmediğini ve kapatmanız gerekebilecek eski hesapların olup olmadığını doğrulamanıza olanak tanır.

Bu makalede, AD kullanıcılarının CSV'ye nasıl aktarılacağına bir göz atacağız ve sonunda sizin için eksiksiz bir komut dosyası hazırlayacağım.

Gereksinimler

Active Directory kullanıcılarını dışarı aktarmak için PowerShell kullanacağız. Active Directory Modülünün kurulu olduğundan emin olmanız gerekecektir. Bu, etki alanı denetleyicisine varsayılan olarak yüklenir, ancak komut dosyalarını veya cmdlet'leri farklı bir makineden çalıştırmak istiyorsanız, onu yüklemeniz gerekecektir.

Modülü Windows 10/11 bilgisayarlara yüklemek için aşağıdaki PowerShell komutunu çalıştırabilirsiniz:

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

Active Directory Kullanıcılarını CSV'ye Aktarma

Kullanıcıları Active Directory'nizden bir CSV dosyasına aktarmak için iki cmdlet kullanacağız: Get-ADuser ve Export-CSV. İlk cmdlet, AD'nizdeki tüm kullanıcıları alacak ve yalnızca ihtiyacınız olan bilgileri seçmenize olanak tanıyacaktır.

İkinci cmdlet, seçilen verileri bir CSV dosyasına aktarır. CSV'ye aktarmak oldukça basittir; aşağıdaki adımlarda size göstereceğim gibi yalnızca yolu ve dosya adını belirtmeniz yeterlidir.

Belirtildiği gibi, makalenin sonunda tam bir komut dosyası var, ancak nasıl çalıştığını anlamanız önemlidir, böylece onu ihtiyaçlarınıza göre değiştirebilirsiniz. Bu nedenle, AD kullanıcılarını bir CSV dosyasına aktarmak için gereken adımlarda size rehberlik edeceğim.

Adım 1 - Get-ADUser ile kullanıcıların seçilmesi

Kullanıcıları dışa aktarmanın ilk adımı, Active Directory'den dışa aktarmak istediğiniz kullanıcıları seçmektir. Bunu Get-ADUser cmdlet'iyle yapıyoruz. Bu cmdlet, yalnızca ihtiyacımız olan kullanıcıları seçmemize olanak tanıyan farklı filtreleri kabul eder.

Alan adınızdaki tüm kullanıcıları adları, e-posta adresleri ve unvanlarıyla birlikte almak için aşağıdaki komutu kullanırsınız:

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

Kullanıcıları Seçin ve Filtreleyin

Her zaman tüm kullanıcıları Active Directory'den dışarı aktarmak istemezsiniz. Bazen yalnızca belirli bir kuruluş biriminden kullanıcılara ihtiyaç duyarsınız veya yalnızca etkin veya devre dışı bırakılmış kullanıcıları istersiniz. Bunu yapmak için farklı filtreleme seçeneklerini kullanabiliriz:

  • Filtre - Sonuçları örneğin ada, unvana veya e-posta adresine göre filtrelemenize olanak tanır

  • SearchBase - Kullanıcıları hangi kuruluş birimlerinden almak istediğinizi belirtebilirsiniz

  • Kimlik - Belirli bir kullanıcıyı belirtmenize olanak tanır

Aşağıda farklı seçenekleri kısaca anlatacağım, daha fazlasını öğrenmek istiyorsanız Get-ADUser cmdlet'i ile ilgili bu makaleyi mutlaka okuyun. Farklı seçeneklerin nasıl çalıştığı konusunda daha ayrıntılı bilgi verilmektedir.

-filter parametresi, belirli bir özelliğe sahip tüm kullanıcıları bulmanızı sağlar. Örneğin “fixer” iş unvanına sahip tüm kullanıcıları dışa aktarmak istediğinizde aşağıdaki komutu kullanabiliriz:

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

Filtreyi yalnızca etkin kullanıcı hesaplarını veya yalnızca devre dışı bırakılmış hesapları dışa aktarmak için de kullanabiliriz:

# 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 özelliği, yalnızca Active Directory'nizdeki belirli bir kuruluş birimindeki kullanıcı hesaplarını dışa aktarmak için kullanılır. Kuruluş biriminin ayırt edici adını kullanmanız gerekecektir. Kaç düzey derinliğe gitmek istediğinizi belirlemek için SearchBase özelliğini SearchScope özelliğiyle birleştirebilirsiniz.

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

Adım 2 - Özelliklerin Seçilmesi

Artık dışa aktarmak istediğimiz kullanıcıları nasıl seçeceğimizi biliyoruz, dışa aktarma işlemimize hangi özellikleri dahil etmek istediğimize bakabiliriz. Herhangi bir özellik belirtmezseniz ad, nesne kimliği ve kullanıcı asıl adı gibi yalnızca bazı temel bilgiler dışa aktarılır.

Get-ADUser cmdlet'inde bulunan tüm özellikleri görüntülemek için aşağıdaki komutu kullanabilirsiniz. Bu, tek bir kullanıcının tüm özelliklerini döndürecektir:

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

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

Dışa aktarma işleminizde istediğiniz özelliklerin listesine sahip olduğunuzda bunları -properties parametresinde belirtebilir ve sonucu seçebilirsiniz. Çıktıyı bir CSV dosyasına aktarmadan önce ilk olarak konsolda test etmenizi/kontrol etmenizi öneririm.

Aşağıdaki örnekte posta, unvan, yönetici ve ofis özelliğini seçiyoruz. Select deyimiyle bu nitelikleri de seçtiğinizden emin olun, aksi takdirde tüm varsayılan alanları da almaya devam edersiniz:

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

Bir komut dosyası oluşturduğunuzda, özelliklerinizi bir hash tablosunun içine yerleştirmenizi öneririm. Hashtable'ların avantajı, nitelikleri kolayca değiştirebilmenizdir ve bu durumda, hem özellikler parametresi hem de select ifadesi için aynı listeyi kullanabiliriz.

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

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

Adım 3 - CSV'ye aktarın

Artık dışa aktarmak istediğimiz Active Directory kullanıcılarını seçtik ve CSV dışa aktarımımıza dahil etmek istediğimiz nitelikleri seçtik. Son adım, sonuçları bir CSV dosyasına aktarmaktır. Bunun için Export-CSV cmdlet'ini kullanacağız.

Export-CSV cmdlet'i, sonucu dışa aktarmak için yalnızca bir yol (dosya adı içeren) gerektirir. Ayrıca cmdlet'e şu iki parametreyi eklemenizi öneririm: -NoTypeInformation -Encoding UTF8. Bunlar, CSV dosyanızdaki bilgileri içeren başlığı kaldıracak ve tüm karakterlerin UTF8 ile dışa aktarıldığından emin olacaktır.

# 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 Kullanıcılarını CSV komut dosyasına aktarma işlemini tamamlayın

Sizin için en sık ihtiyaç duyulan özelliklerle tüm AD Kullanıcılarını CSV'ye aktaracak bir PowerShell betiği oluşturdum. CSV dosyası için bir yol belirtirseniz komut dosyası CSV dosyasını oluşturacak ve bittiğinde Excel'i açacaktır.

Komut dosyasını çalıştırdığınızda birkaç seçenek belirtirsiniz:

  • Yöneticinin görünen adını alın veya almayın (varsayılan doğru)

  • SearchBase'i (OU) belirtin, varsayılan olarak tüm Active Directory'yi belirtin

  • Hesapları etkinleştirin veya devre dışı bırakın ya da her ikisini de yapın (yalnızca varsayılan olarak etkindir)

  • Yol CSV dosyasını dışa aktar (varsayılan komut dosyası konumu)

SearchBase'i (OU) belirtmezseniz komut dosyası tüm kullanıcı hesaplarını Active Directory'den alır. Birden fazla kuruluş birimi belirlemek de mümkündür:

.\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

Komut dosyasının en son sürümünü GitHub depomda bulabilirsiniz.

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
}

Kapanış

Active Directory Kullanıcılarını bir CSV Listesine aktarmak, tüm kullanıcıları ve onların özelliklerini takip etmenize gerçekten yardımcı olabilir. Bu tür görevler için kendi komut dosyalarınızı nasıl oluşturabileceğinizi anlamak güzel.

Umarım bu makale, kullanıcıları AD'nizden bir CSV dosyasına nasıl aktaracağınızı anlamanıza yardımcı olmuştur. Herhangi bir sorunuz varsa aşağıya bir yorum bırakmanız yeterli.

İlgili makaleler