Powershell 中有等价的展开运算符吗?

问题描述 投票:0回答:2

在 JavaScript 中,您可以使用扩展运算符来克隆对象,然后扩展其属性。 powershell 中是否有等效的操作来完成此操作?

JS 示例:

const b = {
  ...a,
  newProp: 'abc'
}
powershell
2个回答
5
投票

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 } }

这会添加一个日期属性,其值是表达式的结果。 诚然,这里没那么有用,但这只是为了证明这一点。

*
继承了现有属性,从而产生了接近原始属性加上新属性的克隆。 您可以在表达式中添加任何您想要的内容,并添加任意数量的属性。 所以您可以看到计算属性背后有很多实用性。 您还可以通过命名源对象的实际属性而不是通配符 (
*
) 来进一步定制对象。


© www.soinside.com 2019 - 2024. All rights reserved.