可以說我有這樣的功能:
Function Hello(){
Write-Host "Hello, World"}
單獨使用時,它可以完美運行,但我也希望它接收管道輸入:
$MyString = "Something Else please"
$MyString | Hello
在第二個例子中,Something Else please應該列印而不是默認值Hello, World。
我找了又找,結果空手而歸。那里的所有內容都不斷提到默認引數。我不想使用引數。
有人請指出我正確的方向。
uj5u.com熱心網友回復:
宣告一個引數,并且:
給它一個 默認值。
使其成為pipeline-binding,并確保在函式體中處理每個管道輸入物件,即通過一個
process塊- 注意:宣告引數管道系結(
[Parameter(ValueFromPipeline)]如下)隱含地使函式成為高級函式,這具有(通常有益的)行為含義 - 請參閱此答案。
- 注意:宣告引數管道系結(
function Hello {
param(
[Parameter(ValueFromPipeline)]
$InputObject = 'Hello, World' # default value
)
process {
# Called for each pipeline input object, or once with the default value.
Write-Host $InputObject
}
}
為了健壯性,通常最好顯式宣告引數,如上所示。
下面是-不太理想-無引數、簡單-函式的替代方案,它預先收集所有管道輸入,因為它也隱式地在一個end塊中運行,并使用自動$input變數并 $MyInvocation.ExpectingInput檢測是否提供了管道輸入,如建議的那樣通過圣地亞哥 Squarzon :
function Hello {
if ($MyInvocation.ExpectingInput) { # input from the pipeline
$input | Write-Host # pass each pipeline input object to Write-Host
} else { # no pipeline input -> use default value
'Hello, World' | Write-Host
}
}
至于您在回答中嘗試了什么:
通過不使用
process塊,實際上只有來自管道的最后一個輸入物件系結到引數$InputObject,因為沒有(任何一個)和塊的函式體begin隱process式end地在end塊中運行,即在接收到所有管道輸入之后。通常,沒有充分的理由鍵入引數
[PSObject]or[PSObject[]],因為它是在幕后[psobject]使用的通常不可見的輔助型別。不鍵入引數與鍵入它是一樣的
[object],這應該用于接受任何型別的引數。鍵入它
[array]與鍵入它相同[object[]],但請注意,如果將管道系結引數鍵入為陣列,則每個單獨的輸入物件都會自動轉換為陣列- 這會減慢處理速度。只有當您需要接受多個值作為單個命令列引數(而不是通過管道)時,才將引數宣告為保證的陣列 - 當您這樣做時,您需要列舉
process塊中的每個系結引數值,因為它本身可能是一個真正的陣列。順便說一句:使用標量型別宣告的管道系結引數僅通過管道接受多個值,但也不能隱含地作為引數是GitHub 問題 #4242的主題
uj5u.com熱心網友回復:
通過為你的函式使用這個語法,你可以創建我認為你所追求的東西。
Clear-Host
Function Hello {
Param (
[Parameter(Mandatory=$False,ValueFromPipeline=$True)]
[String] $MyText = "Hello"
)
Write-Host "$MyText, World"
}
Hello
"It's A Wonderful" | Hello
輸出:
Hello, World
It's A Wonderful, World
PS>
uj5u.com熱心網友回復:
這是我在@Santiago Squarzon 指出我正確的方向后得出的結論
Function Hello {
Param (
[Parameter(Mandatory=$False,ValueFromPipeline=$True)]
[PSObject[]] $InputObject,
)
if ($PSCmdlet.MyInvocation.ExpectingInput) {
"Data received from pipeline input: '$($InputObject)'"
}
else {
Write-host "Hello World"
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/528430.html
標籤:电源外壳管道默认值
