Я создал следующую простую функцию, где параметр поддерживает ввод из конвейера:
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