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

Azure Runbook运行报错:无法找到'Test-AzPowerBIEmbeddedCapacity'命令的排查求助

嗨,我来帮你排查这个问题!你遇到的报错本质是**Test-AzPowerBIEmbeddedCapacity这个命令根本就不存在于Az.PowerBIEmbedded模块中**——不管你怎么更新模块,这个cmdlet都不会出现,因为微软并没有在该模块里提供这个测试资源是否存在的命令,这就是脚本报错的核心原因。

下面是具体的解决步骤和优化建议:

1. 替换“检查容量是否存在”的逻辑

用Get-AzPowerBIEmbeddedCapacity来替代不存在的Test-*命令,通过捕获异常的方式判断资源是否存在,这是Az模块中通用的资源检查方式:

# 检查PowerBI Embedded容量是否存在
try {
    $PBEmbCapacity = Get-AzPowerBIEmbeddedCapacity -Name $PowerBIEmbeddedName -ResourceGroupName $AzureResourceGroup -ErrorAction Stop
    $IsPBEmbExisit = $true
}
catch {
    $IsPBEmbExisit = $false
}
2. 替换旧的AzureRm登录命令为Az模块命令

你的脚本里用了Add-AzureRmAccount,这是旧版AzureRm模块的命令,而你安装的是新版Az模块,需要改用Connect-AzAccount适配服务主体登录:

"正在登录Azure..."
Connect-AzAccount `
    -ServicePrincipal `
    -TenantId $servicePrincipalConnection.TenantId `
    -ApplicationId $servicePrincipalConnection.ApplicationId `
    -CertificateThumbprint $servicePrincipalConnection.CertificateThumbprint
3. 建议放弃使用PowerShell工作流(Workflow)

Azure Automation现在更推荐使用普通PowerShell脚本而非工作流,因为工作流对Az模块的兼容性较差,很多新cmdlet不支持工作流环境。你可以把脚本改成普通PowerShell Runbook,去掉workflow关键字即可,修改后的完整脚本示例:

Param (
    [Parameter(Mandatory=$true)]
    [String] $AzureResourceGroup,
    [Parameter(Mandatory=$true)]
    [String] $PowerBIEmbeddedName,
    [Parameter(Mandatory=$true)]
    [Boolean] $Suspend
)

$connectionName = "AzureRunAsConnection"
try
{
    # 获取连接"AzureRunAsConnection "
    $servicePrincipalConnection=Get-AutomationConnection -Name $connectionName

    "正在登录Azure..."
    Connect-AzAccount `
        -ServicePrincipal `
        -TenantId $servicePrincipalConnection.TenantId `
        -ApplicationId $servicePrincipalConnection.ApplicationId `
        -CertificateThumbprint $servicePrincipalConnection.CertificateThumbprint
}
catch {
    if (!$servicePrincipalConnection)
    {
        $ErrorMessage = "未找到连接$connectionName。"
        throw $ErrorMessage
    } else{
        Write-Error -Message $_.Exception
        throw $_.Exception
    }
}

#检查PowerBI Embedded容量是否存在
try {
    $PBEmbCapacity = Get-AzPowerBIEmbeddedCapacity -Name $PowerBIEmbeddedName -ResourceGroupName $AzureResourceGroup -ErrorAction Stop
    $IsPBEmbExisit = $true
}
catch {
    $IsPBEmbExisit = $false
}

if($IsPBEmbExisit -eq $true)
{
    if($Suspend -eq $true )
    {
        try {
            #暂停服务
            "开始暂停$PowerBIEmbeddedName"
            $SuspendOperation = Suspend-AzPowerBIEmbeddedCapacity -Name $PowerBIEmbeddedName -ResourceGroupName $AzureResourceGroup -PassThru
            "$PowerBIEmbeddedName已成功暂停"
        }
        catch {
            Write-Error -Message $_.Exception
            throw $_.Exception
        }
    }
    else
    {
        try {
            #恢复服务
            "开始恢复$PowerBIEmbeddedName"
            $ResumeOperation = Resume-AzPowerBIEmbeddedCapacity -Name $PowerBIEmbeddedName -ResourceGroupName $AzureResourceGroup -PassThru
            "$PowerBIEmbeddedName已成功恢复"
        }
        catch {
            Write-Error -Message $_.Exception
            throw $_.Exception
        }
    }
}
else
{
    "提供的资源$PowerBIEmbeddedName不存在"
}
额外验证步骤
  • 确认自动化账户中已正确安装Az.PowerBIEmbedded和Az.Accounts模块,且版本为最新;
  • 可以在Runbook中添加Get-Module Az.PowerBIEmbedded命令,输出模块版本和可用cmdlet,确认模块是否正常加载;
  • 先在本地PowerShell环境测试修改后的脚本,确保逻辑无误再部署到自动化账户。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.01 00:54:08