我具有以下简单的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
第一行按预期工作,产生输出:
Param1:您好
Param2:
但是第二行产生输出:
Param1:System.Collections.Hashtable
Param2:
我实际上是想让第二行产生输出:
Param1:您好
Param2:在那里
我认为这是可能的,但是我只是想念一些东西。关于如何实现我的追求有任何想法吗?预先感谢!
$Params = @{
'Param1' = “Hello”
'Param2' = “There”
}
ValueFromPipelineTest @Params
或者,尝试以下方法。
$Params = @{
Param1 = “Hello”
Param2 = “There”
}
function ValueFromPipelineTest
{
param
(
[Parameter(ValueFromPipeline = $true, ValueFromPipelineByPropertyName = $true)]
[hashtable]$Param
)
Process
{
Write-Output "Param1: $($Param["Param1"])"
Write-Output "Param2: $($Param["Param2"])"
}
}
$Params | ValueFromPipelineTest