寻求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链接(支持 或 [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
相关产品推荐
相关产品推荐

