求助:用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访问权限。
- Azure AD环境:需提前安装
- 字段自定义:可根据需求扩展用户信息字段,比如添加部门、联系电话,只需在获取用户时补充对应属性(如
-Properties Department, Mobile)。
排查与优化建议
- 若出现匹配失败,可添加日志输出定位问题:
# 在合并步骤中添加 if (-not $device) { Write-Warning "未找到计算机 $computerName 的ObjectID数据" } - 处理大量设备时,建议添加分批拉取逻辑,避免触发AD/Azure AD的API请求限制。
内容的提问来源于stack exchange,提问作者sathish
相关产品推荐
相关产品推荐

