Поделиться через


about_Functions_Advanced

Краткое описание

В этой статье представлены расширенные функции, которые позволяют создавать командлеты с помощью скриптов.

Подробное описание

Командлет — это одна команда, которая участвует в семантике конвейера PowerShell. Сюда входят двоичные командлеты, расширенные функции скриптов, CDXML и рабочие процессы.

Расширенные функции позволяют создавать командлеты, написанные как функция PowerShell. Расширенные функции упрощают создание командлетов без написания и компиляции двоичного командлета. Двоичные командлеты — это классы .NET, написанные на языке .NET, например C#.

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

В следующем примере показана функция, которая принимает имя, а затем выводит приветствие с использованием указанного имени. Кроме того, обратите внимание, что эта функция определяет имя, включающее пару глаголов (Отправить) и существительных (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 .

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

  • Расширенная привязка параметров функции не вызывает исключения, если массив строк привязан к логическому параметру .
  • Атрибут ValidateSet и ValidatePattern атрибут не могут передавать именованные параметры.
  • Расширенные функции нельзя использовать в транзакциях.

См. также раздел