想想一個非常好的標題很難。如果你能想到更好的標題,請隨時編輯它。參數化數組在所有情況下都不能正常工作
Powershell的3
下面是一個示例函數:
Function New-Cmdlet
{
[CmdletBinding(SupportsShouldProcess=$True)]
Param([Parameter(Mandatory=$True,ValueFromPipeline=$True,ValueFromPipelineByPropertyName=$True)]
[String[]]$ComputerName)
BEGIN
{
Write-Verbose -Message "Cmdlet is starting."
}
PROCESS
{
Write-Verbose -Message "Beginning Process block on $ComputerName"
}
END
{
Write-Verbose -Message "Running End block."
}
}
現在,如果我跑Get-Content C:\hosts.txt | New-Cmdlet
,過程塊在HOSTS.TXT發現每個條目運行一次。這是好的和正確的。
如果我運行"host1","host2" | New-Cmdlet
,那麼PROCESS塊將運行兩次;一次爲host1,一次爲host2。再次,這是好的和正確的。
但是,如果我運行New-Cmdlet -ComputerName "host1","host2"
或幾乎任何其他變體,我可以想到像New-Cmdlet -ComputerName @("host1","host2")
...... PROCESS塊只運行一次。哪個不好。
任何想法我能做些什麼才能在每種情況下正常工作?
謝謝。我想我只是感到困惑,因爲當我使用管道時,Process程序塊表現爲它自己的foreach循環,所以在它內部添加一個foreach循環似乎是多餘的。 –