我很好奇为什么在终止或非终止错误方面,管道参数和非管道参数之间的参数验证存在差异。一些代码要解释。
测试功能:
Function Test-Foo {
Param (
[Parameter(Mandatory)]
[ValidateScript({Test-Path -Path $_ -PathType Container})]
[String]$Path,
[Parameter(Mandatory, ValueFromPipelineByPropertyName)]
[ValidateScript({return $false})]
[Alias('Key')]
[String]$SamAccountName,
[Parameter(Mandatory, ValueFromPipelineByPropertyName)]
[ValidateSet('ReadAndExecute','Write','Modify','FullControl','ListFolderContents')]
[Alias('Value')]
[String]$Grant
)
$PSBoundParameters
}
终止错误:
Try {
Test-Foo -Path $env:TEMP -SamAccountName NonExisting
Write-Host 'Non terminationg error' -ForegroundColor Yellow
}
Catch {
throw "Terminating error found: $_"
}
管道非终止错误:
Try {
@{
'NonExisting' = 'FullControl'
}.GetEnumerator() | Test-Foo -Path $env:TEMP
Write-Host 'Non terminationg error' -ForegroundColor Yellow
}
Catch {
throw "Terminating error found: $_"
}
有人可以向我解释为什么函数会在没有管道输出时抛出终止错误,而在管道传输时会出现非终止错误?是否有可能在不执行任何操作的情况下实现相同的行为:
... | Test-Foo -Path $env:TEMP -ErrorAction Stop