Azure自动化账户:获取当前运行Runbook名称失败求助
获取Azure自动化Runbook当前运行名称的解决方法
问题原因
在Azure自动化Runbook的执行环境中,$MyInvocation.MyCommand的上下文与本地PowerShell不同,它指向的是自动化服务内部的执行宿主脚本,而非当前运行的Runbook,因此直接调用$MyInvocation.MyCommand.Name会返回空白。
可行解决方案
方法一:通过作业ID查询Runbook名称
这是最可靠的方式,通过Azure自动化模块获取当前作业详情,从中提取Runbook名称:
# 获取当前作业的GUID $jobId = $PSPrivateMetadata.JobId.Guid # 替换为你的自动化账户名和资源组名 $automationAccountName = "你的自动化账户名称" $resourceGroupName = "你的资源组名称" # 获取作业信息并提取Runbook名称 $jobDetails = Get-AzAutomationJob -AutomationAccountName $automationAccountName -ResourceGroupName $resourceGroupName -Id $jobId $currentRunbookName = $jobDetails.RunbookName Write-Output "当前运行的Runbook名称:$currentRunbookName"
注意:需要确保Runbook的执行账户拥有对应自动化账户的读取权限,且已在自动化账户中导入
Az.Automation模块。
方法二:使用自动化变量预定义名称
如果Runbook名称固定不变,可以预先在自动化账户中创建一个字符串变量(例如命名为CurrentRunbookName),将其值设为Runbook的名称,然后在Runbook中读取:
$currentRunbookName = Get-AutomationVariable -Name "CurrentRunbookName" Write-Output "当前运行的Runbook名称:$currentRunbookName"
这种方式更轻量,但需要手动维护变量值,不适用于Runbook名称可能变更的场景。
内容的提问来源于stack exchange,提问作者Kez
相关产品推荐
相关产品推荐

