PowerShell如何从含行列数组的对象创建PSCustomObject
问题描述
现有PowerShell对象$foo,包含Column和Row两个属性,结构如下:
$foo.Column {Cost, UsageDate, Currency} $foo.Row {120, 20230301, USD, 150, 20230302, USD, 200, 20230303, USD ... }
需要生成PSCustomObject类型的$bar,使其通过Format-Table输出时呈现如下表格:
$bar | Format-Table Cost UsageDate Currency ---- --------- -------- 120 20230301 USD 150 20230302 USD 200 20230303 USD
解决方法
核心逻辑是根据Column的元素数量,将Row数组拆分为等长子数组,再将每个子数组的元素与Column的键一一对应,生成自定义对象。
具体实现代码:
# 获取列数,确定每组数据的元素数量 $colCount = $foo.Column.Count # 拆分Row数组为多个子数组,每个子数组对应一条数据 $rowChunks = for ($i = 0; $i -lt $foo.Row.Count; $i += $colCount) { $foo.Row[$i..($i + $colCount - 1)] } # 遍历子数组,创建PSCustomObject并收集到$bar中 $bar = $rowChunks | ForEach-Object { $propertyMap = [ordered]@{} for ($j = 0; $j -lt $colCount; $j++) { $propertyMap[$foo.Column[$j]] = $_[$j] } [PSCustomObject]$propertyMap }
执行代码后,运行$bar | Format-Table即可得到目标表格效果。
内容的提问来源于stack exchange,提问作者Gill-Bates
相关产品推荐
相关产品推荐

