用对象的 属性 拼接一个函数
Splatting a function with an object's property
在 PowerShell 中,您可以将多个参数传递给函数或 cmdlet,方法是将它们包装在哈希表变量中,然后传递前缀为 @
而不是 $
.
的变量
是否可以使用作为另一个对象的 属性 的哈希表进行拼接(即作为一个衬里)?例如在下面,我首先必须将 属性(testInt
、testString
)分配给另一个变量,然后才能将其分配给 Demo
。我想要一些方法来避免这个额外的步骤,但一直无法找到一个巧妙的解决方案...
function Demo {
[CmdletBinding()]
Param (
[Parameter()]
[string]$One
,
[Parameter()]
[string]$Two
)
"1 = $One"
"2 = $Two"
}
$test = @{
testInt = @{
One = '1'
Two = '2'
}
testString = @{
One = 'One'
Two = 'Two'
}
}
$t = $test.testInt
Demo @t
$t = $test.testString
Demo @t
Demo @test.testInt #this doesn't work / I've also tried similar options with various castings and braces though to no avail.
更新
AFAIK 展开对象 属性 或数组或哈希表的元素的唯一方法是将其分配给变量,然后展开该变量
$p = $variable.property
demo @p
符号 @variable.property
无效,@()
和 @{}
都不能用于允许这样的语法,因为它们已经具有不同的含义(数组构造和哈希表构造)。
在 PowerShell 中,您可以将多个参数传递给函数或 cmdlet,方法是将它们包装在哈希表变量中,然后传递前缀为 @
而不是 $
.
是否可以使用作为另一个对象的 属性 的哈希表进行拼接(即作为一个衬里)?例如在下面,我首先必须将 属性(testInt
、testString
)分配给另一个变量,然后才能将其分配给 Demo
。我想要一些方法来避免这个额外的步骤,但一直无法找到一个巧妙的解决方案...
function Demo {
[CmdletBinding()]
Param (
[Parameter()]
[string]$One
,
[Parameter()]
[string]$Two
)
"1 = $One"
"2 = $Two"
}
$test = @{
testInt = @{
One = '1'
Two = '2'
}
testString = @{
One = 'One'
Two = 'Two'
}
}
$t = $test.testInt
Demo @t
$t = $test.testString
Demo @t
Demo @test.testInt #this doesn't work / I've also tried similar options with various castings and braces though to no avail.
更新
AFAIK 展开对象 属性 或数组或哈希表的元素的唯一方法是将其分配给变量,然后展开该变量
$p = $variable.property
demo @p
符号 @variable.property
无效,@()
和 @{}
都不能用于允许这样的语法,因为它们已经具有不同的含义(数组构造和哈希表构造)。