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

如何在GitHub Action中用PowerShell生成哈希文件并保存下载文件?

解决GitHub Actions中用PowerShell保存文件到仓库的问题

你的核心问题是:GitHub Actions运行器(runner)是临时环境,生成的文件不会自动同步回仓库,必须手动执行Git提交和推送操作。以下是完整的实现方案,完全手动编写工作流,不依赖预制Action:

1. 调整PowerShell脚本(script.ps1)

把原脚本替换为更规范的PowerShell写法,同时实现文件下载和哈希保存:

# 替换为你要下载的文件实际URL
$pkgurl = 'https://example.com/your-target-file.ext'
# 下载文件到仓库根目录,可自定义文件名
$downloadedFileName = 'downloaded-file.ext'

# 下载文件
Invoke-WebRequest -Uri $pkgurl -OutFile ".\$downloadedFileName"

# 计算SHA512哈希并保存到sss.txt(确保UTF-8编码)
Get-FileHash -Path ".\$downloadedFileName" -Algorithm SHA512 | 
    Select-Object -ExpandProperty Hash | 
    Out-File .\sss.txt -Encoding utf8

2. 更新工作流配置文件

在原工作流基础上,添加Git身份配置和提交推送步骤:

name: Get Hash & Download File
on: [workflow_dispatch]

jobs:
  build:
    name: Run Script & Push Changes
    runs-on: windows-latest
    steps:
      - name: 检出仓库代码
        uses: actions/checkout@v3

      - name: 运行PowerShell脚本
        run: .\script.ps1
        shell: pwsh

      - name: 配置Git身份
        run: |
          git config --global user.name "GitHub Actions"
          git config --global user.email "actions@github.com"
        shell: pwsh

      - name: 提交并推送变更
        run: |
          # 仅添加需要同步的文件
          git add .\$downloadedFileName .\sss.txt
          # 检查是否有实际变更,避免空提交报错
          if (-not (git diff --quiet && git diff --staged --quiet)) {
              git commit -m "Update downloaded file and hash"
              git push
          }
        shell: pwsh

关键说明

  • Git身份配置:运行器默认没有Git用户信息,必须配置后才能提交代码。
  • 空提交避免:用git diff检查文件是否有实际变更,只有当内容变化时才执行提交,防止工作流因空提交失败。
  • 编码问题:用Out-File -Encoding utf8确保生成的文本文件编码与仓库一致,避免乱码。
  • 权限说明:GitHub Actions默认提供的GITHUB_TOKEN拥有仓库的写入权限,无需额外配置密钥即可推送变更。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 09:20:22