Powershell 中是否有等效的扩展运算符?

Jar*_*ach 2 powershell

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

JS示例:

const b = {
  ...a,
  newProp: 'abc'
}
Run Code Online (Sandbox Code Playgroud)

Ste*_*ven 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 } }
Run Code Online (Sandbox Code Playgroud)

这会添加一个日期属性,其值是表达式的结果。诚然,这里没那么有用,但这只是为了证明这一点。继承*了现有的属性,从而产生了接近原始属性加上新属性的克隆。您可以在表达式中添加任何您想要的内容,并添加任意数量的属性。所以您可以看到计算属性背后有很多实用性。您还可以通过命名源对象的实际属性而不是通配符 ( ) 来进一步定制对象*

  • `$new = $old |Select-Object *,@{...}` 可能是最接近我们在 PowerShell 中得到的 `...` :-) (2认同)