Adding Aliases, Wildcard Expansion, and Help to Cmdlet Parameters (Adicionar Aliases, Expansão de Carateres Universais e Ajuda a Parâmetros de Cmdlets)

Esta secção descreve como adicionar pseudónimos, expansão wildcard e mensagens de ajuda aos parâmetros do Stop-Proc cmdlet (descrito na Criação de um Cmdlet que Modifica o Sistema).

Este Stop-Proc cmdlet tenta parar os processos que são recuperados usando o Get-Proc cmdlet (descrito na Criação do Seu Primeiro Comandante).

Definição do Cmdlet

O primeiro passo na criação de cmdlet é sempre nomear o cmdlet e declarar a classe .NET que implementa o cmdlet. Como está a escrever um cmdlet para mudar o sistema, deve ser nomeado em conformidade. Como este cmdlet para os processos do sistema, utiliza o verbo Stop, definido pela classe System.Management.Automation.Verbslifecycle , com o substantivo Proc para indicar o processo. Para obter mais informações sobre verbos de cmdlet aprovados, consulte o Cmdlet Verb Names.

O seguinte código é a definição de classe para este Stop-Proc cmdlet.

[Cmdlet(VerbsLifecycle.Stop, "proc",
        SupportsShouldProcess = true)]
public class StopProcCommand : Cmdlet

Definição de parâmetros para modificação do sistema

O seu cmdlet precisa de definir parâmetros que suportam modificações do sistema e feedback do utilizador. O cmdlet deve definir um parâmetro nome ou equivalente de modo a que o cmdlet possa modificar o sistema por algum tipo de identificador. Além disso, o cmdlet deve definir os parâmetros Force e PassThru . Para obter mais informações sobre estes parâmetros, consulte criar um Cmdlet que modifie o Sistema.

Definição de um pseudónimo de parâmetro

Um pseudónimo de parâmetro pode ser um nome alternativo ou um nome curto de 1 ou 2 letras bem definido para um parâmetro cmdlet. Em ambos os casos, o objetivo de usar pseudónimos é simplificar a entrada do utilizador a partir da linha de comando. Windows PowerShell suporta pseudónimos de parâmetros através do atributo System.Management.Automation.Aliasattribute, que utiliza a sintaxe [Alias()]da declaração.

O código que se segue mostra como um pseudónimo é adicionado ao parâmetro Nome .

/// <summary>
/// Specify the mandatory Name parameter used to identify the
/// processes to be stopped.
/// </summary>
[Parameter(
           Position = 0,
           Mandatory = true,
           ValueFromPipeline = true,
           ValueFromPipelineByPropertyName = true,
           HelpMessage = "The name of one or more processes to stop. Wildcards are permitted."
)]
[Alias("ProcessName")]
public string[] Name
{
  get { return processNames; }
  set { processNames = value; }
}
private string[] processNames;

Além da utilização do atributo System.Management.Automation.Aliasattribute, o Windows PowerShell executa a correspondência parcial do nome, mesmo que não sejam especificados pseudónimos. Por exemplo, se o seu cmdlet tiver um parâmetro FileName e esse for o único parâmetro que começa porF, o utilizador pode introduzirFilename, File``Filenamou Fi``F ainda reconhecer a entrada como parâmetro Do Nome de Ficheiros.

Criação de Ajuda para Parâmetros

Windows PowerShell permite criar ajuda para parâmetros cmdlet. Faça isto para qualquer parâmetro utilizado para modificação do sistema e feedback do utilizador. Para cada parâmetro de suporte de ajuda, pode definir a palavra-chave do atributo HelpMessage no System.Management.Automation.Automation.Parameterattribute attribute declaração. Esta palavra-chave define o texto a apresentar ao utilizador para assistência na utilização do parâmetro. Também pode definir a palavra-chave HelpMessageBaseName para identificar o nome base de um recurso a utilizar para a mensagem. Se definir esta palavra-chave, também deve definir a palavra-chave HelpMessageResourceId para especificar o identificador de recursos.

O seguinte código deste Stop-Proc cmdlet define a palavra-chave do atributo HelpMessage para o parâmetro Nome .

/// <summary>
/// Specify the mandatory Name parameter used to identify the
/// processes to be stopped.
/// </summary>
[Parameter(
           Position = 0,
           Mandatory = true,
           ValueFromPipeline = true,
           ValueFromPipelineByPropertyName = true,
           HelpMessage = "The name of one or more processes to stop. Wildcards are permitted."
)]

Sobrevam um método de processamento de entrada

O seu cmdlet deve sobrepor-se a um método de processamento de entrada, na maioria das vezes este será System.Management.Automation.Cmdlet.ProcessRecord. Ao modificar o sistema, o cmdlet deve ligar para o Sistema.Management.Automation.Cmdlet.ShouldProcess and System.Management.Automation.Cmdlet.ShouldContinue os métodos para permitir ao utilizador fornecer feedback antes de ser feita uma alteração. Para obter mais informações sobre estes métodos, consulte criar um Cmdlet que modifie o Sistema.

Expansão wildcard de suporte

