Поддержка конвейера функции, невозможно связать аргумент с параметром - PullRequest
2 голосов
/ 30 мая 2019

Я создал следующую простую функцию, где параметр поддерживает ввод из конвейера:

    function Write-Log {
        [CmdletBinding()]
        param (
            # Lines to log
            [Parameter(Mandatory , ValueFromPipeline )]
            [string[]]
            $PipeLineLoglines
        )

        process {
            Write-Host $_
        }
    }

Если я вызываю функцию, например, через :

    "test1", "test2" | Write-Log

Он работает как положено, но если я пересылаю пустую строку по конвейеру, я получаю следующую ошибку:

C:\> "test1", "", "test2" | Write-Log
test1
Write-Log : Cannot bind argument to parameter 'PipeLineLoglines' because it is an empty string.
At line:1 char:24
+ "test1", "", "test2" | Write-Log
+                        ~~~~~~~~~
    + CategoryInfo          : InvalidData: (:String) [Write-Log], ParameterBindingValidationException
    + FullyQualifiedErrorId : ParameterArgumentValidationErrorEmptyStringNotAllowed,Write-Log

test2

Я использую PowerShell.Core:

C:\> $PSVersionTable

Name                           Value
----                           -----
PSVersion                      6.2.0
PSEdition                      Core
GitCommitId                    6.2.0
OS                             Microsoft Windows 10.0.17763
Platform                       Win32NT
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0…}
PSRemotingProtocolVersion      2.3
SerializationVersion           1.1.0.1
WSManStackVersion              3.0

Может кто-нибудь объяснить, почему пустая строка вызывает эту ошибку?

Thx

1 Ответ

3 голосов
/ 30 мая 2019

Это потому, что параметр Mandatory, и считается, что пустая строка не удовлетворяет этому условию.Учитывая, что для этого есть специальные атрибуты проверки, мне не нравится это поведение, но так оно и есть.

Существует атрибут, который может вам помочь, [AllowEmptyString()]:

 function Write-Log {
        [CmdletBinding()]
        param (
            # Lines to log
            [Parameter(Mandatory , ValueFromPipeline )]
            [AllowEmptyString()]
            [string[]]
            $PipeLineLoglines
        )

        process {
            Write-Host $_
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...