Обработка ввода конвейера и параметров в функции Powershell

Меня смущает кое-что, что я видел в книге «Изучите 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 я хотел бы возиться с первым шаблоном, когда второй шаблон намного чище.

Любое понимание будет оценено.

Спасибо.

6
задан lowteq 6 March 2012 в 23:38
поделиться