【发布时间】:2019-12-05 06:13:44
【问题描述】:
我有以下简单的 PowerShell 函数:
function ValueFromPipelineTest
{
param
(
[Parameter(ValueFromPipeline = $true, ValueFromPipelineByPropertyName = $true)]
[string] $Param1,
[Parameter(ValueFromPipelineByPropertyName = $true)]
[string] $Param2
)
Process
{
Write-Output "Param1: $Param1"
Write-Output "Param2: $Param2"
}
}
如果我像这样将值导入它:
'Hello' | ValueFromPipelineTest
@{ Param1 = 'Hello'; Param2 = 'there' } | ValueFromPipelineTest
第一行按预期工作,产生输出:
参数 1:你好
参数2:
但是第二行产生了输出:
Param1:System.Collections.Hashtable
参数2:
我实际上希望让第二行产生输出:
参数 1:你好
Param2:那里
我认为这是可能的,但我只是错过了一些东西。如果有办法在不使用hashtable 的情况下做到这一点,我对此持开放态度。我只是在寻找一种简单的方法来定义具有一些属性的对象并将其通过管道传递到我的函数中。
关于如何完成我所追求的目标有什么想法吗?提前致谢!
【问题讨论】:
-
第二个应该根本不行,但是ValueFromPipeline是贪婪的,占用了hashtable。
标签: powershell parameter-passing powershell-cmdlet