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

如何用PowerShell的PromptForChoice构建Azure订阅动态选择列表?

用PowerShell的PromptForChoice实现动态Azure订阅选择

你完全找对方向了,PromptForChoice确实是实现这种交互式选项选择的合适方案——问题出在你直接把订阅名称数组转换成ChoiceDescription类型,而实际上每个选项都需要单独创建ChoiceDescription对象,包含带快捷键的标签和描述信息。

下面是完整的实现代码,我会一步步解释:

完整实现代码

# 确保已连接Azure(如果还没连接的话)
# Connect-AzureRmAccount

$title = "Azure Subscriptions"
$message = "Please pick a subscription to use:"

# 获取所有Azure订阅
$all_subscriptions = Get-AzureRmSubscription

# 初始化空数组存储ChoiceDescription对象
$options = @()

# 遍历订阅,为每个订阅创建ChoiceDescription
for ($i = 0; $i -lt $all_subscriptions.Count; $i++) {
    $sub = $all_subscriptions[$i]
    # 为每个选项设置带快捷键的标签(用数字1、2、...作为快捷键,避免首字母重复的问题)
    $optionLabel = "&$($i+1) $($sub.Name)"
    # 设置选项的描述信息,显示订阅ID和租户ID帮助用户区分
    $optionDescription = "Subscription ID: $($sub.Id) | Tenant ID: $($sub.TenantId)"
    
    # 创建ChoiceDescription对象并添加到选项数组
    $choice = New-Object System.Management.Automation.Host.ChoiceDescription $optionLabel, $optionDescription
    $options += $choice
}

# 弹出选择对话框
$resultIndex = $host.ui.PromptForChoice($title, $message, $options, 0)

# 根据选择的索引获取对应的订阅
$selectedSubscription = $all_subscriptions[$resultIndex]

# 切换到选中的订阅
Select-AzureRmSubscription -SubscriptionObject $selectedSubscription

Write-Host "Successfully switched to subscription: $($selectedSubscription.Name)" -ForegroundColor Green

关键细节说明

  1. 动态创建ChoiceDescription对象:
    我用for循环遍历订阅列表,为每个订阅生成一个带数字快捷键的标签(比如&1 订阅A),这样用户可以直接按数字键快速选择,避免了订阅名称首字母重复导致快捷键冲突的问题。同时在描述里加上了订阅ID和租户ID,帮助用户准确区分相似名称的订阅。

  2. 处理选择结果:
    PromptForChoice返回的是选中选项的索引(从0开始),所以我们直接用这个索引从$all_subscriptions数组中取出对应的订阅对象,再用Select-AzureRmSubscription切换过去。

替代方案(适合大量订阅场景)

如果你的订阅数量很多,PromptForChoice的列表会显得冗长,这时候可以用Out-GridView提供更友好的可视化选择界面:

$selectedSubscription = Get-AzureRmSubscription | Out-GridView -Title "Select an Azure Subscription" -OutputMode Single
if ($selectedSubscription) {
    Select-AzureRmSubscription -SubscriptionObject $selectedSubscription
    Write-Host "Switched to: $($selectedSubscription.Name)" -ForegroundColor Green
}

小提示

如果你已经升级到Azure PowerShell Az模块(推荐,因为AzureRm模块已停止维护),只需要把Get-AzureRmSubscription换成Get-AzSubscription,Select-AzureRmSubscription换成Select-AzSubscription即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 06:52:31