Condividi tramite


Creare un provider base di PowerShell per Windows

Questo argomento è il punto di partenza per imparare a creare un provider PowerShell per Windows. Il fornitore di base descritto qui fornisce metodi per avviare e interrompere il fornitore e, sebbene questo fornitore non fornisca un mezzo per accedere a uno store dati o per ottenere o impostare i dati nello store, fornisce la funzionalità di base richiesta a tutti i fornitori.

Come accennato in precedenza, il fornitore di base descritto qui implementa metodi per avviare e interrompere il fornitore. L'runtime di Windows PowerShell chiama questi metodi per inizializzare e disinizializzare il provider.

Annotazioni

Puoi trovare un esempio di questo provider nel file AccessDBSampleProvider01.cs fornito da Windows PowerShell.

Definizione della classe provider PowerShell di Windows

Il primo passo per creare un provider PowerShell di Windows è definire la sua classe .NET. Questo provider di base definisce una classe chiamata AccessDBProvider che deriva dalla classe base System.Management.Automation.Provider.CmdletProvider .

Si consiglia di inserire le classi provider in uno Providers spazio di nome del proprio spazio API, ad esempio xxx.PowerShell.Providers. Questo provider utilizza il Microsoft.Samples.PowerShell.Provider namespace, in cui vengono eseguiti tutti i campioni di provider PowerShell di Windows.

Annotazioni

La classe per un provider PowerShell di Windows deve essere esplicitamente contrassegnata come pubblica. Le classi non contrassegnate come pubbliche saranno predefinite su interne e non verranno trovate dal runtime di Windows PowerShell.

Ecco la definizione di classe per questo fornitore di base:

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

Subito prima della definizione della classe, devi dichiarare l'attributo System.Management.Automation.Provider.CmdletProviderAttribute , con la sintassi [CmdletProvider()].

Puoi impostare parole chiave attribute per dichiarare ulteriormente la classe se necessario. Si noti che l'attributo System.Management.Automation.Provider.CmdletProviderAttribute dichiarato qui include due parametri. Il primo parametro di attributo specifica il nome predefinito e adatto al provider, che l'utente può modificare successivamente. Il secondo parametro specifica le capacità definite da Windows PowerShell che il fornitore espone al runtime di Windows PowerShell durante l'elaborazione dei comandi. I valori possibili per le capacità del provider sono definiti dall'enumerazione System.Management.Automation.Provider.ProviderCapabilities . Poiché si tratta di un fornitore base, non supporta alcuna funzionalità.

Annotazioni

Il nome completamente qualificato del provider Windows PowerShell include il nome assembly e altri attributi determinati da Windows PowerShell al momento della registrazione del fornitore.

Definizione delle informazioni Provider-Specific Stato

La classe base System.Management.Automation.Provider.CmdletProvider e tutte le classi derivate sono considerate senza stato perché il runtime PowerShell di Windows crea istanze provider solo quando necessario. Pertanto, se il tuo fornitore richiede controllo completo e manutenzione dello stato per i dati specifici del fornitore, deve derivare una classe dalla classe System.Management.Automation.ProviderInfo . La tua classe derivata dovrebbe definire i membri necessari per mantenere lo stato, in modo che i dati specifici del provider possano essere accessibili quando l'runtime PowerShell di Windows chiama il metodo System.Management.Automation.Provider.CmdletProvider.Start* per inizializzare il provider.

Un provider PowerShell di Windows può anche mantenere lo stato basato sulla connessione. Per maggiori informazioni sul mantenimento dello stato della connessione, vedi Creazione di un fornitore di unità PowerShell.

Inizializzazione del Provider

Per inizializzare il provider, l'runtime di Windows PowerShell chiama il metodo System.Management.Automation.Provider.CmdletProvider.Start* quando Windows PowerShell viene avviato. Per la maggior parte, il tuo fornitore può utilizzare l'implementazione predefinita di questo metodo, che semplicemente restituisce l'oggetto System.Management.Automation.ProviderInfo che descrive il tuo fornitore. Tuttavia, nel caso in cui si voglia aggiungere ulteriori informazioni di inizializzazione, è necessario implementare il proprio metodo System.Management.Automation.Provider.CmdletProvider.Start* che restituisca una versione modificata dell'oggetto System.Management.Automation.ProviderInfo che viene passata al tuo provider. In generale, questo metodo dovrebbe restituire l'oggetto System.Management.Automation.ProviderInfo fornito che gli è passato o un oggetto System.Management.Automation.ProviderInfo modificato che contiene altre informazioni di inizializzazione.

Questo fornitore di base non sovrascrive questo metodo. Tuttavia, il seguente codice mostra l'implementazione predefinita di questo metodo:

Il fornitore può mantenere lo stato delle informazioni specifiche del fornitore come descritto in Defining Provider Specific Data State. In questo caso, la tua implementazione deve sovrascrivere il metodo System.Management.Automation.Provider.CmdletProvider.Start* per restituire un'istanza della classe derivata.

Parametri dinamici di inizio

L'implementazione del metodo System.Management.Automation.Provider.CmdletProvider.Start * tramite il tuo provider potrebbe richiedere parametri aggiuntivi. In questo caso, il provider dovrebbe sovrascrivere il metodo System.Management.Automation.Provider.CmdletProvider.StartDynamicParameters* e restituire un oggetto che abbia proprietà e campi con attributi di parsing simili a una classe cmdlet o a un oggetto System.Management.Automation.RuntimeDefinedParameterDictionary .

Questo fornitore di base non sovrascrive questo metodo. Tuttavia, il seguente codice mostra l'implementazione predefinita di questo metodo:

Disinizializzazione del Provider

Per liberare le risorse che il provider PowerShell di Windows utilizza, il tuo provider dovrebbe implementare il proprio metodo System.Management.Automation.Provider.CmdletProvider.Stop* . Questo metodo viene chiamato dal runtime Windows PowerShell per inizializzare il provider alla fine di una sessione.

Questo fornitore di base non sovrascrive questo metodo. Tuttavia, il seguente codice mostra l'implementazione predefinita di questo metodo:

Codice di esempio

Per il codice di esempio completo, vedi AccessDbProviderSample01 Code Sample.

Test del provider PowerShell di Windows

Una volta che il tuo provider PowerShell di Windows è stato registrato con Windows PowerShell, puoi testarlo eseguendo i cmdlet supportati sulla riga di comando. Per questo provider di base, esegui la nuova shell e usa il Get-PSProvider cmdlet per recuperare la lista dei provider e assicurarti che il provider AccessDb sia presente.

Get-PSProvider

Viene visualizzato l'output seguente:

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

Vedere anche

Creazione di provider PowerShell per Windows

Progettare il tuo provider PowerShell per Windows