Para permitir a seleção de vários objetos, o seu cmdlet pode utilizar as classes System.Management.Automation.WildcardPattern e System.Management.Automation.WildcardOptions para fornecer suporte de expansão wildcard para a entrada de parâmetros. Exemplos de padrões wildcard são lsa*, *.txte [a-c]*. Use o personagem de citação traseira (`) como um personagem de fuga quando o padrão contém um personagem que deve ser usado literalmente.

As expansões wildcard de nomes de ficheiros e caminhos são exemplos de cenários comuns onde o cmdlet pode querer permitir o suporte para entradas de caminhos quando a seleção de múltiplos objetos é necessária. Um caso comum encontra-se no sistema de ficheiros, onde um utilizador quer ver todos os ficheiros que residem na pasta atual.

Você deve precisar de uma implementação de padrão wildcard personalizado que combine apenas raramente. Neste caso, o seu cmdlet deve suportar a especificação completa do POSIX 1003.2, 3.13 para a expansão wildcard ou o seguinte subconjunto simplificado:

  • Ponto de interrogação (?). Corresponde a qualquer personagem no local especificado.
  • Asterisco (*). Corresponde a zero ou mais caracteres a partir do local especificado.
  • Suporte aberto ([). Introduz uma expressão de suporte de padrão que pode conter caracteres ou uma gama de caracteres. Se for necessário um intervalo, é utilizado um hífen (-) para indicar o alcance.
  • Suporte de fecho (]). Termina uma expressão de suporte de padrão.
  • Personagem de fuga de citação traseira (`). Indica que o próximo personagem deve ser levado literalmente. Tenha em atenção que ao especificar o carácter de citação traseira da linha de comando (em vez de especificar programáticamente), o carácter de fuga de citação traseira deve ser especificado duas vezes.

Nota

Para obter mais informações sobre padrões wildcard, consulte Wildcards de suporte em parâmetros Demetrões.

O código que se segue mostra como definir opções wildcard e definir o padrão wildcard utilizado para a resolução do parâmetro Nome para este cmdlet.

WildcardOptions options = WildcardOptions.IgnoreCase |
                          WildcardOptions.Compiled;
WildcardPattern wildcard = new WildcardPattern(name,options);

O código que se segue mostra como testar se o nome do processo corresponde ao padrão de wildcard definido. Note que, neste caso, se o nome do processo não corresponder ao padrão, o cmdlet continua a obter o próximo nome do processo.

if (!wildcard.IsMatch(processName))
{
  continue;
}

Amostra de código

Para obter o código de amostra completo C#, consulte a amostra StopProcessSample03.

Definir tipos de objetos e formatação

Windows PowerShell transmite informações entre cmdlets utilizando objetos .Net. Consequentemente, um cmdlet pode ter de definir o seu próprio tipo, ou o cmdlet pode ter de estender um tipo existente fornecido por outro cmdlet. Para obter mais informações sobre a definição de novos tipos ou o alargamento dos tipos existentes, consulte a Extensão de Tipos de Objetos e formatação.

Construção do Comandante

Após a implementação de um cmdlet, este deve ser registado com Windows PowerShell através de um encaixe Windows PowerShell. Para obter mais informações sobre o registo de cmdlets, consulte Como Registar Cmdlets, Fornecedores e Aplicações de Anfitrião.

Testar o Cmdlet

Quando o seu cmdlet estiver registado com Windows PowerShell, pode testá-lo executando-o na linha de comando. Vamos testar a amostra Stop-Proc cmdlet. Para obter mais informações sobre a utilização de cmdlets da linha de comando, consulte o Introdução com Windows PowerShell.

  • Inicie Windows PowerShell e use Stop-Proc para parar um processo usando o nome de processo para o parâmetro Nome.

    PS> Stop-Proc -ProcessName notepad
    

    Aparece a seguinte saída.

    Confirm
    Are you sure you want to perform this action?
    Performing operation "Stop-Proc" on Target "notepad (3496)".
    [Y] Yes  [A] Yes to All  [N] No  [L] No to All  [S] Suspend  [?] Help (default is "Y"): Y
    
  • Faça a seguinte entrada na linha de comando. Como o parâmetro Nome é obrigatório, é solicitado. A introdução !? traz o texto de ajuda associado ao parâmetro.

    PS> Stop-Proc
    

    Aparece a seguinte saída.

    Cmdlet Stop-Proc at command pipeline position 1
    Supply values for the following parameters:
    (Type !? for Help.)
    Name[0]: !?
    The name of one or more processes to stop. Wildcards are permitted.
    Name[0]: notepad
    
  • Agora faça a seguinte entrada para parar todos os processos que correspondam ao padrão *note*wildcard . É solicitado antes de parar cada processo que corresponda ao padrão.

    PS> Stop-Proc -Name *note*
    

    Aparece a seguinte saída.

    Confirm
    Are you sure you want to perform this action?
    Performing operation "Stop-Proc" on Target "notepad (1112)".
    [Y] Yes  [A] Yes to All  [N] No  [L] No to All  [S] Suspend  [?] Help (default is "Y"): Y
    

    Aparece a seguinte saída.

    Confirm
    Are you sure you want to perform this action?
    Performing operation "Stop-Proc" on Target "ONENOTEM (3712)".
    [Y] Yes  [A] Yes to All  [N] No  [L] No to All  [S] Suspend  [?] Help (default is "Y"): N
    

    Aparece a seguinte saída.

    Confirm
    Are you sure you want to perform this action?
    Performing operation "Stop-Proc" on Target "ONENOTE (3592)".
    [Y] Yes  [A] Yes to All  [N] No  [L] No to All  [S] Suspend  [?] Help (default is "Y"): N
    

Consulte também