AD kullanıcılarını PowerShell ile CSV'ye aktarın


AD kullanıcılarının bilgilerini PowerShell ile CSV'ye aktarmak istiyoruz. AD kullanıcılarını neden PowerShell ile listelememiz gerekiyor? Örneğin, her AD kullanıcısının Active Directory'de doğru cep telefonu numarasına sahip olup olmadığını bilmek istiyoruz. Bunun nedeni, hizmet masasının arama yapmadan önce Active Directory'deki bilgileri aramasıdır. Bu yazımızda Active Directory kullanıcılarını PowerShell ile CSV dosyasına nasıl aktaracağınızı öğreneceksiniz.

AD kullanıcılarının bilgilerini dışa aktarma PowerShell betiği

Export-ADUsers.ps1 PowerShell betiği, ayarladığınız distinguishedName'e karşı çalışacaktır. Bundan sonra raporu CSV dosyasına aktaracaktır. CSV dosyasını Microsoft Excel veya CSV dosya uzantısını destekleyen başka bir uygulamayla açabilirsiniz.

Komut dosyası, kullanıcı başına aşağıdaki bilgileri toplayacaktır:

  1. İlk adı

  2. Soy isim

  3. Ekran adı

  4. Kullanıcı oturum açma adı

  5. Kullanıcı asıl adı

  6. Sokak

  7. Şehir

  8. Eyalet/il

  9. Posta/Posta Kodu

  10. Ülke/bölge

  11. İş unvanı

  12. Departman

  13. Şirket

  14. Müdür

  15. kuruluş birimi

  16. Tanım

  17. Ofis

  18. Telefon numarası

  19. Diğer Telefon

  20. E-posta

  21. Mobil

  22. Çağrı cihazı

  23. Notlar

  24. Hesap durumu

  25. Kullanıcının oluşturulduğu tarih

  26. Son oturum açma tarihi

PowerShell ile Active Directory kullanıcılarını CSV'ye aktarın

Adımları inceleyelim ve Active Directory kullanıcılarını PowerShell ile CSV dosyasına aktaralım.

1. Adım: Dışa aktarma AD kullanıcıları PowerShell betiğini hazırlayın

Export-ADUsers.ps1 PowerShell komut dosyasını indirip Etki Alanı Denetleyicisi C:\scripts klasörüne yerleştirin. Komut dosyaları klasörünüz yoksa bir tane oluşturun.

Komut dosyasını çalıştırırken herhangi bir hata oluşmasını önlemek için dosyanın engellemesinin kaldırıldığından emin olun. PowerShell betiğini çalıştırırken dijital olarak imzalanmamış hata makalesinde daha fazlasını okuyun.

Diğer bir seçenek de aşağıdaki kodu kopyalayıp Not Defteri'ne yapıştırmaktır. Ona Export-ADUsers.ps1 adını verin ve C:\scripts klasörüne yerleştirin.

<#
    .SYNOPSIS
    Export-ADUsers.ps1

    .DESCRIPTION
    Export Active Directory users to CSV file.

    .LINK
    alitajran.com/export-ad-users-to-csv-powershell

    .NOTES
    Written by: ALI TAJRAN
    Website:    alitajran.com
    LinkedIn:   linkedin.com/in/alitajran

    .CHANGELOG
    V1.00, 05/24/2021 - Initial version
    V1.10, 04/01/2023 - Added progress bar, user created date, and OU info
    V1.20, 05/19/2023 - Added function for OU path extraction
#>

# Split path
$Path = Split-Path -Parent "C:\scripts\*.*"

# Create variable for the date stamp in log file
$LogDate = Get-Date -f yyyyMMddhhmm

# Define CSV and log file location variables
# They have to be on the same location as the script
$Csvfile = $Path + "\AllADUsers_$LogDate.csv"

# Import Active Directory module
Import-Module ActiveDirectory

# Function to extract OU from DistinguishedName
function Get-OUFromDistinguishedName {
    param(
        [string]$DistinguishedName
    )

    $ouf = ($DistinguishedName -split ',', 2)[1]
    if (-not ($ouf.StartsWith('OU') -or $ouf.StartsWith('CN'))) {
        $ou = ($ouf -split ',', 2)[1]
    }
    else {
        $ou = $ouf
    }
    return $ou
}

# Set distinguishedName as searchbase, you can use one OU or multiple OUs
# Or use the root domain like DC=exoip,DC=local
$DNs = @(
    "OU=Sales,OU=Users,OU=Company,DC=exoip,DC=local",
    "OU=IT,OU=Users,OU=Company,DC=exoip,DC=local",
    "OU=Finance,OU=Users,OU=Company,DC=exoip,DC=local"
)

# Create empty array
$AllADUsers = @()

