自定义 psobject 截断使用 add-member 添加的结果

Custom psobject truncating the results that are added using add-member

我有两个集群,集群 1 有 5 个节点,集群 2 有 4 个节点。使用以下脚本,cluster1 输出将被截断。如何解决这个问题?

PS C:\WINDOWS\system32> $temp = @()
PS C:\WINDOWS\system32> foreach($i in @('cluster1','cluster2')){
>> $pso = New-Object -TypeName psobject
>> $cluster = Get-Cluster $i | select name
>> $cluster_nodes = Get-ClusterNode -Cluster $cluster.Name | select name
>> $pso | Add-Member -MemberType NoteProperty -Name 'Cluster' -Value $cluster.Name
>> $pso | Add-Member -MemberType NoteProperty -Name 'Cluster_nodes' -Value $cluster_nodes.name
>> $temp += $pso
>> }

输出:

PS C:\WINDOWS\system32> $temp

Cluster         Cluster_nodes
-------         -------------
cluster1        {node1, node2, node3, node4...}
cluster2        {node1, node2, node3, node4}

AdminOfThings 在对问题的评论中提供了关键指针:

Preference variable $FormatEnumerationLimit 控制在格式化输出中显示 集合值 属性 的元素数量。

例如,$FormatEnumerationLimit = 2; [pscustomobject] @{ prop = 1, 2, 3 }.prop 的值中打印(最多)2 个元素,并用 ... 提示存在更多元素;例如,{1, 2...}).

  • 默认值为4,但您可以将其设置为任意正值。

  • -1 对显示的值数量设置 没有限制 ,但请注意 表格输出(隐式或显式Format-Table列宽度可能仍会截断值列表。

    • 通过管道传输到 Format-List 以确保显示 所有 值。

警告:由于 PowerShell [Core] 7.0 的 bug,设置 $FormatEnumerationLimit 仅在全球范围 - 见this GitHub issue

  • 作为脚本中的解决方法,修改全局副本,$global:FormatEnumerationLimit临时(在退出脚本之前将其恢复为原始值)。