Azure AD kullanıcılarını PowerShell ile CSV'ye aktarma


Azure AD kullanıcı bilgilerini PowerShell ile CSV'ye aktarmak istiyoruz. Azure AD kullanıcılarını neden PowerShell ile listelememiz gerekiyor? Örneğin, her Azure AD kullanıcısının Azure Active Directory'de doğru özniteliklere sahip olup olmadığını bilmek istiyoruz. Çünkü hizmet masasının bu bilgiye ihtiyacı var. Bu makalede Azure Active Directory kullanıcılarını PowerShell ile CSV dosyasına nasıl aktaracağınızı öğreneceksiniz.

Bilgi dışarı aktarma Azure AD kullanıcıları PowerShell betiği

Export-AADUsers.ps1 PowerShell betiği Azure kiracısına 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. İD

  2. İlk adı

  3. Soy isim

  4. Ekran adı

  5. Kullanıcı asıl adı

  6. E-posta adresi

  7. İş unvanı

  8. Yönetici görünen adı

  9. Yönetici kullanıcı asıl adı

  10. Departman

  11. Şirket

  12. Ofis

  13. Çalışan kimliği

  14. Mobil

  15. Telefon

  16. Sokak

  17. Şehir

  18. Posta Kodu

  19. Durum

  20. Ülke

  21. Kullanıcı tipi

  22. Şirket içi senkronizasyon

  23. Hesap durumu

  24. Hesap şu tarihte oluşturuldu:

  25. Son oturum açma (Azure AD P1/P2 lisansı gerektirir)

  26. Lisanslı

  27. MFA durumu (kimlik doğrulama yöntemleri dahil)

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

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

1. Adım. Microsoft Graph PowerShell'i yükleyin

Windows PowerShell'i yönetici olarak çalıştırın ve Microsoft Graph PowerShell'i yükleyin.

Önemli: Yeni parametreleri kullanmak için Microsoft Graph sürüm 2.0 veya daha yeni bir sürüme ihtiyacınız vardır.

Not: Hem Microsoft Graph hem de Microsoft Graph Beta modülünü yüklemenizi öneririz. Bunun nedeni, bazı cmdlet'lerin henüz son sürümde mevcut olmaması ve çalışmayacak olmasıdır.

Windows PowerShell'i yönetici olarak çalıştırın ve Microsoft Graph sürümünü kontrol edin.

PS C:\> Get-InstalledModule Microsoft.Graph | ft -AutoSize

Version Name            Repository Description                      
------- ----            ---------- -----------                      
2.1.0   Microsoft.Graph PSGallery  Microsoft Graph PowerShell module

Microsoft Graph Beta sürümünü kontrol edin.

PS C:\> Get-InstalledModule Microsoft.Graph.Beta | ft -AutoSize

Version Name                 Repository Description                      
------- ----                 ---------- -----------                      
2.1.0   Microsoft.Graph.Beta PSGallery  Microsoft Graph PowerShell module

2. Adım. Microsoft Graph PowerShell'e bağlanın

Microsoft Graph PowerShell ile Azure Active Directory'ye (AAD) bağlanın.

PS C:\> Connect-MgGraph -Scopes "User.Read.All", "UserAuthenticationMethod.Read.All", "AuditLog.Read.All"

Genel yönetici kimlik bilgilerinizi girin ve Microsoft Graph izin isteğini kabul edin.

3. Adım. Azure AD kullanıcıları PowerShell betiğini dışa aktarmaya hazırlayın

(C:) sürücüsünde iki klasör oluşturun:

  • Sıcaklık

  • Kodlar

Export-AADUsers.ps1 PowerShell betiğini indirip C:\scripts klasörüne yerleştirin. Komut dosyası, CSV dosyasını C:\temp klasörüne aktaracaktır.

Komut dosyasını çalıştırırken hataları ö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-AADUsers.ps1 adını verin ve C:\scripts klasörüne yerleştirin.

<#
    .SYNOPSIS
    Export-AADUsers.ps1

    .DESCRIPTION
    Export Azure Active Directory users to CSV file.

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

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

    .CHANGELOG
    V1.10, 06/20/2023 - Initial version
    V1.10, 06/21/2023 - Added license status and MFA status including methods
    V1.20, 06/22/2023 - Added progress bar and last login date
    V1.30, 07/24/2023 - Update for Microsoft Graph PowerShell changes
#>

# Connect to Microsoft Graph API
Connect-MgGraph -Scopes "User.Read.All", "UserAuthenticationMethod.Read.All", "AuditLog.Read.All"

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

# Define CSV file export location variable
$Csvfile = "C:\temp\AllAADUsers_$LogDate.csv"

