Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Descripción breve
Describe cómo las funciones que especifican el CmdletBinding atributo pueden usar los métodos y propiedades que están disponibles para los cmdlets compilados.
Descripción larga
Las funciones que especifican el CmdletBinding atributo pueden tener acceso a métodos y propiedades adicionales a través de la $PSCmdlet variable . Estos métodos incluyen los métodos siguientes:
- Los mismos métodos de procesamiento de entrada disponibles para todas las funciones.
- Los
ShouldProcessmétodos yShouldContinueque se usan para obtener comentarios del usuario antes de realizar una acción. - Método
ThrowTerminatingErrorpara generar registros de error. - Varios
Writemétodos que devuelven diferentes tipos de salida.
Todos los métodos y propiedades de la clase PSCmdlet están disponibles para funciones avanzadas. Para obtener más información, consulte System.Management.Automation.PSCmdlet.
Para obtener más información sobre el CmdletBinding atributo, consulte about_Functions_CmdletBindingAttribute. Para la clase CmdletBindingAttribute , consulte System.Management.Automation.Cmdlet.CmdletBindingAttribute.
Métodos de procesamiento de entrada
Los métodos descritos en esta sección se conocen como métodos de procesamiento de entrada. En el caso de las funciones, estos tres métodos se representan mediante los beginbloques , processy end de la función . PowerShell 7.3 agrega un clean método de proceso de bloque.
No es necesario usar ninguno de estos bloques en las funciones. Si no usa un bloque con nombre, PowerShell coloca el código en el end bloque de la función. Sin embargo, si usa cualquiera de estos bloques con nombre o define un dynamicparam bloque, debe colocar todo el código en un bloque con nombre.
En el ejemplo siguiente se muestra el esquema de una función que contiene un bloque para el preprocesamiento único, un begin bloque para el procesamiento de varios registros y un process bloque para el procesamiento posterior de un end solo uso.
Function Test-ScriptCmdlet
{
[CmdletBinding(SupportsShouldProcess=$true)]
param ($Parameter1)
begin{}
process{}
end{}
clean{}
}
Nota:
Estos bloques se aplican a todas las funciones, no solo a las funciones que usan el CmdletBinding atributo .
begin
Este bloque se usa para proporcionar preprocesamiento opcional de un solo uso para la función. El tiempo de ejecución de PowerShell usa el código de este bloque una vez para cada instancia de la función de la canalización.
process
Este bloque se usa para proporcionar procesamiento de registros por registro para la función. Puede usar un process bloque sin definir los demás bloques. El número de ejecuciones de process bloques depende de cómo use la función y de qué entrada recibe la función.
La variable $_ automática o $PSItem contiene el objeto actual de la canalización para su uso en el process bloque . La $input variable automática contiene un enumerador que solo está disponible para funciones y bloques de script.
Para obtener más información, vea about_Automatic_Variables.
- Al llamar a la función al principio o fuera de una canalización, se ejecuta el
processbloque una vez. - Dentro de una canalización, el
processbloque se ejecuta una vez para cada objeto de entrada que alcanza la función. - Si la entrada de canalización que llega a la función está vacía, el
processbloque no se ejecuta.- Los
beginbloques ,endycleanse siguen ejecutando.
- Los
Importante
Si se establece un parámetro de función para aceptar la entrada de canalización y no se define un process bloque, se producirá un error en el procesamiento de registros por registro. En este caso, la función solo se ejecutará una vez, independientemente de la entrada.
Al crear una función que acepte la entrada de canalización y use CmdletBinding, el process bloque debe usar la variable de parámetro que definió para la entrada de canalización en lugar de $_ o $PSItem. Por ejemplo:
function Get-SumOfNumbers {
[CmdletBinding()]
param (
[Parameter(Mandatory, Position=0, ValueFromPipeline)]
[int[]]$Numbers
)
begin { $retValue = 0 }
process {
foreach ($n in $Numbers) {
$retValue += $n
}
}
end { $retValue }
}
PS> Get-SumOfNumbers 1, 2, 3, 4
10
PS> 1,2,3,4 | Get-SumOfNumbers
10
end
Este bloque se usa para proporcionar el procesamiento posterior opcional de una sola vez para la función.
clean
El clean bloque se agregó en PowerShell 7.3.
El bloque clean es una manera cómoda para que los usuarios limpien los recursos que abarcan los bloques begin, process y end. Es semánticamente similar a un bloque finally que cubre todos los demás bloques con nombre de una función de script o un cmdlet de script. La limpieza de recursos se aplica en los escenarios siguientes:
- cuando la ejecución de la canalización finaliza normalmente sin error de terminación
- cuando se interrumpe la ejecución de la canalización debido a un error de terminación
- cuando la canalización está detenida por
Select-Object -First - cuando la canalización está detenida por Ctrl+c o
StopProcessing()
El bloque limpio descarta cualquier salida escrita en la secuencia Correcto .
Precaución
Agregar el bloque clean es un cambio importante. Dado que clean se analiza como una palabra clave, impide que los usuarios llamen directamente a un comando denominado clean como la primera instrucción de un bloque de script. Sin embargo, es probable que no sea un problema. El comando todavía se puede invocar mediante el operador de llamada (& clean).
Métodos de confirmación
ShouldProcess
Se llama a este método para solicitar confirmación del usuario antes de que la función realice una acción que cambiaría el sistema. La función puede continuar en función del valor booleano devuelto por el método . Este método solo se puede llamar desde dentro del process {} bloque de la función. El CmdletBinding atributo también debe declarar que la función admite ShouldProcess (como se muestra en el ejemplo anterior).
Para obtener más información sobre este método, vea System.Management.Automation.Cmdlet.ShouldProcess.
Para obtener más información sobre cómo solicitar confirmación, vea Solicitar confirmación.
ShouldContinue
Se llama a este método para solicitar un segundo mensaje de confirmación. Se debe llamar cuando el ShouldProcess método devuelve $true. Para obtener más información sobre este método, vea System.Management.Automation.Cmdlet.ShouldContinue.
Métodos de error
Functions puede llamar a dos métodos diferentes cuando se producen errores. Cuando se produce un error de no terminación, la función debe llamar al WriteError método , que se describe en la Write sección de métodos. Cuando se produce un error de terminación y la función no puede continuar, debe llamar al ThrowTerminatingError método . También puede usar la throw instrucción para finalizar errores y el cmdlet Write-Error para errores que no terminan.
Para obtener más información, vea System.Management.Automation.Cmdlet.ThrowTerminatingError.
Métodos de escritura
Una función puede llamar a los métodos siguientes para devolver diferentes tipos de salida.
Observe que no toda la salida va al siguiente comando de la canalización. También puede usar los distintos Write cmdlets, como Write-Error.
WriteCommandDetail
Para obtener información sobre el WriteCommandDetails método, vea System.Management.Automation.Cmdlet.WriteCommandDetail.
WriteDebug
Para proporcionar información que se puede usar para solucionar problemas de una función, realice la llamada a la función al WriteDebug método . El WriteDebug método muestra mensajes de depuración al usuario. Para obtener más información, consulte System.Management.Automation.Cmdlet.WriteDebug.
WriteError
Functions debe llamar a este método cuando se producen errores de no terminación y la función está diseñada para continuar procesando registros. Para obtener más información, vea System.Management.Automation.Cmdlet.WriteError.
Nota:
Si se produce un error de terminación, la función debe llamar al método ThrowTerminatingError .
WriteObject
El WriteObject método permite que la función envíe un objeto al siguiente comando de la canalización. En la mayoría de los casos, WriteObject es el método que se va a usar cuando la función devuelve datos. Para obtener más información, vea System.Management.Automation.PSCmdlet.WriteObject.
WriteProgress
Para las funciones con acciones que tardan mucho tiempo en completarse, este método permite que la función llame al WriteProgress método para que se muestre la información de progreso. Por ejemplo, puede mostrar el porcentaje completado.
Para obtener más información, vea System.Management.Automation.PSCmdlet.WriteProgress.
WriteVerbose
Para proporcionar información detallada sobre lo que hace la función, haga que la función llame al WriteVerbose método para mostrar mensajes detallados al usuario. De forma predeterminada, no se muestran los mensajes detallados. Para obtener más información, vea System.Management.Automation.PSCmdlet.WriteVerbose.
WriteWarning
Para proporcionar información sobre las condiciones que pueden provocar resultados inesperados, haga que la función llame al método WriteWarning para mostrar mensajes de advertencia al usuario. De forma predeterminada, se muestran los mensajes de advertencia. Para obtener más información, vea System.Management.Automation.PSCmdlet.WriteWarning.
Nota:
También puede mostrar mensajes de advertencia configurando la $WarningPreference variable o usando las Verbose opciones de línea de comandos y Debug . para obtener más información sobre la $WarningPreference variable, vea about_Preference_Variables.
Otros métodos y propiedades
Para obtener información sobre los otros métodos y propiedades a los que se puede acceder a través de la $PSCmdlet variable, consulte System.Management.Automation.PSCmdlet.
Por ejemplo, la propiedad ParameterSetName permite ver el conjunto de parámetros que se usa. Los conjuntos de parámetros permiten crear una función que realice diferentes tareas en función de los parámetros especificados cuando se ejecuta la función.