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

如何在PowerShell数组中展开对象值?现有脚本输出异常如何解决

问题根因

  • Get-AzSqlVM在单个订阅下会返回该订阅所有SQL虚拟机的对象集合,你直接将集合的Name、ResourceGroupName属性整体赋值给单个对象的属性,最终属性值会变成数组,输出时就会显示为带大括号的未展开格式。
  • 原有逻辑每轮订阅循环仅生成1个结果对象,就算订阅下有多台SQL虚拟机也只会合并存储为数组属性,不会按虚拟机拆分生成独立行,不符合输出预期。

修正脚本

$sqlMetaData = @()
foreach ($subscription in Get-AzSubscription) {
    $setSubContext = Set-AzContext -Subscription $subscription
    $getSubVMs = Get-AzSqlVM -DefaultProfile $setSubContext
    # 遍历当前订阅下的每台SQL虚拟机,单独生成结果对象
    foreach ($vm in $getSubVMs) {
        $info = [PSCustomObject]@{
            VmName = $vm.Name
            ResourceGroupName = $vm.ResourceGroupName
            SubscriptionID = $setSubContext.Subscription.Id
            SubscriptionName = $setSubContext.Subscription.Name
        }
        $sqlMetaData += $info
    }
}

这里改用[PSCustomObject]构造对象比空字符串转Select属性的写法更规范,兼容性更好。

查看展开后的结果

直接输出变量即可看到所有属性完全展开的结果:

$sqlMetaData

如果需要导出为文件,可直接导出为CSV,不会出现数组格式的异常显示:

$sqlMetaData | Export-Csv -Path "./Sql虚拟机清单.csv" -NoTypeInformation -Encoding UTF8

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.10 02:15:00