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

Azure Automation中PowerShell 7.2运行簿间共享变量与函数方法问询

Azure Automation运行簿间共享变量与通用函数的解决方案

环境与问题背景

  • 运行时环境:PowerShell 7.2
  • 现有两个Azure Automation运行簿:init和main
  • init运行簿内容:
$var1 = "hello"
$var2 = "world"

function Add-WB {
  param (
        [string]$P1, 
        [string]$P2
    )
  return "$P1 $P2"
}
  • main运行簿需调用init中的变量与函数,但两种尝试均失败:
    1. 使用. .\init.ps1的方式在PowerShell 5.1中正常工作,但PowerShell 7.2执行报错
    2. 通过Start-AutomationRunbook或Start-AzAutomationRunbook触发init执行后,main仍无法访问其变量与函数

可行解决方案

方法1:使用自定义模块共享(推荐)

将通用变量与函数打包为Azure Automation自定义模块,这是官方推荐的共享方式,兼容PowerShell 7.2:

  1. 创建脚本文件CommonFunctions.ps1,将init中的内容移入:
$var1 = "hello"
$var2 = "world"

function Add-WB {
  param (
        [string]$P1, 
        [string]$P2
    )
  return "$P1 $P2"
}
  1. 将脚本压缩为.zip包(确保压缩包直接包含脚本,无嵌套文件夹)
  2. 在Azure Automation账户的「模块」页面上传该zip包作为自定义模块
  3. 在main运行簿中导入并使用:
Import-Module CommonFunctions

Write-Output "test var1: $var1"
Write-Output "test var2: $var2"
Add-WB -P1 "wb1" -P2 "wb2"

方法2:通过脚本运行簿输出加载内容

修改init为脚本类型运行簿,输出变量与函数的定义代码,再在main中调用并执行:

  1. 修改init运行簿,输出可执行的脚本块:
# 输出变量定义
@'
$var1 = "hello"
$var2 = "world"
'@

# 输出函数定义
@'
function Add-WB {
  param (
        [string]$P1, 
        [string]$P2
    )
  return "$P1 $P2"
}
'@
  1. 在main运行簿中调用init并加载输出:
$automationAccountName = "你的自动化账户名"
$resourceGroupName = "你的资源组名"

# 调用init并获取输出内容
$initOutput = Invoke-AzAutomationRunbook -AutomationAccountName $automationAccountName `
  -ResourceGroupName $resourceGroupName `
  -Name "init" `
  -Wait `
  -ErrorAction Stop

# 执行输出中的脚本,加载变量与函数
$initOutput | ForEach-Object { Invoke-Expression $_ }

# 验证使用
Write-Output "test var1: $var1"
Write-Output "test var2: $var2"
Add-WB -P1 "wb1" -P2 "wb2"

注意:需确保main运行簿拥有调用Invoke-AzAutomationRunbook的权限。

方法3:全局变量共享(仅适用于变量)

若仅需共享变量,可使用Azure Automation全局变量:

  1. 在Azure Automation账户的「变量」页面,创建var1和var2全局变量并设置对应值
  2. 在main运行簿中直接读取:
$automationAccountName = "你的自动化账户名"
$resourceGroupName = "你的资源组名"

$var1 = Get-AzAutomationVariable -AutomationAccountName $automationAccountName `
  -ResourceGroupName $resourceGroupName `
  -Name "var1" `
  -ErrorAction Stop

$var2 = Get-AzAutomationVariable -AutomationAccountName $automationAccountName `
  -ResourceGroupName $resourceGroupName `
  -Name "var2" `
  -ErrorAction Stop

Write-Output "test var1: $var1"
Write-Output "test var2: $var2"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 11:53:23