在PowerShell中将JSON键值对转为Windows环境变量(GitHub Actions场景)
从JSON提取键值对并设置为GitHub Actions环境变量(Windows)
核心需求实现方案
你已经完成了JSON文件的读取与解析,接下来只需遍历解析后的JSON对象,将每个键值对导出为GitHub Actions环境变量即可。以下是完整的修正代码及说明:
完整YAML代码片段
name: Check Build Properties JSON Var File id: read-json shell: pwsh run: | # 简化JSON文件路径查找 $jsonfilePath = (Get-ChildItem -Path "${{ github.workspace }}\buildtools" -Recurse -Filter "buildproperties.json").FullName Write-Host "JSON文件路径: $jsonfilePath" # 读取并解析JSON(修复单引号格式问题) $jsonContent = Get-Content -Path $jsonfilePath -Raw # 注意:你的JSON中SemVer使用了单引号,不符合标准JSON规范,这里先替换为双引号避免解析失败 $jsonContent = $jsonContent -Replace "'", '"' $JsonParameters = ConvertFrom-Json -InputObject $jsonContent # 遍历键值对,导出为GitHub Actions环境变量 foreach ($prop in $JsonParameters.PSObject.Properties) { $varName = $prop.Name $varValue = $prop.Value # 写入GITHUB_ENV,后续步骤可直接通过${{ env.变量名 }}访问 Write-Output "$varName=$varValue" >> $env:GITHUB_ENV Write-Host "已设置环境变量: $varName=$varValue" }
后续步骤使用示例
在同一个Job的后续步骤中,你可以直接调用这些环境变量:
- name: 验证环境变量 shell: pwsh run: | Write-Host "UPACK工具路径: ${{ env.UPACKPATH }}" Write-Host "NuGet工具路径: ${{ env.NUGETPATH }}" Write-Host "版本号: ${{ env.SemVer }}" Write-Host "是否打包Portal: ${{ env.PackagePortal }}"
关键注意事项
- JSON格式修正:你提供的JSON中
SemVer值使用了单引号,这不符合标准JSON规范,会导致ConvertFrom-Json解析失败。代码中加入了单引号替换逻辑,建议你直接修改JSON文件,将所有字符串统一用双引号包裹。 - 环境变量作用域:通过
$env:GITHUB_ENV设置的环境变量仅在当前Job的后续步骤中生效,跨Job需要使用outputs传递。 - 特殊值处理:布尔值(如
PackagePortal: false)会被转为字符串False存储,使用时注意类型判断。
内容的提问来源于stack exchange,提问作者Princy
相关产品推荐
相关产品推荐

