對於我在一個午餐月的Learn PowerShell一書中看到的內容感到困惑。在第21章中,當作者討論通過參數綁定或流水線接受輸入的函數時,他給出了兩種模式。在Powershell函數中處理管道和參數輸入
第一如下
function someworkerfunction {
# do some work
}
function Get-SomeWork {
param ([string[]]$computername)
BEGIN {
$usedParameter = $False
if($PSBoundParameters.ContainsKey('computername')) {
$usedParameter = $True
}
}
PROCESS {
if($usedParameter) {
foreach($computer in $computername) {
someworkerfunction -computername $comptuer
}
} else {
someworkerfunction -comptuername $_
}
}
END {}
}
第二像這樣
function someworkerfunction {
# do stuff
}
function Get-Work {
[CmdletBinding()]
param(
[Parameter(Mandatory=$True,
ValueFromPipelineByPropertyName=$True)]
[Alias('host')]
[string[]]$computername
)
BEGIN {}
PROCESS {
foreach($computer in $computername) {
someworkerfunction -comptuername $computer
}
}
END {}
}
我知道第二樣品是標準Powershell的2.0高級功能。我的問題是與Powershell 2.0的cmdletbinding指令的支持,你會想要使用第一種模式。這僅僅是Powershell 1.0的遺產嗎?基本上是有一段時間,當我使用Powershell 2.0的時候,當第二種模式變得非常乾淨時,我會想要使用第一種模式。
任何有識之士將不勝感激。
謝謝。
你好。謝謝你的信息。這是我想知道的。 – lowteq 2012-03-08 23:06:12