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

解决GitHub Actions workflow_dispatch输入写入文件的PowerShell报错问题

解决GitHub Actions workflow_dispatch输入一次性写入文件的PowerShell报错问题

问题场景

想要把GitHub Actions的workflow_dispatch用户输入一次性写入文件,再用PowerShell读取,但执行时触发PowerShell语法错误,提示Unexpected token ':' in expression or statement。

错误原因

${{ toJson(github.event.inputs) }}会直接把JSON内容输出到PowerShell脚本里,生成的代码是不带引号的JSON对象:

$Inputs = {
    "input1": "Default Value 1",
    "input2": "Default Value 2",
    "input3": "Default Value 3"
} | ConvertFrom-Json

PowerShell会把{}解析为脚本块而非JSON字符串,里面的:符号不符合脚本块语法,直接引发报错。

解决方法

推荐用环境变量传递JSON的方式,既能避免直接嵌入JSON导致的语法冲突,又能适配任意数量的输入参数,无需逐个修改脚本。

修改后的完整工作流:

name: Redirect Inputs to File

on:
  workflow_dispatch:
    inputs:
      input1:
        description: 'Input 1'
        required: true
        default: 'Default Value 1'
      input2:
        description: 'Input 2'
        required: true
        default: 'Default Value 2'
      input3:
        description: 'Input 3'
        required: true
        default: 'Default Value 3'

jobs:
  redirect-inputs:
    runs-on: windows-latest
    
    steps:
      - name: Checkout repository
        uses: actions/checkout@v4

      - name: Dump inputs to file via PowerShell
        shell: pwsh
        env:
          # 将输入序列化为JSON后存入环境变量
          INPUTS_JSON: ${{ toJson(github.event.inputs) }}
        run: |
          # 从环境变量读取JSON并转换为PowerShell对象
          $Inputs = $env:INPUTS_JSON | ConvertFrom-Json
          
          # 转换回JSON并写入文件
          $InputData = $Inputs | ConvertTo-Json
          $InputData | Out-File -FilePath inputs.json -Encoding utf8
          
          # 验证文件内容
          Get-Content -Path inputs.json

      - name: Read inputs from file
        shell: pwsh
        run: |
          # 读取文件并解析为对象
          $InputData = Get-Content -Path inputs.json -Raw | ConvertFrom-Json
          
          # 遍历所有输入(适配任意数量的输入,无需逐个定义变量)
          foreach ($key in $InputData.PSObject.Properties.Name) {
              Write-Output "$key: $($InputData.$key)"
          }

关键修改说明

  • 环境变量传递JSON:通过env字段把github.event.inputs序列化为JSON后存入INPUTS_JSON,PowerShell读取环境变量时会自动处理字符串格式,彻底避免语法冲突。
  • 适配任意输入:读取文件后用foreach遍历所有属性,无需手动为每个输入定义变量,完全满足“任意工作流任意输入”的要求。
  • 指定编码:添加-Encoding utf8避免Windows默认编码导致的乱码问题。

效果验证

执行工作流后,会成功生成inputs.json文件,并且能正确输出所有输入的键值对,后续新增workflow_dispatch输入时,无需修改脚本即可适配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 10:55:37