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


about_Functions_Advanced

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

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

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

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

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

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

Параметры функции — это переменные, объявленные в инструкции param(). Можно использовать необязательный атрибут [Parameter()] отдельно или в сочетании с атрибутом [Alias()] или любым из атрибутов проверки параметров. Дополнительные сведения о объявлении параметров см. в about_Functions_Advanced_Parameters.

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

function Send-Greeting
{
    [CmdletBinding()]
    param(
        [Parameter(Mandatory=$true)]
        [string] $Name
    )

    process
    {
        Write-Host ("Hello " + $Name + "!")
    }
}

Эта функция выполняет работу в блоке process, который эквивалентен методу ProcessingRecord, используемому в скомпилированных командлетах. Блок process и другие именованные блоки описаны в about_Functions_Advanced_Methods.

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

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

См. также