# Define the Get-AllMgUsers function
Function Get-AllMgUsers {
    process {
        # Retrieve users using the Microsoft Graph API with property
        $propertyParams = @{
            All            = $true
            # Uncomment below if you have Azure AD P1/P2 to get last log in date
            # Property = 'SignInActivity'
            ExpandProperty = 'manager'
        }

        $users = Get-MgBetaUser @propertyParams
        $totalUsers = $users.Count

        # Initialize progress counter
        $progress = 0

        # Collect and loop through all users
        foreach ($index in 0..($totalUsers - 1)) {
            $user = $users[$index]

            # Update progress counter
            $progress++
            
            # Calculate percentage complete
            $percentComplete = ($progress / $totalUsers) * 100

            # Define progress bar parameters
            $progressParams = @{
                Activity        = "Processing Users"
                Status          = "User $($index + 1) of $totalUsers - $($user.userPrincipalName) - $($percentComplete -as [int])% Complete"
                PercentComplete = $percentComplete
            }
            
            # Display progress bar
            Write-Progress @progressParams

            # Get manager information
            $managerDN = $user.Manager.AdditionalProperties.displayName
            $managerUPN = $user.Manager.AdditionalProperties.userPrincipalName

            # Create an object to store user properties
            $userObject = [PSCustomObject]@{
                "ID"                          = $user.id
                "First name"                  = $user.givenName
                "Last name"                   = $user.surname
                "Display name"                = $user.displayName
                "User principal name"         = $user.userPrincipalName
                "Email address"               = $user.mail
                "Job title"                   = $user.jobTitle
                "Manager display name"        = $managerDN
                "Manager user principal name" = $managerUPN
                "Department"                  = $user.department
                "Company"                     = $user.companyName
                "Office"                      = $user.officeLocation
                "Employee ID"                 = $user.employeeID
                "Mobile"                      = $user.mobilePhone
                "Phone"                       = $user.businessPhones -join ','
                "Street"                      = $user.streetAddress
                "City"                        = $user.city
                "Postal code"                 = $user.postalCode
                "State"                       = $user.state
                "Country"                     = $user.country
                "User type"                   = $user.userType
                "On-Premises sync"            = if ($user.onPremisesSyncEnabled) { "enabled" } else { "disabled" }
                "Account status"              = if ($user.accountEnabled) { "enabled" } else { "disabled" }
                "Account Created on"          = $user.createdDateTime
                # Uncomment below if you have Azure AD P1/P2 to get last log in date
                # "Last log in"                 = if ($user.SignInActivity.LastSignInDateTime) { $user.SignInActivity.LastSignInDateTime } else { "No log in" }
                "Licensed"                    = if ($user.assignedLicenses.Count -gt 0) { "Yes" } else { "No" }
                "MFA status"                  = "-"
                "Email authentication"        = "-"
                "FIDO2 authentication"        = "-"
                "Microsoft Authenticator"     = "-"
                "Password authentication"     = "-"
                "Phone authentication"        = "-"
                "Software Oath"               = "-"
                "Temporary Access Pass"       = "-"
                "Windows Hello for Business"  = "-"
                "Passwordless Authenticator"  = "-"
            }

            $MFAData = Get-MgBetaUserAuthenticationMethod -UserId $user.userPrincipalName

            # Check authentication methods for each user
            foreach ($method in $MFAData) {
                Switch ($method.AdditionalProperties["@odata.type"]) {
                    "#microsoft.graph.emailAuthenticationMethod" {
                        $userObject."Email authentication" = $true
                        $userObject."MFA status" = "Enabled"
                    }
                    "#microsoft.graph.fido2AuthenticationMethod" {
                        $userObject."FIDO2 authentication" = $true
                        $userObject."MFA status" = "Enabled"
                    }
                    "#microsoft.graph.microsoftAuthenticatorAuthenticationMethod" {
                        $userObject."Microsoft Authenticator" = $true
                        $userObject."MFA status" = "Enabled"
                    }
                    "#microsoft.graph.passwordAuthenticationMethod" {
                        $userObject."Password authentication" = $true
                        # When only the password is set, then MFA is disabled.
                        if ($userObject."MFA status" -ne "Enabled") {
                            $userObject."MFA status" = "Disabled"
                        }
                    }
                    "#microsoft.graph.phoneAuthenticationMethod" {
                        $userObject."Phone authentication" = $true
                        $userObject."MFA status" = "Enabled"
                    }
                    "#microsoft.graph.softwareOathAuthenticationMethod" {
                        $userObject."Software Oath" = $true
                        $userObject."MFA status" = "Enabled"
                    }
                    "#microsoft.graph.temporaryAccessPassAuthenticationMethod" {
                        $userObject."Temporary Access Pass" = $true
                        $userObject."MFA status" = "Enabled"
                    }
                    "#microsoft.graph.windowsHelloForBusinessAuthenticationMethod" {
                        $userObject."Windows Hello for Business" = $true
                        $userObject."MFA status" = "Enabled"
                    }
                    # Below is deprecated but add it
                    "#microsoft.graph.passwordlessMicrosoftAuthenticatorAuthenticationMethod" {
                        $userObject."Passwordless Authenticator" = $true
                        $userObject."MFA status" = "Enabled"
                    }
                }
            }

            # Output the user object
            $userObject
        }
    }
}

# Export users to CSV
Get-AllMgUsers | Sort-Object "Display name" | Export-Csv -Path $Csvfile -NoTypeInformation -Encoding UTF8 #-Delimiter ";"

Bu şekilde görünüyor.

4. Adım. Azure AD kullanıcılarını dışarı aktarma PowerShell betiğini çalıştırın

komut dosyaları klasörünün yolunu değiştirin. Azure 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-AADUsers.ps1

5. Adım. Azure AD kullanıcılarının CSV dosyasını rapor ettiğini doğrulayın

Komut dosyaları klasörüne gidin ve AllAADUsers_ 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: Azure AD Connect'i yeni sunucuya geçirme »

Çözüm

Azure AD kullanıcılarını PowerShell ile 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? Azure AD Connect hesaplarını bulma konusunu da beğenebilirsiniz. Bizi takip etmeyi ve bu yazımızı paylaşmayı unutmayın.

İlgili makaleler