[英]Write Powershell function, that can be called with pipeline input AND “normal” input"
我有一个简单的功能:
function Write-Log {
[CmdletBinding()]
param (
# Lines to log
[Parameter(Mandatory , ValueFromPipeline )]
[AllowEmptyString()]
$messages
)
process {
Write-Host $_
}
}
基于ValueFromPipeline
,可以将函数与管道输入配合使用,例如
"a","b", "c" | Write-Log
a
b
c
没关系。 但是,如果我想以这种方式使用函数:
Write-Log -message "a", "b", "c"
自动$_
变量为空,不打印任何内容。
我还发现了这两个stackoverflow链接:
他们两个都建议以下模式:
function Write-Log {
[CmdletBinding()]
param (
# Lines to log
[Parameter(Mandatory , ValueFromPipeline )]
[AllowEmptyString()]
$messages
)
process {
foreach ($message in $messages){
Write-Host $message
}
}
}
上面的模式适用于我的用例。 但是从我的角度来看,在“ process”块中调用foreach
感觉很奇怪,因为(据我所知)对于每个管道项目都调用了process块。 是否存在更好的更干净的方式来编写支持两个用例的函数?
谢谢。
如果要将数组传递给类似这样的参数,就必须这样做
Write-Log -Messages a,b,c
否则你只能做
Write-Log -Messages a
您仍然可以在不使用foreach的情况下通过管道传递数组:
Echo a b c | Write-Log
我感谢cmdlet可以同时执行这两项操作,例如get-process。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.