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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 21:54:03