PowerShell通过PC名查询Azure AD设备所有者UPN脚本报错求助
错误根因
- 你遍历
Import-Csv返回的集合时,拿到的$DisplayName是结构化对象而非纯字符串,直接代入过滤参数会被序列化为@{属性名=属性值}的格式,不符合过滤语法要求 - 你使用了
ft(Format-Table)处理查询结果,该命令返回的是格式化渲染对象而非原始数据,后续无法正常用于设备所有者查询 - AzureAD设备过滤语法要求字符串匹配值必须用单引号包裹,你当前的写法缺少引号包裹逻辑
- 无需中间导出两次CSV做中转,单循环即可完成全流程查询,减少冗余操作
可用完整脚本
# 连接AzureAD(首次运行会弹出身份验证窗口) Connect-AzureAD # 导入设备名称CSV,此处假设CSV中设备名称的列名为DisplayName,若列名不同请自行替换 $deviceList = Import-Csv C:\Tools\chatelet.csv # 初始化结果集合 $result = @() foreach ($device in $deviceList) { # 取当前行的纯设备名称值 $deviceName = $device.DisplayName # 按设备名查询设备对象,过滤语法符合AzureAD要求 $adDevice = Get-AzureADDevice -Filter "DisplayName eq '$deviceName'" if ($adDevice) { # 查询设备注册所有者 $owner = Get-AzureADDeviceRegisteredOwner -ObjectId $adDevice.ObjectId # 组装结果项 $result += [PSCustomObject]@{ 设备名称 = $deviceName 设备ObjectID = $adDevice.ObjectId 所有者邮箱 = $owner.Mail 所有者UPN = $owner.UserPrincipalName } } else { # 处理AAD中查不到的设备 $result += [PSCustomObject]@{ 设备名称 = $deviceName 设备ObjectID = "未找到对应设备" 所有者邮箱 = "无" 所有者UPN = "无" } } } # 导出最终结果到CSV $result | Export-Csv -Path C:\Tools\设备所有者查询结果.csv -Encoding UTF8 -NoTypeInformation
如果你的CSV里设备名称的列名不是DisplayName,把$device.DisplayName里的属性名改成你实际的列名即可。
内容的提问来源于stack exchange,提问作者Guillaume vM M
相关产品推荐
相关产品推荐

