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

寻求GitHub Actions自动化Azure Wiki的PowerShell脚本帮助

解决Azure Wiki与GitHub README同步的PowerShell脚本及GitHub Actions配置

原脚本的问题

你的脚本没法正常工作主要是这几个问题:

  • 循环变量用错了:遍历文件列表时,内部代码用了整个列表$Path而非当前处理的$item,导致每次都重复读取所有文件
  • 过滤条件不对:Where-Object {$_ -like '.png'}只会匹配完全等于.png的行,根本抓不到包含图片链接的行
  • 替换没生效:$entry -replace只是返回修改后的字符串,既没存到变量里,也没写回文件
  • 写文件逻辑错误:Set-Content直接写整个$Path列表,而且没传入修改后的内容
  • 匹配范围太窄:只替换固定的image.png,没法处理所有.png格式的图片

正确的PowerShell脚本

这个脚本会批量处理指定的README文件,自动把所有.png图片链接替换成Azure Wiki能识别的格式:

# 定义需要处理的README文件路径(相对仓库根目录,不要开头的/)
$readmePaths = @(
    "community/widgets/document-details/readme.md",
    ".pipeline/readme.md",
    "examples/widgets/conference-session/readme"
)

# 正则表达式:匹配所有.png链接(支持![alt](xxx.png) 或 [link](xxx.png) 格式,包括绝对URL和相对路径)
$pngPattern = '(\bhttps?://\S+\.png|\b[^()\s]+\.png)'
$replacement = '/.attachments/$1'

foreach ($path in $readmePaths) {
    # 先检查文件是否存在,避免报错
    if (-not (Test-Path $path)) {
        Write-Warning "跳过不存在的文件:$path"
        continue
    }

    # 一次性读取整个文件内容,避免逐行处理的麻烦
    $content = Get-Content $path -Raw -Encoding UTF8
    # 批量替换所有符合规则的.png链接
    $updatedContent = $content -replace $pngPattern, $replacement

    # 把修改后的内容写回文件
    Set-Content $path -Value $updatedContent -Encoding UTF8
    Write-Host "已完成文件处理:$path"
}

脚本说明

  • 用-Raw参数一次性读取整个文件,解决逐行处理时的换行问题
  • 正则表达式能匹配所有常见的.png链接格式,不管是绝对URL还是相对路径
  • 自动替换成Azure Wiki要求的/.attachments/前缀格式
  • 加入文件存在检查,避免因文件缺失导致流程中断
  • 用UTF8编码确保文件格式兼容GitHub和Azure Wiki

GitHub Actions工作流配置

创建.github/workflows/sync-azure-wiki.yml文件,实现代码推送时自动同步:

name: Sync Azure Wiki with READMEs

on:
  # 当指定的README文件推送到main分支时自动触发
  push:
    branches: [ main ]
    paths:
      - 'community/widgets/document-details/readme.md'
      - '.pipeline/readme.md'
      - 'examples/widgets/conference-session/readme'
  workflow_dispatch: # 允许手动触发同步

jobs:
  sync-wiki:
    runs-on: ubuntu-latest
    steps:
      - name: 拉取仓库代码
        uses: actions/checkout@v4

      - name: 运行PowerShell脚本修改图片链接
        shell: pwsh
        run: |
          # 假设脚本放在scripts目录下,根据实际路径调整
          ./scripts/update-wiki-image-links.ps1

      - name: 登录Azure账号
        uses: azure/login@v2
        with:
          creds: ${{ secrets.AZURE_CREDENTIALS }}

      - name: 同步到Azure Wiki
        shell: pwsh
        run: |
          # 替换成你的Azure Wiki名称、资源组和对应页面路径
          az wiki page update --name "你的Wiki名称" --resource-group "你的资源组" --path "DocumentDetails" --content-file "community/widgets/document-details/readme.md"
          az wiki page update --name "你的Wiki名称" --resource-group "你的资源组" --path "PipelineDocs" --content-file ".pipeline/readme.md"
          az wiki page update --name "你的Wiki名称" --resource-group "你的资源组" --path "ConferenceSessionExample" --content-file "examples/widgets/conference-session/readme"

配置说明

  • 触发逻辑:只有当指定的README文件被修改并推送到main分支时才运行,也支持手动触发
  • 核心步骤:拉取代码→修改图片链接→登录Azure→把处理后的README内容上传到对应Wiki页面
  • 需要在GitHub仓库的Secrets中添加AZURE_CREDENTIALS,内容是Azure服务主体的认证信息

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 19:56:14