Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Назначение: Windows PowerShell 2.0, Windows PowerShell 3.0
РАЗДЕЛ
about_Functions_Advanced
КРАТКОЕ ОПИСАНИЕ
Представляет расширенные функции, которые работают подобно командлетам.
ПОДРОБНОЕ ОПИСАНИЕ
Расширенные функции позволяют писать функции, которые выполняют операции, похожие на операции, выполняемые с помощью командлетов. Расширенные функции удобно использовать, если нужно быстро написать функцию. В этом случае можно обойтись без написания скомпилированного командлета на языке Microsoft .NET Framework. Кроме того, они могут оказаться полезными, если требуется ограничить функциональность скомпилированного командлета или нужно написать функцию, похожую на скомпилированный командлет.
Существует различие между созданием скомпилированных командлетов и расширенных функций. Скомпилированные командлеты представляют собой классы .NET Framework, которые следует писать с использованием языка .NET Framework, например C#. В свою очередь расширенные функции разрабатываются на языке сценариев Windows PowerShell®, как это происходит в случае других функций или блоков сценариев.
Расширенные функции используют атрибут CmdletBinding, чтобы идентифицировать их в качестве функций, действующих подобно командлетам. Атрибут CmdletBinding похож на атрибут Cmdlet, который используется в классах скомпилированных командлетов, чтобы идентифицировать эти классы в качестве командлетов. Подробнее об этом атрибуте см. в разделе about_Functions_CmdletBindingAttribute.
В примере ниже показана функция, которая принимает имя, а затем выводит приветствие, используя указанное имя. Кроме того, обратите внимание, что эта функция имеет имя, включающее глагол (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
about_Functions_Advanced_Methods
about_Functions_Advanced_Parameters
about_Functions_CmdletBindingAttribute
about_Functions_OutputTypeAttribute
Командлеты Windows PowerShell (https://go.microsoft.com/fwlink/?LinkID=135279)