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.
Un origen de entrada para un cmdlet es un objeto de la canalización que se origina a partir de un cmdlet ascendente. En esta sección se describe cómo agregar un parámetro al cmdlet Get-Proc (descrito en Creating Your First Cmdlet) para que el cmdlet pueda procesar objetos de canalización.
Este cmdlet Get-Proc usa un parámetro Name
que acepta la entrada de un objeto de canalización, recupera la información del proceso del equipo local en función de los nombres proporcionados y, a continuación, muestra información sobre los procesos en la línea de comandos.
Definición de la clase de cmdlet
El primer paso en la creación de cmdlets siempre es asignar un nombre al cmdlet y declarar la clase .NET que implementa el cmdlet. Este cmdlet recupera la información del proceso, por lo que el nombre del verbo elegido aquí es "Get". (Casi cualquier tipo de cmdlet que sea capaz de recuperar información puede procesar la entrada de la línea de comandos). Para obtener más información sobre los verbos de cmdlet aprobados, consulte Nombres de verbos de cmdlet.
A continuación se muestra la definición de este cmdlet Get-Proc. Los detalles de esta definición se proporcionan en Creación del primer cmdlet.
[Cmdlet(VerbsCommon.Get, "proc")]
public class GetProcCommand : Cmdlet
<Cmdlet(VerbsCommon.Get, "Proc")> _
Public Class GetProcCommand
Inherits Cmdlet
Definición de la entrada desde la canalización
En esta sección se describe cómo definir la entrada de la canalización para un cmdlet. Este cmdlet Get-Proc define una propiedad que representa el parámetro Name
como se describe en Agregar parámetros que procesan la entrada de la línea de comandos.
(Vea ese tema para obtener información general sobre cómo declarar parámetros).
Sin embargo, cuando un cmdlet necesita procesar la entrada de canalización, debe tener sus parámetros enlazados a los valores de entrada por el entorno de ejecución de Windows PowerShell. Para ello, debe agregar la palabra clave ValueFromPipeline
o agregar la palabra clave ValueFromPipelineByProperty
a la declaración de atributo System.Management.Automation.ParameterAttribute. Especifique la palabra clave ValueFromPipeline
si el cmdlet tiene acceso al objeto de entrada completo. Especifique el ValueFromPipelineByProperty
si el cmdlet solo tiene acceso a una propiedad del objeto .
Esta es la declaración de parámetros del parámetro Name
de este cmdlet de Get-Proc que acepta la entrada de canalización.
[Parameter(
Position = 0,
ValueFromPipeline = true,
ValueFromPipelineByPropertyName = true)]
[ValidateNotNullOrEmpty]
public string[] Name
{
get { return this.processNames; }
set { this.processNames = value; }
}
<Parameter(Position:=0, ValueFromPipeline:=True, _
ValueFromPipelineByPropertyName:=True), ValidateNotNullOrEmpty()> _
Public Property Name() As String()
Get
Return processNames
End Get
Set(ByVal value As String())
processNames = value
End Set
End Property
La declaración anterior establece la palabra clave ValueFromPipeline
en true
para que el tiempo de ejecución de Windows PowerShell enlace el parámetro al objeto entrante si el objeto es el mismo tipo que el parámetro o si se puede coertar al mismo tipo. La palabra clave ValueFromPipelineByPropertyName
también se establece en true
para que el entorno de ejecución de Windows PowerShell compruebe el objeto entrante de una propiedad Name
. Si el objeto entrante tiene dicha propiedad, el tiempo de ejecución enlazará el parámetro Name
a la propiedad Name
del objeto entrante.
Nota:
El valor de la palabra clave de atributo ValueFromPipeline
para un parámetro tiene prioridad sobre la configuración de la palabra clave ValueFromPipelineByPropertyName
.
Invalidación de un método de procesamiento de entrada
Si el cmdlet va a controlar la entrada de canalización, debe invalidar los métodos de procesamiento de entrada adecuados. Los métodos básicos de procesamiento de entrada se presentan en Creating Your First Cmdlet.
Este cmdlet de Get-Proc invalida el método System.Management.Automation.Cmdlet.ProcessRecord para controlar la entrada del parámetro Name
proporcionada por el usuario o un script. Este método obtendrá los procesos de cada nombre de proceso solicitado o de todos los procesos si no se proporciona ningún nombre. Observe que en system.Management.Automation.Cmdlet.ProcessRecord, la llamada a WriteObject(System.Object,System.Boolean) es el mecanismo de salida para enviar objetos de salida a la canalización. El segundo parámetro de esta llamada, enumerateCollection
, se establece en true
para indicar al runtime de Windows PowerShell que enumere la matriz de objetos de proceso y escriba un proceso cada vez en la línea de comandos.
protected override void ProcessRecord()
{
// If no process names are passed to the cmdlet, get all processes.
if (processNames == null)
{
// Write the processes to the pipeline making them available
// to the next cmdlet. The second argument of this call tells
// PowerShell to enumerate the array, and send one process at a
// time to the pipeline.
WriteObject(Process.GetProcesses(), true);
}
else
{
// If process names are passed to the cmdlet, get and write
// the associated processes.
foreach (string name in processNames)
{
WriteObject(Process.GetProcessesByName(name), true);
} // End foreach (string name...).
}
}
Protected Overrides Sub ProcessRecord()
Dim processes As Process()
'/ If no process names are passed to the cmdlet, get all processes.
If processNames Is Nothing Then
processes = Process.GetProcesses()
Else
'/ If process names are specified, write the processes to the
'/ pipeline to display them or make them available to the next cmdlet.
For Each name As String In processNames
'/ The second parameter of this call tells PowerShell to enumerate the
'/ array, and send one process at a time to the pipeline.
WriteObject(Process.GetProcessesByName(name), True)
Next
End If
End Sub 'ProcessRecord
Ejemplo de código
Para obtener el código de ejemplo de C# completo, vea Ejemplo GetProcessSample03.
Definición de tipos de objeto y formato
Windows PowerShell pasa información entre cmdlets mediante objetos .NET. Por lo tanto, es posible que un cmdlet tenga que definir su propio tipo o que el cmdlet tenga que extender un tipo existente proporcionado por otro cmdlet. Para obtener más información sobre cómo definir nuevos tipos o ampliar tipos existentes, vea Extensión de tipos de objeto y formato.
Compilación del cmdlet
Después de implementar un cmdlet, debe registrarse con Windows PowerShell a través de un complemento de Windows PowerShell. Para obtener más información sobre el registro de cmdlets, consulte Registro de cmdlets, proveedores y aplicaciones host.
Prueba del cmdlet
Cuando el cmdlet se haya registrado con Windows PowerShell, pruébelo ejecutándolo en la línea de comandos. Por ejemplo, pruebe el código del cmdlet de ejemplo. Para obtener más información sobre el uso de cmdlets desde la línea de comandos, consulte la Introducción a Windows PowerShell.
En el símbolo del sistema de Windows PowerShell, escriba los siguientes comandos para recuperar los nombres de proceso a través de la canalización.
PS> type ProcessNames | Get-Proc
Aparece la salida siguiente.
Handles NPM(K) PM(K) WS(K) VS(M) CPU(s) Id ProcessName ------- ------ ----- ----- ----- ------ -- ----------- 809 21 40856 4448 147 9.50 2288 iexplore 737 21 26036 16348 144 22.03 3860 iexplore 39 2 1024 388 30 0.08 3396 notepad 3927 62 71836 26984 467 195.19 1848 OUTLOOK
Escriba las líneas siguientes para obtener los objetos de proceso que tienen una propiedad
Name
de los procesos denominados "IEXPLORE". En este ejemplo se usa el cmdletGet-Process
(proporcionado por Windows PowerShell) como comando ascendente para recuperar los procesos "IEXPLORE".PS> Get-Process iexplore | Get-Proc
Aparece la salida siguiente.
Handles NPM(K) PM(K) WS(K) VS(M) CPU(s) Id ProcessName ------- ------ ----- ----- ----- ------ -- ----------- 801 21 40720 6544 142 9.52 2288 iexplore 726 21 25872 16652 138 22.09 3860 iexplore 801 21 40720 6544 142 9.52 2288 iexplore 726 21 25872 16652 138 22.09 3860 iexplore
Véase también
agregar parámetros que procesan la entrada de la línea de comandos
extensión de tipos de objeto y formato
Registro de cmdlets, proveedores y aplicaciones host