簡體   English   中英

Powershell功能:管道和通用參數值之間的巨大差異

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM