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

PowerShell使用Select-Object转JSON时避免列表变形的方法问询

问题原因

该异常由PowerShell默认的管道枚举机制导致:计算属性的表达式返回集合时,PowerShell会自动展开集合元素:仅返回1个元素时会直接转为标量对象,返回多个元素时会被封装为带value和Count属性的PSCollection对象,序列化为JSON时就会出现不符合预期的结构。

解决方案

修改StorageQoSPolicies对应的计算属性表达式,使用一元逗号操作符强制保留数组结构,避免被自动展开:

$Cloud = Get-SCCloud -ID 'bbf6a193-4439-4053-9772-7228e3be3db9'; 
function Expand-SCCloud() {
  Param(
    [Parameter(
      Mandatory = $true,
      ValueFromPipeline = $true)
    ] $rawObj
  ) 
  $CloudCapacity_Filter_001 = @{Name = 'CloudCapacity'; Expression = { $_.CloudCapacity | Select-Object CPUCount, MemoryMB, VMCount } };
  # 仅修改这一行:返回结果前加一元逗号,强制保留数组结构
  $StorageQoSPolicies_Filter_002 = @{Name = 'StorageQoSPolicies'; Expression = { , ($_.StorageQoSPolicies | Select-Object IOPSMaximum, IOPSMinimum, BandwidthLimit, ID, PolicyID, Name) } };
  $rawObj_json = $rawObj | Select-Object Name, $CloudCapacity_Filter_001, $StorageQoSPolicies_Filter_002 | ConvertTo-JSON -Depth 3;
  return $rawObj_json; 
};
$Cloud | Expand-SCCloud;

也可以用@()包裹表达式返回结果实现相同效果:

Expression = { @($_.StorageQoSPolicies | Select-Object IOPSMaximum, IOPSMinimum, BandwidthLimit, ID, PolicyID, Name) }

修改后StorageQoSPolicies会以原生数组结构序列化,输出符合预期。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.19 10:36:04