PowerShell参数'ValueFromPipeline'无效

时间:2014-07-16 09:03:41

标签: powershell parameters

我写了一个创建HTML文件的函数,现在我正在进行一些改进。当通过管道输送功能时,它可以正常工作,但不会产生所需的动作。

没关系:

Create-FileHTML -Path "L:\" -FileName "Title" "Text1", "Text2"
 L:\ Title Text1 Text2

不行:

"Text1", "Text2" | Create-FileHTML -Path "L:\" -FileName "Title"
L:\ Title Text1 Text1
L:\ Title Text2 Text2

在使用管道时,如何将2个值提供给函数以获得与第一个示例相同的结果?

功能:

Function Create-FileHTML {
    [CmdletBinding()]
    Param (
          [parameter(Mandatory=$true,Position=1)]
          [ValidateScript({Test-Path $_ -PathType 'Container'})]
          [String[]] $Path,
          [parameter(Mandatory=$true,Position=2)]
          [String[]] $FileName,
          [parameter(Mandatory=$true,ValueFromPipeline=$true,Position=3)]
          [String[]] $Message1,
          [parameter(Mandatory=$false,ValueFromPipeline=$true,Position=4)]
          [String[]] $Message2
        )
    Process {
         Write-Host "$Path $FileName $Message1 $Message2"
     }
}

感谢您的帮助或提示。

1 个答案:

答案 0 :(得分:1)

您无法使用ValueFromPipeline发送多个参数,请使用ValueFromPipelineByPropertyName,并发送以下参数:

$params = New-Object psobject -property @{Message1 = 'Text1'; Message2 = 'Text2'}  
$params | Create-FileHTML -Path "L:\" -FileName "Title"