Я пытаюсь создать функцию ведения журнала, которая принимает позиционно-привязанные параметры конвейера и позиционно-привязанные аргументы. Однако я продолжаю получать эту ошибку со следующим кодом:
Function Test
{
[CmdletBinding(SupportsShouldProcess,DefaultParameterSetName='def')]
Param(
[Parameter(Position=0,ParameterSetName='def')]
[String]$Pos1,
[Parameter(ValueFromPipeline,Position=1,ParameterSetName='pip')]
[String]$InputObject,
[Parameter(Position=1,ParameterSetName='def')]
[Parameter(Position=0,ParameterSetName='pip')]
[String]$State
)
Process
{
Switch ($PScmdlet.ParameterSetName)
{
'def' {Write-Host "${State}: $Pos1"}
'pip' {Write-Host "${State}: $InputObject"}
}
}
}
PS C:\> 'this' | Test 'error'
test : The input object cannot be bound to any parameters for the command either because the command does not take pipeline input or the input and its properties do not match any of the parameters that take pipeline input.
At line:1 char:10
+ 'test' | test 'error'
+ ~~~~~~~~~~~~
+ CategoryInfo : InvalidArgument: (test:String) [Test], ParameterBindingException
+ FullyQualifiedErrorId : InputObjectNotBound,Test
Я могу заставить конвейерный вызов функции с привязкой к положению работать со следующим примером:
Function Test
{
Param(
[Parameter(Position=1,ValueFromPipeline)]
[String]$Msg,
[Parameter(Position=0)]
[String]$State
)
Process
{
Write-Host "${State}: $Msg"
}
}
PS C:\> 'this' | Test 'error'
error: this
Итак, мой вопрос: как я могу создать функцию, которая будет принимать позиционно-привязанные аргументы в командной строке (Test 'message' 'status'
) и из конвейера ('message' | Test 'status'
) без необходимости явного вызова имени параметра ('message' | Test -State 'status'
)?
$InputObject
и$State
, но он перестал выдавать мне ошибки. - person Maximilian Burszley   schedule 25.09.2017