[英]Powershell function: wierd difference between pipeline and common parameter value
我對Powershell處理函數參數的方式感到困惑。
所以我有一個基於我的真實腳本制作的示例ps模塊,僅用於測試目的:
function test {
[CmdletBinding(SupportsShouldProcess=$true, ConfirmImpact='Medium')]
param(
[Parameter(Mandatory=$true, Position=0, ValueFromPipeline=$true, ValueFromPipelineByPropertyName=$true)] [System.Management.Automation.PSObject]$InputObject
)
Begin {
}
Process {
Write-Host $InputObject
}
End {
}
}
Export-Modulemember -function test
將其另存為test.psm1&import,並進行2個測試:
第一次測試:
(get-process | select -first 5) | test
將返回以下內容:
System.Diagnostics.Process (7zFM)
System.Diagnostics.Process (7zFM)
System.Diagnostics.Process (AcroRd32)
System.Diagnostics.Process (AcroRd32)
System.Diagnostics.Process (AESTSr64)
第二次測試:
test -InputObject (get-process | select -first 5)
而是返回以下內容:
System.Diagnostics.Process (7zFM) System.Diagnostics.Process (7zFM) System.Diagn
ostics.Process (AcroRd32) System.Diagnostics.Process (AcroRd32) System.Diagnosti
cs.Process (AESTSr64)
當我使用變量存儲和轉發數據時,也會發生同樣的情況。
powershell處理參數的方式似乎有所不同,使用-InputObject參數時返回的數據似乎以某種方式失去了其數組形式的格式...
為什么這樣做呢? 有沒有辦法改變這種行為?
Powershell管道自動將數組和集合“展開”到一個級別,然后一次將它們傳遞到下一個cmdlet或一個函數,因此,當您通過管道發送該數組時,您的函數一次要處理一個進程對象。
使用該參數時,您將一次發送整個數組,並且您的函數正在處理數組對象,而不是處理對象,因此您將獲得不同的結果。
嘗試一下,看看它是否對您的輸出沒有影響:
Process {
$InputObject | foreach {Write-Host $_ }
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.