Меня смущает кое-что, что я видел в книге «Изучите PowerShell за месяц обедов». В главе 21, когда автор обсуждает функции, принимающие ввод через привязку параметров или конвейер, он приводит два шаблона.
Первый пример выглядит следующим образом
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 я хотел бы возиться с первым шаблоном, когда второй шаблон намного чище.
Любое понимание будет оценено.
Спасибо.