РАЗДЕЛ
    about_Functions_Advanced

КРАТКОЕ ОПИСАНИЕ
    Представляет расширенные функции, которые работают подобно 
    командлетам.

ПОЛНОЕ ОПИСАНИЕ
    Расширенные функции позволяют писать функции, которые выполняют 
    операции, похожие на операции, выполняемые с помощью командлетов. 
    Расширенные функции удобно использовать, если нужно быстро написать 
    функцию. В этом случае можно обойтись без написания скомпилированного 
    командлета на одном из языков Microsoft .NET Framework. Кроме того, 
    они могут оказаться полезными, если требуется ограничить функциональность 
    скомпилированного командлета или если нужно написать функцию, похожую на 
    скомпилированный командлет.
 

    Существует различие между созданием скомпилированных командлетов и 
    расширенных функций. Скомпилированные командлеты представляют собой 
    классы .NET Framework, которые следует писать с использованием языка 
    .NET Framework, например C#. В свою очередь расширенные функции 
    разрабатываются на языке скриптов Windows PowerShell, как это происходит 
    в случае других функций или блоков скриптов.


    Расширенные функции используют атрибут CmdletBinding, чтобы 
    идентифицировать их в качестве функций, действующих подобно 
    командлетам. Атрибут CmdletBinding похож на командлет Cmdlet, 
    который используется в классах скомпилированных командлетов, чтобы 
    идентифицировать эти классы в качестве командлетов. Дополнительные 
    сведения об этом атрибуте см. в разделе about_Functions_CmdletBindingA
    ttribute.


    В следующем примере показана функция, которая принимает имя, а 
    затем выводит приветствие, используя указанное имя. Кроме того, 
    обратите внимание, что эта функция имеет имя, включающее глагол 
    (Send) и существительное (Greeting), как это обычно происходит в 
    случае скомпилированных командлетов. Но функции не обязательно 
    должны иметь имя в формате "глагол-существительное". 


        function Send-Greeting
        {
          [CmdletBinding()]
          Param(
              [Parameter(Mandatory=$true)]
              [string] $Name
          )
          Process
          {
            write-host ("Hello " + $Name + "!") }
        }


    Параметры функции объявляются с помощью атрибута Parameter. Этот 
    атрибут можно использовать отдельно или объединять с атрибутом 
    Alias или несколькими другими атрибутами проверки параметров.
    Дополнительные сведения об объявлении параметров (включая 
    динамические параметры, добавляемые во время выполнения) см. 
    в разделе about_Functions_Advanced_Parameters. 
 

    Фактически операции приведенной в примере функции выполняются в 
    блоке Process, который является эквивалентом метода ProcessingRecord, 
    используемого скомпилированными командлетами для обработки передаваемых 
    командлетам данных. Этот блок, а также блоки Begin и End, описаны в 
    разделе about_Functions_Advanced_Methods.


    Расширенные функции имеют следующие отличия от скомпилированных 
    командлетов: 

        - привязка параметров расширенных функций не создает 
          исключений, если к параметру типа Boolean привязан 
          массив значений;

        - атрибуты ValidateSet и ValidatePattern не могут передавать 
          именованные параметры;

        - расширенные функции нельзя использовать в транзакциях.

   
СМ. ТАКЖЕ
    about_Functions_Advanced_CmdletBindingAttribute 
    about_Functions_Advanced_Methods  
    about_Functions_Advanced_Parameters 
    Командлеты Windows PowerShell 
    (https://go.microsoft.com/fwlink/?LinkID=135279)




Содержание