about_Functions_Advanced
Descripción breve
Presenta funciones avanzadas que son una manera de crear cmdlets mediante scripts.
Descripción larga
Un cmdlet es un único comando que participa en la semántica de canalización de PowerShell. Esto incluye: los cmdlets binarios, las funciones avanzadas de PowerShell y los cmdlets de CDXML.
Las funciones avanzadas permiten crear cmdlets escritos como una función de PowerShell. Las funciones avanzadas facilitan la creación de cmdlets sin tener que escribir y compilar un cmdlet binario. Los cmdlets binarios son clases de .NET escritas en un lenguaje .NET como C#.
Las funciones avanzadas usan el CmdletBinding
atributo para identificarlos como funciones que actúan como cmdlets. El CmdletBinding
atributo es similar al atributo Cmdlet que se usa en las clases de cmdlet compiladas para identificar la clase como un cmdlet. Para obtener más información sobre este atributo, consulte about_Functions_CmdletBindingAttribute.
Los parámetros de la función son variables declaradas en la instrucción param()
. Puede usar el atributo opcional [Parameter()]
solo o en combinación con el atributo [Alias()]
o cualquiera de los atributos de validación de parámetros. Para obtener más información sobre cómo declarar parámetros, vea about_Functions_Advanced_Parameters.
En el ejemplo siguiente se muestra una función que acepta un nombre y, a continuación, imprime un saludo con el nombre proporcionado. Observe también que esta función define un nombre que incluye un par verbo (Send) y sustantivo (Greeting), como el par verbo-sustantivo de un cmdlet compilado. Sin embargo, no es necesario que las funciones tengan un nombre verbo-sustantivo.
function Send-Greeting
{
[CmdletBinding()]
param(
[Parameter(Mandatory=$true)]
[string] $Name
)
process
{
Write-Host ("Hello " + $Name + "!")
}
}
Esta función realiza el trabajo en el bloque process
, que es equivalente al método ProcessingRecord usado en cmdlets compilados. El bloque process
y los demás bloques con nombre se describen en about_Functions_Advanced_Methods.
Las funciones avanzadas difieren de los cmdlets compilados de las maneras siguientes:
- El enlace de parámetros de función avanzada no produce una excepción cuando una matriz de cadenas está enlazada a un parámetro booleano .
- El
ValidateSet
atributo y elValidatePattern
atributo no pueden pasar parámetros con nombre. - Las funciones avanzadas no se pueden usar en transacciones.