Compartir a través de


Creación de un proveedor básico de Windows PowerShell

Este tema es el punto de partida para aprender a crear un proveedor de Windows PowerShell. El proveedor básico descrito aquí proporciona métodos para iniciar y detener el proveedor, y aunque este proveedor no proporciona un medio para acceder a un almacén de datos o para obtener o establecer los datos en el almacén de datos, proporciona la funcionalidad básica que requieren todos los proveedores.

Como se mencionó anteriormente, el proveedor básico descrito aquí implementa métodos para iniciar y detener el proveedor. El tiempo de ejecución de Windows PowerShell llama a estos métodos para inicializar y anular la inicialización del proveedor.

Nota:

Puede encontrar un ejemplo de este proveedor en el archivo AccessDBSampleProvider01.cs proporcionado por Windows PowerShell.

Definición de la clase de proveedor de Windows PowerShell

El primer paso para crear un proveedor de Windows PowerShell es definir su clase .NET. Este proveedor básico define una clase denominada AccessDBProvider que deriva de la clase base System.Management.Automation.Provider.CmdletProvider.

Se recomienda colocar las clases de proveedor en un espacio de nombres Providers del espacio de nombres de la API, por ejemplo, xxx.PowerShell.Providers. Este proveedor usa el espacio de nombres Microsoft.Samples.PowerShell.Provider, en el que se ejecutan todos los ejemplos del proveedor de Windows PowerShell.

Nota:

La clase de un proveedor de Windows PowerShell debe marcarse explícitamente como pública. Las clases no marcadas como públicas tendrán como valor predeterminado interno y el tiempo de ejecución de Windows PowerShell no lo encontrará.

Esta es la definición de clase para este proveedor básico:

[CmdletProvider("AccessDB", ProviderCapabilities.None)]
public class AccessDBProvider : CmdletProvider

Justo antes de la definición de clase, debe declarar el atributo System.Management.Automation.Provider.CmdletProviderAttribute, con la sintaxis [CmdletProvider()].

Puede establecer palabras clave de atributo para declarar aún más la clase si es necesario. Observe que el atributo System.Management.Automation.Provider.CmdletProviderAttribute declarado aquí incluye dos parámetros. El primer parámetro de atributo especifica el nombre descriptivo predeterminado del proveedor, que el usuario puede modificar más adelante. El segundo parámetro especifica las funcionalidades definidas por Windows PowerShell que el proveedor expone al entorno de ejecución de Windows PowerShell durante el procesamiento de comandos. Los valores posibles para las funcionalidades del proveedor se definen mediante la enumeración System.Management.Automation.Provider.ProviderCapabilities. Dado que se trata de un proveedor base, no admite ninguna funcionalidad.

Nota:

El nombre completo del proveedor de Windows PowerShell incluye el nombre del ensamblado y otros atributos determinados por Windows PowerShell al registrar el proveedor.

Definición de información de estado de Provider-Specific

La clase base System.Management.Automation.Provider.CmdletProvider y todas las clases derivadas se consideran sin estado porque el entorno de ejecución de Windows PowerShell crea instancias de proveedor solo según sea necesario. Por lo tanto, si el proveedor requiere control total y mantenimiento de estado para datos específicos del proveedor, debe derivar una clase de la clase System.Management.Automation.ProviderInfo. La clase derivada debe definir los miembros necesarios para mantener el estado para que se pueda tener acceso a los datos específicos del proveedor cuando el tiempo de ejecución de Windows PowerShell llama al método System.Management.Automation.Provider.CmdletProvider.Start* para inicializar el proveedor.

Un proveedor de Windows PowerShell también puede mantener el estado basado en la conexión. Para obtener más información sobre cómo mantener el estado de conexión, consulte Creación de un proveedor de unidades de PowerShell.

Inicialización del proveedor

Para inicializar el proveedor, el entorno de ejecución de Windows PowerShell llama al método System.Management.Automation.Provider.CmdletProvider.Start* cuando se inicia Windows PowerShell. En la mayor parte, el proveedor puede usar la implementación predeterminada de este método, que simplemente devuelve el objeto System.Management.Automation.ProviderInfo que describe el proveedor. Sin embargo, en el caso de que desee agregar información de inicialización adicional, debe implementar su propio System.Management.Automation.Provider.CmdletProvider.Start* método que devuelve una versión modificada del objeto system.Management.Automation.ProviderInfo que se pasa al proveedor. En general, este método debe devolver el objeto System.Management.Automation.ProviderInfo proporcionado pasado a él o un objeto modificado System.Management.Automation.ProviderInfo que contiene otra información de inicialización.

Este proveedor básico no invalida este método. Sin embargo, el código siguiente muestra la implementación predeterminada de este método:

El proveedor puede mantener el estado de información específica del proveedor, tal como se describe en Definición del estado de datos específico del proveedor. En este caso, la implementación debe invalidar el método System.Management.Automation.Provider.CmdletProvider.Start* para devolver una instancia de la clase derivada.

Iniciar parámetros dinámicos

La implementación del proveedor del método System.Management.Automation.Provider.CmdletProvider.Start* podría requerir parámetros adicionales. En este caso, el proveedor debe invalidar el método System.Management.Automation.Provider.CmdletProvider.StartDynamicParameters* y devolver un objeto que tenga propiedades y campos con atributos de análisis similares a una clase de cmdlet o un objeto System.Management.Automation.RuntimeDefinedParameterDiction ary.

Este proveedor básico no invalida este método. Sin embargo, el código siguiente muestra la implementación predeterminada de este método:

Anular la inicialización del proveedor

Para liberar recursos que usa el proveedor de Windows PowerShell, el proveedor debe implementar su propio método System.Management.Automation.Provider.CmdletProvider.Stop*. El tiempo de ejecución de Windows PowerShell llama a este método para anular la inicialización del proveedor al cerrar una sesión.

Este proveedor básico no invalida este método. Sin embargo, el código siguiente muestra la implementación predeterminada de este método:

Ejemplo de código

Para obtener código de ejemplo completo, consulte ejemplo de código AccessDbProviderSample01.

Probar el proveedor de Windows PowerShell

Una vez registrado el proveedor de Windows PowerShell con Windows PowerShell, puede probarlo ejecutando los cmdlets admitidos en la línea de comandos. Para este proveedor básico, ejecute el nuevo shell y use el cmdlet Get-PSProvider para recuperar la lista de proveedores y asegurarse de que el proveedor accessDb está presente.

Get-PSProvider

Aparece la siguiente salida:

Name                 Capabilities                  Drives
----                 ------------                  ------
AccessDb             None                          {}
Alias                ShouldProcess                 {Alias}
Environment          ShouldProcess                 {Env}
FileSystem           Filter, ShouldProcess         {C, Z}
Function             ShouldProcess                 {function}
Registry             ShouldProcess                 {HKLM, HKCU}

Véase también

creación de proveedores de Windows PowerShell

diseñar el proveedor de Windows PowerShell