当前位置:网站首页 > 更多 > 玩电脑 > 正文

[玩转系统] 使用 PowerShell 将 Azure AD 用户导出到 CSV

作者:精品下载站 日期:2024-12-14 18:37:55 浏览:14 分类:玩电脑

使用 PowerShell 将 Azure AD 用户导出到 CSV


我们希望使用 PowerShell 将 Azure AD 用户信息导出到 CSV。为什么我们需要使用 PowerShell 列出 Azure AD 用户?例如,我们想知道每个 Azure AD 用户在 Azure Active Directory 中是否具有正确的属性。那是因为服务台需要这些信息。在本文中,您将了解如何使用 PowerShell 将 Azure Active Directory 用户导出到 CSV 文件。

导出Azure AD用户信息的PowerShell脚本

Export-AADUsers.ps1 PowerShell 脚本将针对 Azure 租户运行。之后,它将报告导出为 CSV 文件。您可以使用 Microsoft Excel 或支持 CSV 文件扩展名的任何其他应用程序打开 CSV 文件。

该脚本将收集每个用户的以下信息:

  1. ID

  2. 显示名称

  3. 用户主体名称

  4. 电子邮件地址

  5. 职称

  6. 经理显示名称

  7. 管理员用户主体名称

  8. 部门

  9. 公司

  10. 办公室

  11. 员工ID

  12. 移动的

  13. 电话

  14. 街道

  15. 城市

  16. 邮政编码

  17. 状态

  18. 国家

  19. 用户类型

  20. 本地同步

  21. 帐户状态

  22. 帐户创建于

  23. 上次登录(需要 Azure AD P1/P2 许可证)

  24. 领有牌照

  25. MFA状态(包括身份验证方法)

使用 PowerShell 将 Azure Active Directory 用户导出到 CSV

让我们完成这些步骤并使用 PowerShell 将 Azure Active Directory 用户导出到 CSV 文件。

步骤 1. 安装 Microsoft Graph PowerShell

以管理员身份运行 Windows PowerShell 并安装 Microsoft Graph PowerShell。

重要提示:您需要 Microsoft Graph 2.0 或更高版本才能使用新参数。

注意:我们建议同时安装 Microsoft Graph 和 Microsoft Graph Beta 模块。这是因为某些 cmdlet 在最终版本中尚不可用,并且无法运行。

以管理员身份运行 Windows PowerShell 并检查 Microsoft Graph 版本。

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 版本。

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. 连接到 Microsoft Graph PowerShell

使用 Microsoft Graph PowerShell 连接到 Azure Active Directory (AAD)。

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

输入您的全局管理员凭据并接受 Microsoft Graph 权限请求。

步骤 3. 准备导出 Azure AD 用户 PowerShell 脚本

(C:)驱动器上创建两个文件夹:

  • 温度

  • 脚本

下载 Export-AADUsers.ps1 PowerShell 脚本并将其放置在 C:\scripts 文件夹中。该脚本会将 CSV 文件导出到 C:\temp 文件夹。

确保文件未被阻止,以防止运行脚本时出现错误。请阅读文章运行 PowerShell 脚本时出现未数字签名错误来了解更多信息。

另一种选择是将以下代码复制并粘贴到记事本中。将其命名为 Export-AADUsers.ps1 并将其放置在 C:\scripts 文件夹中。

<#
    .SYNOPSIS
    Export-AADUsers.ps1

    .DESCRIPTION
    Export Azure Active Directory users to CSV file.

    .LINK
    www.a-d.site/export-azure-ad-users-to-csv-powershell

    .NOTES
    Written by: ALI TAJRAN
    Website:    www.a-d.site
    LinkedIn:   linkedin.com/in/a-d

    .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 ";"

这就是它的样子。

[玩转系统] 使用 PowerShell 将 Azure AD 用户导出到 CSV

步骤 4. 运行导出 Azure AD 用户 PowerShell 脚本

更改 scripts 文件夹的路径。运行 PowerShell 脚本将 Azure AD 用户导出到 CSV 文件。等到它完成。

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

步骤 5. 验证 Azure AD 用户报告 CSV 文件

转到脚本文件夹并验证您是否看到 AllAADUsers_ 文件。

[玩转系统] 使用 PowerShell 将 Azure AD 用户导出到 CSV

使用您喜欢的应用程序打开 CSV 文件。在我们的示例中,它是 Microsoft Excel。

[玩转系统] 使用 PowerShell 将 Azure AD 用户导出到 CSV

一切看起来都很棒!

了解更多:将 Azure AD Connect 迁移到新服务器 »

结论

您了解了如何使用 PowerShell 将 Azure AD 用户导出到 CSV。每个用户帐户中都包含大量信息。使用 PowerShell,您可以获得适合您需求的自定义报告。

您喜欢这篇文章吗?您可能还喜欢查找 Azure AD Connect 帐户。不要忘记关注我们并分享这篇文章。

您需要 登录账户 后才能发表评论

取消回复欢迎 发表评论:

关灯