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
相关产品推荐
相关产品推荐

