Azure自动化Runbook报错az不是可识别cmdlet/程序修复方法
问题根因
报错核心原因是*az是Azure CLI的专属命令,不属于你导入的PowerShell Az模块范畴*:
- 你在自动化账户中导入的Az模块,是供PowerShell原生Azure cmdlet(比如
Add-AzAccount、Set-AzAppServicePlan)调用的依赖,和Azure CLI是两套完全独立的Azure管理工具 - Azure自动化账户的默认运行沙箱没有预装Azure CLI,自然无法识别
az命令;你本地能运行是因为本地环境提前安装了Azure CLI - 额外注意:
Add-AzAccount完成的是PowerShell Az模块的认证,和Azure CLI的认证态不互通,就算沙箱装了CLI,也不能直接复用这个登录结果。
修复方案
方案1:替换为Az模块原生命令(推荐,无额外依赖、稳定性最高)
直接用你已经导入好的Az模块自带的Set-AzAppServicePlan cmdlet实现缩容,和现有服务主体认证逻辑完全兼容,不需要额外安装任何组件,运行速度快。
修复后的完整代码如下:
$connectionName = "AzureRunAsConnection" try { # 获取运行身份连接配置 $servicePrincipalConnection=Get-AutomationConnection -Name $connectionName Write-Output "Logging in to Azure..." Connect-AzAccount ` -ServicePrincipal ` -TenantId $servicePrincipalConnection.TenantId ` -ApplicationId $servicePrincipalConnection.ApplicationId ` -CertificateThumbprint $servicePrincipalConnection.CertificateThumbprint } catch { if (!$servicePrincipalConnection) { $ErrorMessage = "Connection $connectionName not found." throw $ErrorMessage } else{ Write-Error -Message $_.Exception throw $_.Exception } } $subscription = "替换为你的实际订阅ID" $resourceGroupName = "替换为实际资源组名称" $appServicePlanName = "替换为实际应用服务计划名称" $sku = "B1" # 切换到目标订阅 Set-AzContext -SubscriptionId $subscription | Out-Null # 修改应用服务计划SKU完成缩容 Set-AzAppServicePlan -ResourceGroupName $resourceGroupName -Name $appServicePlanName -Tier Basic -WorkerSize Small Write-Output "The app service plan is downgraded to $sku"
如果你后续要切换到其他SKU,对应Tier和WorkerSize的匹配规则:B1/S1对应Tier为Basic/Standard、WorkerSize为Small;B2/S2对应WorkerSize为Medium;B3/S3对应WorkerSize为Large。
方案2:保留Azure CLI命令(不推荐)
如果一定要使用az命令,需要在Runbook逻辑最开头添加Azure CLI的静默安装步骤,同时单独完成CLI的服务主体登录。但这种方式每次Runbook冷启动都要重新安装CLI,会额外增加1-2分钟运行时长,且沙箱环境权限变动可能导致安装失败,稳定性差,非必要不选择。
内容的提问来源于stack exchange,提问作者Lokesh M
相关产品推荐
相关产品推荐

