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

Azure Pipelines中用PowerShell给JSON的MedID赋值报错求助

Azure Pipelines中修改存储账户下载的JSON字段问题解决方案

问题描述

在非内联Azure Pipelines环境下,需将变量值填入从存储账户下载的JSON文件中空的MedID字段(JSON包含MedUnits数组,其中MedID字段为空)。执行PowerShell脚本时遇到两类路径错误:

  • Get-Content : Illegal characters in path
  • 移除路径中的.\后出现Get-Content : Cannot find drive. A drive with the name '{"MedUnits"' does not exist.

尝试的脚本片段:

#从存储账户下载文件
$unitsFile = Invoke-WebRequest -URI "https://storage.blob.core.windows.net/folder/${json}?sv=TOKEN"

$JsonData = Get-Content -Path .\$unitsFile | ConvertFrom-Json
$JsonData.update | % { if($JsonData.MedUnits.MedID){$JsonData.MedUnits.MedID= "$ID"}}
$JsonData | ConvertTo-Json -Depth 4  | set-content $unitsFile

错误原因

Invoke-WebRequest返回的是HTTP响应对象,并非本地文件路径或文件名。直接将该对象传给Get-Content或Set-Content,会导致PowerShell把响应的JSON内容当成路径解析,进而触发非法字符或找不到驱动器的错误。

修正后的脚本

# 定义本地保存的文件名
$localFilePath = ".\med_units.json"

# 从存储账户下载文件并保存到本地
Invoke-WebRequest -Uri "https://storage.blob.core.windows.net/folder/${json}?sv=TOKEN" -OutFile $localFilePath

# 读取本地JSON文件并解析
$JsonData = Get-Content -Path $localFilePath | ConvertFrom-Json

# 遍历MedUnits数组,为空的MedID赋值
foreach ($unit in $JsonData.MedUnits) {
    if (-not $unit.MedID) { # 判断MedID是否为空
        $unit.MedID = "$ID" # 替换为目标变量值
    }
}

# 将修改后的JSON写回本地文件
$JsonData | ConvertTo-Json -Depth 4 | Set-Content -Path $localFilePath

关键说明

  • 先通过-OutFile参数将下载内容保存到本地文件,确保后续操作的是合法文件路径
  • 遍历MedUnits数组时,需逐个处理数组内的元素,而非直接操作整个数组的MedID属性
  • 使用-not $unit.MedID判断字段是否为空,逻辑更准确(原脚本的if($JsonData.MedUnits.MedID)仅判断数组是否存在该属性,而非每个元素的字段是否为空)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 10:27:17