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

