TÓPICO
    about_Functions

DESCRIÇÃO RESUMIDA
    Descreve como criar e usar funções no Windows PowerShell. 


DESCRIÇÃO LONGA
    Uma função é uma lista de instruções que tem um nome atribuído 
    por você. Ao executar uma função, você digita o nome da função. 
    As instruções na lista são executadas como se você as tivesse 
    digitado no prompt de comando. 

    Como ocorre com os cmdlets, as funções podem ter parâmetros. Os 
    parâmetros podem ser nomeados, posicionais, de opção ou 
    dinâmicos. Os parâmetros de função podem ser lidos na linha de 
    comando ou no pipeline. 

    As funções retornam valores que podem ser exibidos, atribuídos a 
    variáveis ou passados a outras funções ou cmdlets. 

    A lista de instruções da função pode conter tipos diferentes de 
    listas de instruções com as palavras-chave Begin, Process e End. 
    Essas listas de instruções tratam as entradas provenientes do 
    pipeline de formas diferentes.

    Um filtro é um tipo especial de função que usa a palavra-chave 
    Filtro. 

    Funções também podem se comportar como cmdlets. Você pode criar 
    uma função que funcione exatamente como um cmdlet sem usar 
    programação C#. Para obter mais informações, consulte 
    about_Functions_Advanced.


  Sintaxe
      Esta é a sintaxe de uma função:

          function [<scope:>]<name> [([type]$parameter1[,[type]$parameter2])]  
          {
              param([type]$parameter1 [,[type]$parameter2])

              dynamicparam {<lista de instruções>}
  
              begin {<lista de instruções>}
              process {<lista de instruções>}
              end {<lista de instruções>}
          }


      Uma função inclui os seguintes itens:

          - Uma palavra-chave de Função
          - Um escopo (opcional)
          - Um nome que você seleciona
          - Qualquer número de parâmetros nomeados (opcional)
          - Um ou mais comandos do Windows PowerShell entre chaves ({}) 


      Para obter mais informações sobre a palavra-chave Dynamicparam 
      e parâmetros dinâmicos em funções, consulte 
      about_Functions_Advanced_Parameters.


  Funções simples
      Funções não precisam ser complicadas para serem úteis. A função 
      a seguir obtém as variáveis de ambiente que não pertencem à 
      conta de Sistema do sistema atual: 

          função other_env 
          { 
             get-wmiObject win32_environment | 
                where {$_.username -ne "<System>"}
          }

      Para executar a função, digite "other_env". 

      Você pode criar uma caixa de ferramentas de pequenas funções 
      úteis. Adicione essas funções a seu perfil do Windows 
      PowerShell, conforme descrito em about_Profiles e mais adiante 
      neste tópico.


  Funções com parâmetros
      Você pode usar parâmetros com funções, inclusive parâmetros 
      nomeados, posicionais, de opção e dinâmicos. Para obter mais 
      informações sobre parâmetros dinâmicos em funções, consulte 
      about_Functions_Advanced_Parameters.


  Parâmetro nomeados
      Você pode definir qualquer número de parâmetros nomeados. Você 
      pode incluir um valor padrão para parâmetros nomeados, conforme 
      descrito mais adiante neste tópico.

      Você pode definir parâmetros dentro das chaves usando a 
      palavra-chave Param, conforme mostrado na seguinte sintaxe de 
      exemplo:
    
          function <name> { 
               param ([type]$parameter1[,[type]$parameter2])
               <statement list> 
          }


      Você também pode definir parâmetros fora das chaves sem a 
      palavra-chave Param, conforme mostrado na seguinte sintaxe de 
      exemplo:

          function <name> [([type]$parameter1[,[type]$parameter2])] { 
              <lista de instruções> 
          }


      Não há qualquer diferença entre esses dois métodos. Use o que 
      você preferir.

      Quando você executar a função, o valor fornecido para um 
      parâmetro será atribuído a uma variável que contém o nome do 
      parâmetro. O valor dessa variável pode ser usado na função. 

      O exemplo a seguir é de uma função chamada Small_files. Essa 
      função tem um parâmetro $size. A função exibe todos os arquivos 
      menores do que o valor do parâmetro $size e exclui diretórios:

          function small_files {
              param ($size)
              Get-ChildItem c:\ | where {
                  $_.length -lt $size -and !$_.PSIsContainer} 
	  }


      Na função, você pode usar a variável $size, que é o nome 
      definido para o parâmetro.

      Para usar essa função, digite o seguinte comando:
 
          C:\PS> function small_files -size 50


      Você também pode inserir um valor para um parâmetro nomeado sem 
      o nome do parâmetro. Por exemplo, o seguinte comando gera o 
      mesmo resultado do que um comando que nomeia o parâmetro Size:

          C:\PS> function small_files 50


      Para definir um valor padrão para um parâmetro, digite um sinal 
      de igual e o valor depois do nome do parâmetro, conforme 
      mostrado na seguinte variação do exemplo de Small_files:

          function small_files ($size = 100) {
              Get-ChildItem c:\ | where {
                  $_.length -lt $size -and !$_.PSIsContainer} 
	  }


      Se você digitar "small_files" sem um valor, a função atribuirá 
      100 a $size. Se você fornecer um valor, a função o usará.


  Parâmetros posicionais
      Um parâmetro posicional é um parâmetro sem um nome de 
      parâmetro. O Windows PowerShell usa a ordem do valor do 
      parâmetro para associar cada valor de parâmetro a um parâmetro 
      na função. 

      Ao usar parâmetros posicionais, digite um ou mais valores 
      depois do nome da função. São atribuídos valores de parâmetro 
      posicional à variável de matriz $args. O valor após o nome da 
      função é atribuído à primeira posição na matriz $args, $args[0]. 

      A função Extension a seguir adiciona a extensão de nome de 
      arquivo .txt a um nome de arquivo fornecido por você:

          function extension {
              $name = $args[0] + ".txt"
              $name
          }

          C:\PS> extension meuArquivoTexto
          meuArquivoTexto.txt
   
      Funções podem assumir mais de um parâmetro posicional. O 
      exemplo a seguir exibe valores inseridos com o nome de função.

          function repeat { foreach ($arg in $args) { "A entrada é 
          $arg" } }

          C:\PS>repeat um 
          A entrada é um

          C:\PS> repeat um dois três
          A entrada é um
          A entrada é dois 
          A entrada é três


      Essa função pode ser usada com qualquer número de valores. A 
      função atribui cada valor a uma posição na matriz $args.


  Parâmetros de opção
      Uma opção é um parâmetro que não necessita de um valor. Em vez 
      disso, você digita o nome da função seguido do nome do 
      parâmetro de opção.

      Para definir um parâmetro de opção, especifique o tipo [switch] 
      antes do nome do parâmetro, conforme mostrado no exemplo a seguir:

          function switchExample {
              param ([switch]$on)
              if ($on) { "Opção ativada" }
              else { "Opção desativada" }
          }


      Quando você digitar o parâmetro de opção On depois do nome da 
      função, a função exibirá "Opção ativada". Sem o parâmetro de 
      opção, ela exibirá "Opção desativada".

          C:\PS> SwitchExample -on
          Opção ativada

          C:\PS> SwitchExample
          Opção desativada

      Você também pode atribuir um valor Booleano a uma opção quando 
      executa a função, conforme mostrado no seguinte exemplo:

          C:\PS> SwitchExample -on:$true
          Opção ativada

          C:\PS> SwitchExample -on:$false
          Opção desativada


  Canalizando objetos para funções
      Qualquer função pode receber entrada do pipeline. Você pode 
      controlar como uma função processa a entrada do pipeline usando 
      as palavras-chave Begin, Process e End. A seguinte sintaxe de 
      exemplo mostra as três palavras-chave:

          function <name> { 
              begin {<lista de instruções>}
              process {<lista de instruções>}
              end {<lista de instruções>}
          }

      A lista de instruções Begin é executada somente uma vez, no 
      começo da função. 

      A lista de instruções Process é executada uma vez para cada 
      objeto no pipeline.Enquanto o bloco Process estiver sendo executado, 
      cada objeto do pipeline será atribuído à variável automática $_, 
      um objeto de pipeline de cada vez. 

      Depois que a função receber todos os objetos no pipeline, a lista de 
      instruções End será executada uma vez. Se não forem usadas 
      palavras-chave Begin, Process ou End, todas as instruções serão 
      tratadas como uma lista de instruções End.

      A função a seguir usa a palavra-chave Process. A função exibe 
      exemplos do pipeline:

          function pipelineFunction 
          { 
              process {"O valor é: $_"} 
          }


      Para demonstrar essa função, digite uma matriz de números 
      criada com vírgulas, conforme mostrado no exemplo a seguir:

          C:\PS> 1,2,4 | pipelineFunction
          O valor é: 1
          O valor é: 2
          O valor é: 4


      Quando você usar uma função em um pipeline, os objetos 
      canalizados para a função serão atribuídos à variável 
      automática $input. A função executa instruções com a 
      palavra-chave Begin antes de qualquer objeto oriundo do 
      pipeline. A função executa instruções com a palavra-chave End 
      depois de todos os objetos terem sido recebidos do pipeline.

      O exemplo a seguir mostra a variável automática $input com as 
      palavras-chave Begin e End.

          function PipelineBeginEnd 
          {
              begin {"Begin: A entrada é $input"} end {"End:  A 
              entrada é $input" } }


      Se essa função for executada com o uso do pipeline, ela exibirá 
      os seguintes resultados:

          C:\PS> 1,2,4 | PipelineBeginEnd
          Begin: A entrada é 
          End:   A entrada é 1 2 4


      Quando a instrução Begin é executada, a função não tem a 
      entrada do pipeline. A instrução End é executa depois que a 
      função recebe os valores.

      Se a função tiver uma palavra-chave Process, ela lerá os dados 
      em $input. O exemplo a seguir tem uma lista de instruções Process:

          function PipelineInput
          {
              process {"Processing: $_ " }
              end {"End:  A entrada é: $input" } 
	  } 

      Neste exemplo, cada objeto canalizado para a função é enviado à 
      lista de instruções Process. As instruções Process são 
      executadas em cada objeto, um objeto de cada vez. A variável 
      automática $input fica vazia quando a função alcança a 
      palavra-chave End.

          C:\PS> 1,2,4 | PipelineInput
          Processing: 1 
          Processing: 2 
          Processing: 4 
          End:  A entrada é:


  Filtros
      Um filtro é um tipo de função executado em cada objeto no 
      pipeline. Um filtro se assemelha a uma função com todas as suas 
      instruções em um bloco Process.

      A sintaxe de um filtro é a seguinte: 

          filter [<escopo:>]<nome> {<lista de instruções>}

      O filtro a seguir recebe entradas de log do pipeline e exibe a 
      entrada inteira ou apenas a parte da mensagem da entrada:

          filter ErrorLog ([switch]$message)
          {
              if ($message) { out-host -inputobject $_.Message } else 
              { $_ }  
          }


  Escopo da função
      Uma função existe no escopo em que foi criada. 

      Se uma função fizer parte de um script, ela estará disponível 
      para instruções dentro desse script. Por padrão, uma função em 
      um script não está disponível no prompt de comando. 

      Você pode especificar o escopo de uma função. Por exemplo, a 
      função é adicionada ao escopo global no seguinte exemplo: 

 
          function global:get-dependentsvs { get-service |
             where {$_.dependentservices} }



      Quando uma função está no escopo global, você pode usá-la em 
      scripts, em funções e na linha de comando.

      Funções normalmente criam um escopo. Os itens criados em uma 
      função, como variáveis, só existem no escopo da função.

      Para obter mais informações sobre escopo no Windows PowerShell, 
      consulte about_Scope.

        
  Localizando e gerenciado funções que usam a unidade Function: Todas 
      as funções e todos os filtros no Windows PowerShell são automaticamente 
      armazenados na unidade Function: Essa unidade é exposta pelo provedor 
      da Função do Windows PowerShell.

      Ao fazer referência à unidade Function: digite dois-pontos 
      depois de Function, seguindo o formato usado nas referências às 
      unidades C ou D de um computador.

      O comando a seguir exibe todas as funções na sessão atual do Windows 
      PowerShell.

          C:\PS>  dir function:


      Os comandos da função são armazenados como um bloco de scripts 
      na propriedade definition da função. Por exemplo, para exibir 
      os comandos na função Help do Windows PowerShell, digite:

          (dir function:help).definition

      Para obter mais informações sobre a unidade Function:, consulte 
      Function.


  Reutilizando funções em novas sessões
      Quando você digita uma função no prompt de comando do Windows 
      PowerShell, a função se torna parte da sessão atual. Ela está 
      disponível até que a sessão termine. 

      Para usar sua função em todas as sessões do Windows PowerShell, 
      adicione-a ao seu perfil do Windows PowerShell. Para obter mais 
      informações sobre perfis, consulte about_Profiles.

      Você também pode salvar sua função em um arquivo de script do 
      Windows PowerShell. Digite sua função em um arquivo de texto e 
      salve o arquivo com a extensão de nome de arquivo .ps1.


  Redigindo ajuda para funções
    O cmdlet Get-Help obtém ajuda para funções e também para cmdlets, 
    provedores e scripts. Para obter ajuda sobre uma função, digite 
    Get-Help seguido do nome da função.

    Por exemplo, para obter ajuda sobre a função MyDisks, digite:

        get-help MyDisks

    Você pode redigir ajuda para uma função usando um dos dois 
    métodos a seguir:

    --  Ajuda baseada em comentários para funções

        Crie um tópico da Ajuda usando palavras-chave especiais nos 
        comentários. Para criar ajuda baseada em comentário para uma 
        função, os comentários devem ser colocados no início ou no 
        fim do corpo da função ou nas linhas que precedem a 
        palavra-chave da função. Para obter mais informações sobre a 
        ajuda baseada em comentários, consulte about_Comment_Based_Help.

    --  Ajuda baseada em XML para funções

        Crie um tópico da Ajuda baseado em XML, como o tipo 
        normalmente criado para cmdlets. A ajuda baseada em XML será 
        necessária se você estiver localizando tópicos da Ajuda para 
        vários idiomas. 

        Para associar a função ao tópico da Ajuda baseada em XML, use 
        a palavra-chave de comentário de ajuda .ExternalHelp. Para 
        obter mais informações sobre a palavra-chave ExternalHelp, 
        consulte about_Comment_Based_Help. Para obter mais 
        informações sobre a ajuda baseada em XML, consulte "How to 
        Write Cmdlet Help" (em inglês) no MSDN.



CONSULTE TAMBÉM 
    about_Automatic_Variables 
    about_Comment_Based_Help
    about_Functions_Advanced 
    about_Functions_CmdletBindingAttribute
    about_Parameters
    about_Profiles
    about_Scopes
    about_Script_Blocks
    Function (provider)





Sumário