我有一个简单的功能:
function Write-Log {
[CmdletBinding()]
param (
# Lines to log
[Parameter(Mandatory , ValueFromPipeline )]
[AllowEmptyString()]
$messages
)
process {
Write-Host $_
}
}
基于ValueFromPipeline
的in可以将函数与管道输入一起使用,例如
"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块。是否存在更好的更干净的方式来编写支持两个用例的函数?
谢谢。
答案 0 :(得分:1)
如果要将数组传递给类似
的参数,就必须这样做dat %>%
mutate_at(vars(colsOfInterst), list(~ fct_recode(., !!! nm1)))
否则你只能做
Write-Log -Messages a,b,c
您仍然可以在不使用foreach的情况下通过管道传递数组:
Write-Log -Messages a
我非常感谢cmdlet可以同时执行两种操作,例如get-process。