PowerShell遍历Azure AD用户:设备数分列与CSV导出问题
Azure AD用户注册设备数统计脚本问题修复
原脚本核心问题定位
- 数据结构缺陷:脚本将用户信息、设备数作为两次独立的命令输出,没有绑定为同一个对象的关联属性,导致两类数据完全割裂,无法形成规范的独立列展示
- 导出逻辑错误:
Export-Csv参数和路径之间缺失空格(-append.\cuenta.csv属于语法错误);逐行单独追加数值到CSV的方式,既不会生成规范的列头,多次写入也会造成CSV列结构错位、数据混乱。
修正后可直接运行的脚本
# 读取待查询的用户ID清单 $targetUsers = Get-Content .\usersid.csv $finalResult = @() foreach ($userId in $targetUsers) { # 获取对应用户的Azure AD信息 $userInfo = Get-AzureADUser -ObjectId $userId # 计算注册设备数,通过Measure-Object兼容无设备时的空返回场景,避免count值为null $deviceTotal = (Get-AzureADUserRegisteredDevice -ObjectId $userId | Measure-Object).Count # 封装带固定属性的自定义对象,确保两类数据一一对应 $finalResult += [PSCustomObject]@{ 用户主体名 = $userInfo.UserPrincipalName 注册设备数量 = $deviceTotal } } # 一次性批量导出,避免逐行追加的结构问题,指定编码防止中文乱码 $finalResult | Export-Csv -Path .\cuenta.csv -NoTypeInformation -Encoding UTF8
修复后的效果
- 导出的CSV自动生成两个独立列,分别对应用户名、注册设备数,两类数据严格一一匹配,不存在错位
- 全量结果统一一次性写入,彻底解决逐行追加导致的CSV结构损坏问题;对没有注册设备的用户,会自动填值为0,不会出现空值异常
- 自动补充规范的列头,打开CSV即可直接查看统计结果
内容的提问来源于stack exchange,提问作者b1gb1rd
相关产品推荐
相关产品推荐

