[英]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.