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.
Este tema es el punto de partida para aprender a crear un proveedor de PowerShell para Windows. 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 ni para obtener o establecer los datos en el almacén, sí 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 entorno de ejecución de Windows PowerShell llama a estos métodos para inicializar y desinicializar al proveedor.
Nota:
Puedes encontrar una muestra de este proveedor en el archivo AccessDBSampleProvider01.cs proporcionado por Windows PowerShell.
Definición de la clase de proveedor PowerShell de Windows
El primer paso para crear un proveedor de PowerShell para Windows es definir su clase .NET. Este proveedor básico define una clase llamada AccessDBProvider que deriva de la clase base System.Management.Automation.Provider.CmdletProvider .
Se recomienda colocar tus clases de proveedor en un Providers espacio de nombres dentro de tu espacio de nombres de API, por ejemplo, xxx.PowerShell.Providers. Este proveedor utiliza el Microsoft.Samples.PowerShell.Provider espacio de nombres en el que se ejecutan todas las muestras de proveedores de Windows PowerShell.
Nota:
La clase para un proveedor de PowerShell de Windows debe estar explícitamente marcada como pública. Las clases que no están marcadas como públicas se activarán por defecto en internas y no serán encontradas por el entorno de ejecución de Windows PowerShell.
Aquí está 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, debes declarar el atributo System.Management.Automation.Provider.CmdletProviderAttribute , con la sintaxis [CmdletProvider()].
Puedes establecer palabras clave de atributos para declarar la clase si es necesario. Observa que el atributo System.Management.Automation.Provider.CmdletProviderAttribute declarado aquí incluye dos parámetros. El primer parámetro de atributo especifica el nombre adecuado para el proveedor, que el usuario puede modificar más adelante. El segundo parámetro especifica las capacidades 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 capacidades del proveedor se definen mediante la enumeración System.Management.Automation.Provider.ProviderCapabilities . Como es un proveedor base, no soporta ninguna capacidad.
Nota:
El nombre totalmente cualificado del proveedor de Windows PowerShell incluye el nombre de ensamblador y otros atributos determinados por Windows PowerShell al registrarse del proveedor.
Definición de Provider-Specific Información de Estado
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 cuando sea necesario. Por lo tanto, si tu 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 . Tu clase derivada debe definir los miembros necesarios para mantener el estado, de modo que los datos específicos del proveedor puedan ser accedidos cuando el entorno de ejecución PowerShell de Windows llame al método System.Management.Automation.Provider.CmdletProvider.Start* para inicializar el proveedor.
Un proveedor de PowerShell de Windows también puede mantener el estado basado en conexión. Para más información sobre cómo mantener el estado de la conexión, consulte Creación de un proveedor de unidades 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 su mayoría, tu proveedor puede usar la implementación predeterminada de este método, que simplemente devuelve el objeto System.Management.Automation.ProviderInfo que describe a tu proveedor. Sin embargo, en caso de que quieras añadir información adicional de inicialización, deberías implementar tu propio método System.Management.Automation.Provider.CmdletProvider.Start* que devuelva una versión modificada del objeto System.Management.Automation.ProviderInfo que se pasa a tu proveedor. En general, este método debería devolver el objeto System.Management.Automation.ProviderInfo proporcionado que se le ha pasado o un objeto System.Management.Automation.ProviderInfo modificado que contenga otra información de inicialización.
Este proveedor básico no anula este método. Sin embargo, el siguiente código muestra la implementación predeterminada de este método:
El proveedor puede mantener el estado de la información específica del proveedor tal y como se describe en Definiendo el Estado de Datos específico del Proveedor. En este caso, tu implementación debe anular el método System.Management.Automation.Provider.CmdletProvider.Start* para devolver una instancia de la clase derivada.
Parámetros dinámicos de inicio
La implementación de tu proveedor del método System.Management.Automation.Provider.CmdletProvider.Start* puede requerir parámetros adicionales. En este caso, el proveedor debe sobrescribir el método System.Management.Automation.Provider.CmdletProvider.StartDynamicParameters* y devolver un objeto que tenga propiedades y campos con atributos de análisis sintáctico similares a una clase cmdlet o a un objeto System.Management.Automation.RuntimeDefinedParameterDictionary .
Este proveedor básico no anula este método. Sin embargo, el siguiente código muestra la implementación predeterminada de este método:
Desinicialización del proveedor
Para liberar los recursos que utiliza el proveedor PowerShell de Windows, su proveedor debe implementar su propio método System.Management.Automation.Provider.CmdletProvider.Stop* . Este método es llamado por el entorno de ejecución de Windows PowerShell para desinicializar al proveedor al final de una sesión.
Este proveedor básico no anula este método. Sin embargo, el siguiente código muestra la implementación predeterminada de este método:
Ejemplo de código
Para el código de muestra completo, consulte Ejemplo de código AccessDbProviderSample01.
Probando el proveedor PowerShell de Windows
Una vez que tu proveedor de Windows PowerShell haya sido registrado en Windows PowerShell, puedes probarlo ejecutando los cmdlets compatibles en la línea de comandos. Para este proveedor básico, ejecuta el nuevo shell y utiliza el Get-PSProvider cmdlet para recuperar la lista de proveedores y asegurarte de que el proveedor AccessDb está presente.
Get-PSProvider
Se mostrará 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}