解决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
相关产品推荐
相关产品推荐

