Compartilhar via


Criando um Provedor Básico de PowerShell para Windows

Este tópico é o ponto de partida para aprender a criar um provedor Windows PowerShell. O provedor básico descrito aqui fornece métodos para iniciar e encerrar o provedor e, embora esse provedor não forneça um meio de acessar um armazenamento de dados ou obter ou definir os dados nele, ele fornece a funcionalidade básica exigida por todos os provedores.

Como mencionado anteriormente, o provedor básico descrito aqui implementa métodos para iniciar e parar o provedor. O runtime do Windows PowerShell chama esses métodos para inicializar e desinicializar o provedor.

Observação

Você pode encontrar uma amostra desse provedor no arquivo AccessDBSampleProvider01.cs fornecido pelo Windows PowerShell.

Definindo a Classe de Provedor PowerShell do Windows

O primeiro passo para criar um provedor Windows PowerShell é definir sua classe .NET. Esse fornecedor básico define uma classe chamada AccessDBProvider que deriva da classe base System.Management.Automation.Provider.CmdletProvider .

Recomenda-se que você coloque suas classes de provedor em um Providers namespace do seu espaço de API, por exemplo, xxx.PowerShell.Providers. Esse provedor utiliza o Microsoft.Samples.PowerShell.Provider namespace, onde todos os exemplos de provedores Windows PowerShell rodam.

Observação

A classe para um provedor Windows PowerShell deve ser explicitamente marcada como pública. Classes não marcadas como públicas irão usar o padrão interno e não serão encontradas pelo runtime do Windows PowerShell.

Aqui está a definição da classe para esse provedor básico:

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

Logo antes da definição da classe, você deve declarar o atributo System.Management.Automation.Provider.CmdletProviderAttribute , com a sintaxe [CmdletProvider()].

Você pode definir palavras-chave de atributos para declarar ainda mais a classe, se necessário. Note que o atributo System.Management.Automation.Provider.CmdletProviderAttributes declarado aqui inclui dois parâmetros. O primeiro parâmetro de atributo especifica o nome amigável ao padrão para o provedor, que o usuário pode modificar posteriormente. O segundo parâmetro especifica as capacidades definidas pelo Windows PowerShell que o provedor expõe ao tempo de execução do Windows PowerShell durante o processamento de comandos. Os valores possíveis para as capacidades do provedor são definidos pela enumeração System.Management.Automation.Provider.ProviderCapabilities . Como este é um provedor base, ele não suporta nenhuma capacidade.

Observação

O nome totalmente qualificado do provedor Windows PowerShell inclui o nome assembly e outros atributos determinados pelo Windows PowerShell ao registrar o provedor.

Definindo Provider-Specific Informação de Estado

A classe base System.Management.Automation.Provider.CmdletProvider e todas as classes derivadas são consideradas sem estado porque o runtime do Windows PowerShell cria instâncias de provedor apenas conforme necessário. Portanto, se seu provedor exige controle total e manutenção do estado para dados específicos do provedor, ele deve derivar uma classe da classe System.Management.Automation.ProviderInfo . Sua classe derivada deve definir os membros necessários para manter o estado, de modo que os dados específicos do provedor possam ser acessados quando o runtime do Windows PowerShell chamar o método System.Management.Automation.Provider.CmdletProvider.Start* para inicializar o provedor.

Um provedor de PowerShell com Windows também pode manter o estado baseado em conexão. Para mais informações sobre como manter o estado da conexão, veja Criação de um Provedor de Unidade PowerShell.

Inicializando o Provedor

Para inicializar o provedor, o tempo de execução do Windows PowerShell chama o método System.Management.Automation.Provider.CmdletProvider.Start* quando o Windows PowerShell é iniciado. Na maior parte das vezes, seu provedor pode usar a implementação padrão desse método, que simplesmente retorna o objeto System.Management.Automation.ProviderInfo que descreve seu provedor. No entanto, no caso de você quiser adicionar informações adicionais de inicialização, deve implementar seu próprio método System.Management.Automation.Provider.CmdletProvider.Start* que retorne uma versão modificada do objeto System.Management.Automation.ProviderInfo que é passada ao seu provedor. Em geral, esse método deve retornar o objeto System.Management.Automation.ProviderInfo fornecido passado para ele ou um objeto System.Management.Automation.ProviderInfo modificado que contenha outras informações de inicialização.

Esse provedor básico não anula esse método. No entanto, o código a seguir mostra a implementação padrão desse método:

O provedor pode manter o estado das informações específicas do provedor, conforme descrito em Definindo o Estado dos Dados Específicos do Provedor. Nesse caso, sua implementação deve sobrescrever o método System.Management.Automation.Provider.CmdletProvider.Start* para retornar uma instância da classe derivada.

Parâmetros Dinâmicos de Início

A implementação do seu fornecedor do método System.Management.Automation.Provider.CmdletProvider.Start* pode exigir parâmetros adicionais. Nesse caso, o provedor deve sobrescrever o método System.Management.Automation.Provider.CmdletProvider.StartDynamicParameters* e retornar um objeto que tenha propriedades e campos com atributos de análise semelhantes a uma classe cmdlet ou a um objeto System.Management.Automation.RuntimeDefinedParameterDictionary .

Esse provedor básico não anula esse método. No entanto, o código a seguir mostra a implementação padrão desse método:

Desinicializando o Provedor

Para liberar recursos que o provedor Windows PowerShell utiliza, seu provedor deve implementar seu próprio método System.Management.Automation.Provider.CmdletProvider.Stop* . Esse método é chamado pelo runtime do Windows PowerShell para desinicializar o provedor ao final de uma sessão.

Esse provedor básico não anula esse método. No entanto, o código a seguir mostra a implementação padrão desse método:

Exemplo de código

Para um código de exemplo completo, veja AccessDbProviderSample01 Code Sample.

Testando o Provedor Windows PowerShell

Depois que seu provedor de Windows PowerShell estiver registrado no Windows PowerShell, você pode testá-lo executando os cmdlets suportados na linha de comando. Para esse provedor básico, execute o novo shell e use o Get-PSProvider cmdlet para recuperar a lista de provedores e garantir que o provedor AccessDb esteja presente.

Get-PSProvider

O seguinte resultado é exibido:

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

Consulte Também

Criando Provedores PowerShell para Windows

Projetando seu Provedor de PowerShell para Windows