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

如何筛选PowerShell对象数组指定属性并按哈希表重命名属性名

PowerShell 对象属性筛选与重命名实现

现有包含 p1、p2、p3、p4 属性的PSCustomObject数组:

$objectArray = [PSCustomObject]@{
    p1 = "Value1"; p2 = "Value2"; p3 = "Value3"; p4 = "Value4"
},[PSCustomObject]@{
    p1 = "Value5"; p2 = "Value6"; p3 = "Value7"; p4 = "Value8"
}

同时存在属性名映射哈希表:

$propertyReplacements = @{
    "p1" = "x1"
    "p2" = "y1"
}

需求:仅保留哈希表键中存在的属性,并将这些属性名重命名为哈希表对应的值,预期结果如下:

[PSCustomObject]@{
    x1 = "Value1"; y1 = "Value2";
},[PSCustomObject]@{
    x1 = "Value5"; y1 = "Value6";
}

已完成部分筛选代码,需补充完整实现逻辑:

$objectArray | select -Property @($propertyReplacements.Keys) |
....

完整实现代码

$objectArray | Select-Object -Property @(
    $propertyReplacements.GetEnumerator() | ForEach-Object {
        @{ Name = $_.Value; Expression = [scriptblock]::Create("`$_.$($_.Key)") }
    }
)

逻辑说明

  • 遍历 $propertyReplacements 哈希表的键值对(通过 GetEnumerator())
  • 为每个键值对创建一个属性选择哈希表:
    • Name 指定重命名后的属性名(哈希表的值)
    • Expression 是脚本块,用于从原对象中获取对应键的属性值
  • 将这些属性选择哈希表组成数组,传给 Select-Object 的 -Property 参数,一次性完成筛选与重命名

简洁写法

利用PowerShell的参数缩写(n 对应 Name,e 对应 Expression),可以简化代码:

$objectArray | Select-Object -Property ($propertyReplacements.Keys | ForEach-Object {
    @{ n = $propertyReplacements[$_]; e = [scriptblock]::Create("`$_.$_") }
})

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 09:45:29