You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:用PowerShell整合计算机名与对应用户信息至单CSV文件

整合AD设备与用户信息的PowerShell脚本

以下是满足需求的完整脚本,它会读取输入的计算机名CSV,合并已有的设备ObjectID和用户邮箱数据,再通过UPN拉取用户详细信息,最终输出整合后的CSV文件:

# 配置文件路径
$inputComputersCsv = ".\computers.csv"       # 输入的计算机名CSV(需包含ComputerName列)
$existingDeviceDataCsv = ".\device_objectid.csv" # 已有的设备ObjectID数据(需包含ComputerName和ObjectID列)
$existingUserUpnCsv = ".\user_upn.csv"       # 已有的用户邮箱/UPN数据(需包含ObjectID和UserPrincipalName列)
$outputCombinedCsv = ".\combined_device_user_info.csv"

# 1. 读取所有输入数据
$computers = Import-Csv -Path $inputComputersCsv
$deviceData = Import-Csv -Path $existingDeviceDataCsv
$userUpnData = Import-Csv -Path $existingUserUpnCsv

# 2. 合并设备数据与用户UPN数据
$combinedDeviceUser = $computers | ForEach-Object {
    $computerName = $_.ComputerName
    # 匹配对应设备的ObjectID
    $device = $deviceData | Where-Object { $_.ComputerName -eq $computerName }
    # 通过ObjectID匹配用户UPN
    $userUpn = $userUpnData | Where-Object { $_.ObjectID -eq $device.ObjectID }

    [PSCustomObject]@{
        ComputerName        = $computerName
        DeviceObjectID      = $device.ObjectID
        UserPrincipalName   = $userUpn.UserPrincipalName
    }
} | Where-Object { $_.UserPrincipalName -ne $null } # 过滤无匹配用户的设备

# 3. 通过UPN获取用户详细信息(根据环境选择Azure AD或本地AD)
# 若使用Azure AD,先运行:Connect-AzureAD
# 若使用本地AD,先运行:Import-Module ActiveDirectory
$finalResults = $combinedDeviceUser | ForEach-Object {
    $upn = $_.UserPrincipalName
    # Azure AD版本
    $user = Get-AzureADUser -Filter "UserPrincipalName eq '$upn'"
    # 本地AD版本(替换上方Azure AD命令)
    # $user = Get-ADUser -Filter { UserPrincipalName -eq $upn } -Properties EmailAddress, City, Office

    [PSCustomObject]@{
        ComputerName        = $_.ComputerName
        DeviceObjectID      = $_.DeviceObjectID
        UserPrincipalName   = $upn
        UserEmail           = $user.Mail # AzureAD用Mail,本地AD替换为EmailAddress
        UserCity            = $user.City
        UserOfficeLocation  = $user.OfficeLocation # AzureAD用OfficeLocation,本地AD替换为Office
        UserDisplayName     = $user.DisplayName
    }
}

# 4. 输出最终整合CSV
$finalResults | Export-Csv -Path $outputCombinedCsv -NoTypeInformation -Encoding UTF8
Write-Host "整合完成,结果已保存至 $outputCombinedCsv"

关键细节说明

  • 数据关联逻辑:通过ComputerName匹配设备ObjectID,再通过ObjectID关联用户UPN,确保每台设备对应到正确的用户身份。
  • 环境适配:根据你的AD环境选择对应命令:
    • Azure AD环境:需提前安装AzureAD模块(Install-Module AzureAD),并运行Connect-AzureAD完成登录。
    • 本地AD环境:确保已加载ActiveDirectory模块,且脚本运行账号有AD访问权限。
  • 字段自定义:可根据需求扩展用户信息字段,比如添加部门、联系电话,只需在获取用户时补充对应属性(如-Properties Department, Mobile)。

排查与优化建议

  • 若出现匹配失败,可添加日志输出定位问题:
    # 在合并步骤中添加
    if (-not $device) {
        Write-Warning "未找到计算机 $computerName 的ObjectID数据"
    }
    
  • 处理大量设备时,建议添加分批拉取逻辑,避免触发AD/Azure AD的API请求限制。

内容的提问来源于stack exchange,提问作者sathish

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 21:09:29