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

无法将数组值传入Invoke-RestMethod的URL字符串求助

问题原因及解决方法

核心问题

在PowerShell双引号字符串中,$report[0]的解析逻辑不符合预期:PowerShell会先将$report展开为数组的字符串表示(所有元素用逗号分隔),再直接拼接[0],导致请求URL的q参数完全错误,自然返回结果不符合预期。

修正方案

方案1:使用子表达式正确解析数组索引

用$()包裹数组索引操作,让PowerShell先执行$report[0]再将结果插入字符串:

$headers=@{}
$headers.Add("Content-Type", "application/json")
$headers.Add("Authorization", "Bearer mykeyhere")
# 用$()确保正确获取数组第一个元素
$response = Invoke-RestMethod -Uri "https://app.ninjarmm.com/v2/devices/search?q=$($report[0])" -Method GET -Headers $headers

方案2:添加URL编码(更严谨)

如果设备名称包含空格、&、?等特殊字符,直接拼接会破坏URL结构,建议先对设备名进行URL编码:

$headers=@{}
$headers.Add("Content-Type", "application/json")
$headers.Add("Authorization", "Bearer mykeyhere")

# 对数组第一个元素进行URL编码
$encodedDeviceName = [Uri]::EscapeDataString($report[0])
$response = Invoke-RestMethod -Uri "https://app.ninjarmm.com/v2/devices/search?q=$encodedDeviceName" -Method GET -Headers $headers

扩展:遍历所有设备查询

如果需要批量查询90台设备的信息,可以用循环处理:

$headers=@{}
$headers.Add("Content-Type", "application/json")
$headers.Add("Authorization", "Bearer mykeyhere")

# 遍历数组中每一台设备
foreach ($deviceName in $report) {
    $encodedName = [Uri]::EscapeDataString($deviceName)
    $response = Invoke-RestMethod -Uri "https://app.ninjarmm.com/v2/devices/search?q=$encodedName" -Method GET -Headers $headers
    
    # 示例:将每台设备的查询结果保存到CSV文件
    $response | Export-Csv -Path "Boston_Devices_Report.csv" -NoTypeInformation -Append
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 03:45:40