# Loop through every DN
foreach ($DN in $DNs) {
    $Users = Get-ADUser -SearchBase $DN -Filter * -Properties * 

    # Add users to array
    $AllADUsers += $Users

    # Display progress bar
    $progressCount = 0
    for ($i = 0; $i -lt $AllADUsers.Count; $i++) {

        Write-Progress `
            -Id 0 `
            -Activity "Retrieving User " `
            -Status "$progressCount of $($AllADUsers.Count)" `
            -PercentComplete (($progressCount / $AllADUsers.Count) * 100)

        $progressCount++
    }      
}

# Create list
$AllADUsers | Sort-Object Name | Select-Object `
@{Label = "First name"; Expression = { $_.GivenName } },
@{Label = "Last name"; Expression = { $_.Surname } },
@{Label = "Display name"; Expression = { $_.DisplayName } },
@{Label = "User logon name"; Expression = { $_.SamAccountName } },
@{Label = "User principal name"; Expression = { $_.UserPrincipalName } },
@{Label = "Street"; Expression = { $_.StreetAddress } },
@{Label = "City"; Expression = { $_.City } },
@{Label = "State/province"; Expression = { $_.State } },
@{Label = "Zip/Postal Code"; Expression = { $_.PostalCode } },
@{Label = "Country/region"; Expression = { $_.Country } },
@{Label = "Job Title"; Expression = { $_.Title } },
@{Label = "Department"; Expression = { $_.Department } },
@{Label = "Company"; Expression = { $_.Company } },
@{Label = "Manager"; Expression = { (Get-AdUser $_.Manager -Properties DisplayName).DisplayName } },
@{Label = "OU"; Expression = { Get-OUFromDistinguishedName $_.DistinguishedName } },
@{Label = "Description"; Expression = { $_.Description } },
@{Label = "Office"; Expression = { $_.Office } },
@{Label = "Telephone number"; Expression = { $_.telephoneNumber } },
@{Label = "Other Telephone"; Expression = { $_.otherTelephone -join ";"} },
@{Label = "E-mail"; Expression = { $_.Mail } },
@{Label = "Mobile"; Expression = { $_.mobile } },
@{Label = "Pager"; Expression = { $_.pager } },
@{Label = "Notes"; Expression = { $_.info } },
@{Label = "Account status"; Expression = { if (($_.Enabled -eq 'TRUE') ) { 'Enabled' } Else { 'Disabled' } } },
@{Label = "User created date"; Expression = { $_.WhenCreated } },
@{Label = "Last logon date"; Expression = { $_.lastlogondate } } |

# Export report to CSV file
Export-Csv -Encoding UTF8 -Path $Csvfile -NoTypeInformation #-Delimiter ";"
  • Satır 54,55,56: Hedef ayırt ediciAdı düzenleyin. Bir kuruluş birimine veya birden fazla kuruluş birimine sahip olabilirsiniz (bu örnekte).

2. Adım: Ayırt edici adı alın

Ayırt edici ad değerini PowerShell betiğine eklemeniz gerekir. Active Directory'de ayırt edici adı almak için aşağıdaki adımları izleyin:

  1. Active Directory Kullanıcıları ve Bilgisayarları'nı başlatın

  2. Hedef kuruluş birimini sağ tıklayın ve Özellikler'i tıklayın

  3. Özellik Düzenleyici sekmesine gidin

  4. Özellikler listesinde distuingedName özelliğini bulun

  5. Dizeyi açmak için çift tıklayın ve değeri kopyalayın

Not: Özellik Düzenleyicisi sekmesini görmüyorsanız, Görünüm'deki menü çubuğundaki Active Directory Kullanıcıları ve Bilgisayarları'nı tıklayın ve <'yi etkinleştirinGelişmiş Özellikler.

3. Adım: AD kullanıcılarını dışa aktarma PowerShell betiğini çalıştırın

PowerShell'i yönetici olarak çalıştırın. komut dosyaları klasörünün yolunu değiştirin. AD kullanıcılarını CSV dosyasına aktarmak için PowerShell betiğini çalıştırın. Tamamlanana kadar bekleyin.

PS C:\> cd c:\scripts
PS C:\scripts> .\Export-ADUsers.ps1

4. Adım: AD kullanıcıları raporu CSV dosyasını açın

Komut dosyaları klasörüne gidin ve AllADUsers_ dosyasını gördüğünüzü doğrulayın.

CSV dosyasını favori uygulamanızla açın. Örneğimizde Microsoft Excel var.

Her şey harika görünüyor!

Devamını oku: PowerShell ile kullanıcıları gruptan kaldırma »

Çözüm

PowerShell ile AD kullanıcılarını CSV'ye nasıl aktaracağınızı öğrendiniz. Her kullanıcı hesabında çok fazla bilgi vardır. PowerShell ile ihtiyaçlarınıza uygun özel bir rapora sahip olabilirsiniz.

Bu makaleyi beğendiniz mi? Ayrıca PowerShell ile Kuruluş Birimlerini Alma makalesini de beğenebilirsiniz. Bizi takip etmeyi ve bu yazımızı paylaşmayı unutmayın.

İlgili makaleler