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

Terraform导入PS Gallery的Azure自动化Runbook内容异常,如何获取原始代码?

问题根源

你使用的PS Gallery API URL返回的是nupkg压缩包(本质为ZIP格式),而Azure自动化的publish_content_link期望读取纯文本格式的PowerShell代码资源。当服务尝试解析二进制压缩包时,就会显示乱码问号。

解决方案

方法一:提取包内脚本并内嵌到Terraform配置

通过Terraform的external数据源调用PowerShell脚本,自动下载、解压nupkg包并提取其中的PS1文件内容,再将内容直接内嵌到Runbook资源中。

步骤1:创建提取脚本

在Terraform模块目录下创建extract_runbook.ps1文件:

param(
    [string]$PackageUri
)

# 临时路径配置
$tempPackage = Join-Path $env:TEMP "temp_runbook.nupkg"
$extractDir = Join-Path $env:TEMP "runbook_extract"

# 清理旧文件
if (Test-Path $tempPackage) { Remove-Item $tempPackage -Force }
if (Test-Path $extractDir) { Remove-Item $extractDir -Recurse -Force }

# 下载包
Invoke-WebRequest -Uri $PackageUri -OutFile $tempPackage

# 解压包
Expand-Archive -Path $tempPackage -DestinationPath $extractDir

# 查找目标PS1文件(如需指定文件名,可修改Filter参数)
$ps1File = Get-ChildItem -Path $extractDir -Filter "*.ps1" -Recurse | Select-Object -First 1
if (-not $ps1File) {
    Write-Error "未在包中找到PS1文件"
    exit 1
}

# 读取并返回脚本内容
@{ content = Get-Content $ps1File.FullName -Raw } | ConvertTo-Json

步骤2:修改Terraform配置

引入external数据源获取脚本内容,替换publish_content_link为inline_content:

data "external" "runbook_content" {
  program = ["powershell.exe", "-File", "${path.module}/extract_runbook.ps1", "-PackageUri", var.import_runbook.uri]
}

resource "azurerm_automation_runbook" "imported_runbook" {
  name                    = var.import_runbook.name
  resource_group_name     = var.resource_group_name
  automation_account_name = var.automation_account_name
  location                = var.location
  log_verbose             = var.debug
  log_progress            = var.debug
  tags                    = var.tags
  runbook_type            = "PowerShell"

  inline_content = data.external.runbook_content.result.content
}

方法二:直接使用原始脚本的纯文本URL

如果该PS Gallery包的源码托管在公开仓库(如GitHub),可以直接找到对应版本PS1文件的原始文本URL,替换到publish_content_link的uri字段中。示例配置如下:

resource "azurerm_automation_runbook" "imported_runbook" {
  # 其他配置保持不变
  publish_content_link {
    uri = "https://raw.githubusercontent.com/[用户名]/[仓库名]/[分支]/Stop-SAPHANA.ps1"
  }
}

注意事项

  • 方法一要求运行Terraform的环境具备PowerShell 5.1+或PowerShell Core,且有网络权限下载和解压文件。
  • 若包内包含多个PS1文件,需修改提取脚本的Filter参数,指定你需要的具体文件名。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 02:25:51