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

脚本导出BulkObjectID.csv为空,求排查:设备名转Intune Object ID

解决Intune设备名转Object ID脚本输出为空的问题

嘿,我仔细看了你的脚本,发现几个关键问题导致输出的CSV是空的,马上帮你修正并解释原因:

核心问题分析

  1. 变量引用错误:你在foreach循环里写的$._DisplayName是完全错误的语法。循环变量是$DisplayName(我建议改成$device更清晰),正确引用CSV里的设备名应该是$device.DisplayName——前提是你的NEW.csv里的设备名列头确实是DisplayName,如果列头是别的(比如DeviceName),要对应修改。

  2. Filter语法与引号问题:当设备名包含空格或特殊字符时,单引号的嵌套写法容易出问题,而且Get-AzureADDevice的Filter对字符串的匹配需要准确的格式。

  3. Export-Csv的冗余参数:你用了-append,但实际上你已经把所有结果存在数组里,直接导出即可,-append在数组为空时反而会生成空文件。

修正后的可运行脚本

Connect-AzureAD

# 导入CSV文件,务必确认列名是否为DisplayName,不是的话改下面的$device.DisplayName
$csv = Import-Csv C:\Tools\NEW.csv
$ObjectID = @()

foreach ($device in $csv) {
    $targetDeviceName = $device.DisplayName
    Write-Host "正在检索设备: $targetDeviceName"
    
    # 修正Filter语法,确保设备名能被正确匹配
    $matchedDevice = Get-AzureADDevice -Filter "DisplayName eq '$targetDeviceName'" | Select-Object ObjectID
    
    if ($matchedDevice) {
        $ObjectID += $matchedDevice
        Write-Host "✅ 找到设备Object ID: $($matchedDevice.ObjectID)"
    } else {
        Write-Warning "❌ 未找到设备: $targetDeviceName"
        # 把未找到的设备也记录到CSV里,方便后续排查
        $ObjectID += [PSCustomObject]@{
            ObjectID = "未匹配到设备: $targetDeviceName"
        }
    }
}

# 先在控制台输出结果,方便你即时查看
$ObjectID

# 导出到CSV,加-NoTypeInformation避免生成多余的类型行,UTF8编码兼容更多工具
$ObjectID | Export-Csv -Path 'C:\Tools\BulkObjectID.csv' -NoTypeInformation -Encoding UTF8

额外排查建议

  • 核对CSV列名:打开NEW.csv,确认设备名所在列的表头是不是DisplayName,如果是设备名称或者DeviceName,一定要把脚本里的$device.DisplayName改成对应的列名。
  • 检查权限:确保你的账号有读取Azure AD设备的权限,至少需要Directory Readers角色,否则会看不到设备。
  • 设备名准确性:Azure AD里的设备名可能和你CSV里的有细微差别(比如大小写、空格、后缀),尽量完全匹配,或者可以用模糊匹配的Filter(比如startswith(DisplayName, '$targetDeviceName')),不过精准匹配更可靠。
  • 调试信息:脚本里加了控制台输出,运行时能看到每一步的状态,方便你知道哪些设备没找到。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 17:10:48