在 JavaScript 中,您可以使用扩展运算符来克隆对象,然后扩展其属性。 powershell 中是否有等效的操作来完成此操作?
JS 示例:
const b = {
...a,
newProp: 'abc'
}
StackOverflow(针对示例)上有各种关于克隆对象的讨论。 我已经有一段时间没有重新访问它们了,但是在对象本身上缺乏
.Clone()
方法,这些方法通常似乎只是浅层克隆。 这意味着深度嵌套的属性以及更复杂的属性(例如数组和/或其他对象)不容易被克隆。 然而,在 PowerShell 中扩展对象很容易。 Select-Object
通过使用计算属性具有这样的能力。 Select-Object
将输出类型为 [PSCustomObject]
的新对象。 您可以使用 Add-Member
添加属性,同时保持原始对象的正式类型,但是这会添加到它传递的对象,您可能需要尝试才能实现问题的克隆方面。
可能的例子:
# Get an object to work with:
$OriginalObject = (Get-Process)[0]
$NewObject =
$OriginalObject |
Select-Object *,@{Name = 'Date'; Expression = { Get-Date } }
这会添加一个日期属性,其值是表达式的结果。 诚然,这里没那么有用,但这只是为了证明这一点。
*
继承了现有属性,从而产生了接近原始属性加上新属性的克隆。 您可以在表达式中添加任何您想要的内容,并添加任意数量的属性。 所以您可以看到计算属性背后有很多实用性。 您还可以通过命名源对象的实际属性而不是通配符 (*
) 来进一步定制对象。
参见 PowerShell 中的“splatting”:
https://learn.microsoft.com/powershell/module/microsoft.powershell.core/about/about_splatting