Información general del cmdlet
Un cmdlet es un comando ligero que se usa en el entorno de PowerShell. El tiempo de ejecución de PowerShell invoca estos cmdlets en el contexto de los scripts de automatización que se proporcionan en la línea de comandos. El tiempo de ejecución de PowerShell también los invoca mediante programación a través de las API de PowerShell.
Cmdlets
Los cmdlets realizan una acción y suelen devolver un objeto de Microsoft .NET al comando siguiente en la canalización. Un cmdlet es un único comando que participa en la semántica de canalización de PowerShell. Aquí se incluyen cmdlets binarios (C#), funciones de script avanzadas, CDXML y flujos de trabajo.
En esta documentación del SDK se describe cómo crear cmdlets binarios escritos en C#. Para obtener información sobre los cmdlets basados en scripts, consulte:
Para crear un cmdlet binario, debe implementar una clase de cmdlet que derive de una de las dos clases base de cmdlet especializadas. La clase derivada debe:
- Declare un atributo que identifique la clase derivada como un cmdlet.
- Defina las propiedades públicas que se decoran con atributos que identifican las propiedades públicas como parámetros de cmdlet.
- Invalide uno o varios de los métodos de procesamiento de entrada para procesar registros.
Puede cargar el ensamblado que contiene la clase directamente mediante el cmdlet Import-Module o puede crear una aplicación host que cargue el ensamblado mediante la API System.Management.Automation.Runspaces.Initialsessionstate. Ambos métodos proporcionan acceso mediante programación y de línea de comandos a la funcionalidad del cmdlet .
Términos del cmdlet
Los siguientes términos se usan con frecuencia en la documentación del cmdlet de PowerShell:
Atributo de cmdlet
Atributo de .NET que se usa para declarar una clase de cmdlet como cmdlet. Aunque PowerShell usa otros atributos que son opcionales, se requiere el atributo Cmdlet. Para obtener más información sobre este atributo, vea Declaración de atributo de cmdlet.
Parámetro del cmdlet
Propiedades públicas que definen los parámetros que están disponibles para el usuario o para la aplicación que ejecuta el cmdlet. Los cmdlets pueden tener parámetros obligatorios, con nombre, posicionales y modificadores. Los parámetros switch permiten definir parámetros que se evalúan solo si los parámetros se especifican en la llamada. Para obtener más información sobre los distintos tipos de parámetros, vea Parámetros de cmdlet.
Conjunto de parámetros
Grupo de parámetros que pueden usarse en el mismo comando para realizar una acción específica. Un cmdlet puede tener varios conjuntos de parámetros, pero cada conjunto de parámetros debe tener al menos un parámetro que sea único. Un buen diseño de cmdlet sugiere encarecidamente que el parámetro único también sea un parámetro necesario. Para obtener más información sobre los conjuntos de parámetros, vea Cmdlet Parameter Sets.
Parámetro dinámico
Parámetro que se agrega al cmdlet en tiempo de ejecución. Normalmente, los parámetros dinámicos se agregan al cmdlet cuando otro parámetro se establece en un valor específico. Para obtener más información sobre los parámetros dinámicos, vea Parámetros dinámicos del cmdlet.
Métodos de procesamiento de entrada
La clase System.Management.Automation.Cmdlet proporciona los siguientes métodos virtuales que se usan para procesar registros. Todas las clases de cmdlet derivadas deben invalidar uno o varios de los tres primeros métodos:
- System.Management.Automation.Cmdlet.BeginProcessing:se usa para proporcionar funcionalidad opcional de procesamiento previo y único para el cmdlet.
- System.Management.Automation.Cmdlet.ProcessRecord:se usa para proporcionar la funcionalidad de procesamiento de registro por registro para el cmdlet. Es posible que se llame al método System.Management.Automation.Cmdlet.ProcessRecord varias veces, o no, en función de la entrada del cmdlet.
- System.Management.Automation.Cmdlet.EndProcessing:se usa para proporcionar una funcionalidad opcional de procesamiento posterior al procesamiento para el cmdlet.
- System.Management.Automation.Cmdlet.StopProcessing:se usa para detener el procesamiento cuando el usuario detiene el cmdlet de forma asincrónica (por ejemplo, presionando CTRL + C).
Para obtener más información sobre estos métodos, vea Métodos de procesamiento de entrada de cmdlet.
Al implementar un cmdlet, debe invalidar al menos uno de estos métodos de procesamiento de entrada. Normalmente, ProcessRecord() es el método que se invalida porque se llama para cada registro que procesa el cmdlet. En cambio, el método BeginProcessing() y el método EndProcessing() se llaman una vez para realizar el procesamiento previo o posterior de los registros. Para obtener más información sobre estos métodos, vea Métodos de procesamiento de entrada.
Característica ShouldProcess
PowerShell permite crear cmdlets que solicitan al usuario comentarios antes de que el cmdlet haga un cambio en el sistema. Para usar esta característica, el cmdlet debe declarar que admite la característica al declarar el atributo Cmdlet y el cmdlet debe llamar a los métodos ShouldProcess
System.Management.Automation.Cmdlet.ShouldProcess y System.Management.Automation.Cmdlet.ShouldContinue desde dentro de un método de procesamiento de entrada. Para obtener más información sobre cómo admitir la ShouldProcess
funcionalidad, vea Solicitar confirmación.
Transacción
Grupo lógico de comandos que se tratan como una sola tarea. La tarea produce un error automáticamente si se produce un error en cualquier comando del grupo y el usuario tiene la opción de aceptar o rechazar las acciones realizadas dentro de la transacción. Para participar en una transacción, el cmdlet debe declarar que admite transacciones cuando se declara el atributo Cmdlet. La compatibilidad con transacciones se introdujo en Windows PowerShell 2.0. Para obtener más información sobre las transacciones, vea Cómo admitir transacciones.
Diferencia de los cmdlets con respecto a los comandos
Los cmdlets difieren de los comandos de otros entornos de shell de comandos de las maneras siguientes:
- Los cmdlets son instancias de clases de .NET; no son ejecutables independientes.
- Los cmdlets se pueden crear a partir de unas docenas de líneas de código.
- Los cmdlets no suelen realizar su propio análisis, presentación de errores o formato de salida. El tiempo de ejecución de PowerShell controla el análisis, la presentación de errores y el formato de salida.
- Los cmdlets procesan objetos de entrada de la canalización en lugar de secuencias de texto, y los cmdlets suelen entregar objetos como salida a la canalización.
- Los cmdlets están orientados a registros porque procesan un único objeto a la vez.
Clases base de cmdlets
Windows PowerShell admite cmdlets derivados de las dos clases base siguientes.
La mayoría de los cmdlets se basan en clases de .NET que derivan de la clase base System.Management.Automation.Cmdlet. Derivar de esta clase permite que un cmdlet use el conjunto mínimo de dependencias en el entorno Windows PowerShell ejecución. lo que ofrece dos ventajas. La primera ventaja es que los objetos de cmdlet son más pequeños y es menos probable que se ven afectados por los cambios en el tiempo de ejecución de PowerShell. La segunda ventaja es que, si es así, puede crear directamente una instancia del objeto de cmdlet y, a continuación, invocarla directamente en lugar de invocarla a través del tiempo de ejecución de PowerShell.
Los cmdlets más complejos se basan en clases .NET que derivan de la clase base System.Management.Automation.PSCmdlet. La derivación de esta clase proporciona mucho más acceso al entorno de ejecución de PowerShell. Este acceso permite que el cmdlet llame a scripts, acceda a proveedores y acceda al estado de sesión actual. (Para acceder al estado de sesión actual, obtiene y establece las variables y preferencias de sesión). Sin embargo, derivar de esta clase aumenta el tamaño del objeto de cmdlet y significa que el cmdlet está más estrechamente acoplado a la versión actual del tiempo de ejecución de PowerShell.
En general, a menos que necesite el acceso extendido al entorno de ejecución de PowerShell, debe derivar de la clase System.Management.Automation.Cmdlet. Sin embargo, el entorno de ejecución de PowerShell tiene amplias funcionalidades de registro para la ejecución de cmdlets. Si el modelo de auditoría depende de este registro, puede evitar la ejecución del cmdlet desde otro cmdlet derivando de la clase System.Management.Automation.PSCmdlet.
Atributos del cmdlet
PowerShell define varios atributos de .NET que se usan para administrar cmdlets y para especificar la funcionalidad común que proporciona PowerShell y que podría ser necesaria para el cmdlet. Por ejemplo, los atributos se usan para designar una clase como un cmdlet, para especificar los parámetros del cmdlet y para solicitar la validación de la entrada para que los desarrolladores de cmdlets no tengan que implementar esa funcionalidad en su código de cmdlet. Para obtener más información sobre los atributos, vea Atributos de PowerShell.
Nombres de cmdlets
PowerShell usa un par de nombres verbo y sustantivo para dar nombre a los cmdlets. Por ejemplo, el cmdlet Get-Command
incluido en PowerShell se usa para obtener todos los cmdlets que están registrados en el shell de comandos. El verbo identifica la acción que realiza el cmdlet y el nombre identifica el recurso en el que el cmdlet realiza la acción.
Estos nombres se especifican cuando la clase .NET se declara como un cmdlet. Para obtener más información sobre cómo declarar una clase .NET como un cmdlet, vea Declaración de atributo de cmdlet.
Escribir código de cmdlet
En este documento se proporcionan dos maneras de detectar cómo se escribe el código del cmdlet. Si prefiere ver el código sin mucha explicación, consulte Ejemplos de código de cmdlet. Si prefiere obtener más explicaciones sobre el código, vea los temas GetProc Tutorial, StopProc Tutorialo SelectStr Tutorial.
Para obtener más información sobre las directrices para escribir cmdlets, vea Instrucciones de desarrollo de cmdlets.
Consulte también
Conceptos de los cmdlets de PowerShell