Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Descrição curta
Descreve como criar e usar funções no PowerShell.
Descrição longa
Uma função é uma lista de instruções do PowerShell que tem um nome que você atribui. Ao executar uma função, digite o nome da função. As instruções na lista são executadas como se você as tivesse digitado no prompt de comando.
As funções podem ser tão simples quanto:
function Get-PowerShellProcess { Get-Process PowerShell }
Uma função também pode ser tão complexa quanto um cmdlet ou um programa de aplicativo.
Assim como os cmdlets, as funções podem ter parâmetros. Os parâmetros podem ser nomeados, posicionais, comutadores ou parâmetros dinâmicos. Os parâmetros de função podem ser lidos da linha de comando ou do pipeline.
As funções podem retornar valores que podem ser exibidos, atribuídos a variáveis ou passados para outras funções ou cmdlets. Você também pode especificar um valor retornado usando a palavra-chave return. A return palavra-chave não afeta nem suprime outra saída retornada de sua função. No entanto, a palavra-chave return sai da função nessa linha. Para obter mais informações, consulte about_Return.
A lista de instruções da função pode conter diferentes tipos de listas de instruções com as palavras-chave Begin, Processe End. Essas instruções listam a entrada do identificador do pipeline de forma diferente.
Um filtro é um tipo especial de função que usa a Filter palavra-chave.
As funções também podem agir como cmdlets. Você pode criar uma função que funciona exatamente como um cmdlet sem usar C# programação. Para obter mais informações, consulte about_Functions_Advanced.
Sintaxe
Veja a seguir a sintaxe de uma função:
function [<scope:>]<name> [([type]$parameter1[,[type]$parameter2])]
{
param([type]$parameter1 [,[type]$parameter2])
dynamicparam {<statement list>}
begin {<statement list>}
process {<statement list>}
end {<statement list>}
}
Uma função inclui os seguintes itens:
- Uma palavra-chave
Function - Um escopo (opcional)
- Um nome selecionado
- Qualquer número de parâmetros nomeados (opcional)
- Um ou mais comandos do 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
As funções não precisam ser complicadas para serem úteis. As funções mais simples têm o seguinte formato:
function <function-name> {statements}
Por exemplo, a função a seguir inicia o PowerShell com a opção Executar como Administrador.
function Start-PSAdmin {Start-Process PowerShell -Verb RunAs}
Para usar a função, digite: Start-PSAdmin
Para adicionar instruções à função, digite cada instrução em uma linha separada ou use um ponto-e-vírgula ; para separar as instruções.
Por exemplo, a função a seguir localiza todos os arquivos .jpg nos diretórios do usuário atual que foram alterados após a data de início.
function Get-NewPix
{
$start = Get-Date -Month 1 -Day 1 -Year 2010
$allpix = Get-ChildItem -Path $env:UserProfile\*.jpg -Recurse
$allpix | Where-Object {$_.LastWriteTime -gt $Start}
}
Você pode criar uma caixa de ferramentas de funções pequenas úteis. Adicione essas funções ao seu perfil do PowerShell, conforme descrito em about_Profiles e posterior neste tópico.
Nomes de função
Você pode atribuir qualquer nome a uma função, mas as funções que você compartilha com outras pessoas devem seguir as regras de nomenclatura que foram estabelecidas para todos os comandos do PowerShell.
Os nomes de funções devem consistir em um par verbo-substantivo no qual o verbo identifica a ação que a função executa e o substantivo identifica o item no qual o cmdlet executa sua ação.
As funções devem usar os verbos padrão que foram aprovados para todos os comandos do PowerShell. Esses verbos nos ajudam a manter nossos nomes de comando simples, consistentes e fáceis de entender para os usuários.
Para obter mais informações sobre os verbos padrão do PowerShell, consulte Verbos aprovados no Microsoft Docs.
Funções com parâmetros
Você pode usar parâmetros com funções, incluindo parâmetros nomeados, parâmetros posicionais, parâmetros de comutador e parâmetros dinâmicos. Para obter mais informações sobre parâmetros dinâmicos em funções, consulte about_Functions_Advanced_Parameters.
Parâmetros nomeados
Você pode definir qualquer número de parâmetros nomeados. Você pode incluir um valor padrão para parâmetros nomeados, conforme descrito posteriormente neste tópico.
Você pode definir parâmetros dentro das chaves usando a palavra-chave Param , conforme mostrado na sintaxe de exemplo a seguir:
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 sintaxe de exemplo a seguir:
function <name> [([type]$parameter1[,[type]$parameter2])] {
<statement list>
}
Veja abaixo um exemplo dessa sintaxe alternativa.
Function Add-Numbers($one, $two) {
$one + $two
}
Embora o primeiro método seja preferencial, não há diferença entre esses dois métodos.
Quando você executa a função, o valor fornecido para um parâmetro é 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 é uma função chamada Get-SmallFiles. Essa função tem um parâmetro $size. A função exibe todos os arquivos menores que o valor do parâmetro $size e exclui diretórios:
function Get-SmallFiles {
Param($Size)
Get-ChildItem $HOME | Where-Object {
$_.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:
Get-SmallFiles -Size 50
Você também pode inserir um valor para um parâmetro nomeado sem o nome do parâmetro. Por exemplo, o comando a seguir fornece o mesmo resultado de um comando que nomeia o parâmetro tamanho:
Get-SmallFiles 50
Para definir um valor padrão para um parâmetro, digite um sinal de igual e o valor após o nome do parâmetro, conforme mostrado na seguinte variação do exemplo de Get-SmallFiles:
function Get-SmallFiles ($Size = 100) {
Get-ChildItem $HOME | Where-Object {
$_.Length -lt $Size -and !$_.PSIsContainer
}
}
Se você digitar Get-SmallFiles sem um valor, a função atribuirá 100 a $size. Se você fornecer um valor, a função usará esse valor.
Opcionalmente, você pode fornecer uma breve cadeia de caracteres de ajuda que descreve o valor padrão do parâmetro, adicionando o atributo PSDefaultValue à descrição do parâmetro e especificando a propriedade Help de PSDefaultValue. Para fornecer uma cadeia de caracteres de ajuda que descreve o valor padrão (100) do parâmetro Size na função Get-SmallFiles, adicione o atributo PSDefaultValue, conforme mostrado no exemplo a seguir.
function Get-SmallFiles {
param (
[PSDefaultValue(Help = '100')]
$size = 100
)
}
Para obter mais informações sobre a classe de atributo PSDefaultValue, consulte membros do atributo PSDefaultValue.
Parâmetros posicionais
Um parâmetro posicional é um parâmetro sem um nome de parâmetro. O PowerShell usa a ordem de 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 após o nome da função. Os valores de parâmetro posicional são atribuídos à variável de matriz $args.
O valor que segue o nome da função é atribuído à primeira posição na matriz $args, $args[0].
A função a seguir Get-Extension adiciona a extensão de nome de .txt arquivo a um nome de arquivo fornecido:
function Get-Extension {
$name = $args[0] + ".txt"
$name
}
Get-Extension myTextFile
myTextFile.txt
Parâmetros do switch
Um switch é um parâmetro que não requer um valor. Em vez disso, digite o nome da função seguido pelo nome do parâmetro switch.
Para definir um parâmetro de comutador, especifique o tipo [switch] antes do nome do parâmetro, conforme mostrado no exemplo a seguir:
function Switch-Item {
param ([switch]$on)
if ($on) { "Switch on" }
else { "Switch off" }
}
Quando você digita o On parâmetro switch após o nome da função, a função exibe "Ligar". Sem o parâmetro switch, ele exibe "Desligar".
Switch-Item -on
Switch on
Switch-Item
Switch off
Você também pode atribuir um valor de booliano a um comutador ao executar a função, conforme mostrado no exemplo a seguir:
Switch-Item -on:$true
Switch on
Switch-Item -on:$false
Switch off
Usando o Splatting para representar parâmetros de comando
Você pode usar o fracionamento para representar os parâmetros de um comando. Esse recurso é introduzido no Windows PowerShell 3.0.
Use essa técnica em funções que chamam comandos na sessão. Você não precisa declarar ou enumerar os parâmetros de comando ou alterar a função quando os parâmetros de comando forem alterados.
A função de exemplo a seguir chama o cmdlet Get-Command. O comando usa @Args para representar os parâmetros de Get-Command.
function Get-MyCommand { Get-Command @Args }
Você pode usar todos os parâmetros de Get-Command quando chamar a Get-MyCommand função. Os parâmetros e os valores de parâmetro são passados para o comando usando @Args.
Get-MyCommand -Name Get-ChildItem
CommandType Name ModuleName
----------- ---- ----------
Cmdlet Get-ChildItem Microsoft.PowerShell.Management
O recurso @Args usa o parâmetro automático $Args, que representa parâmetros e valores de cmdlet não declarados dos argumentos restantes.
Para obter mais informações sobre respingos, consulte about_Splatting.
Objetos de tubulação para funções
Qualquer função pode receber entrada do pipeline. Você pode controlar como uma função processa a entrada do pipeline usando Beginpalavras-chave , Processe End . A sintaxe de exemplo a seguir mostra as três palavras-chave:
function <name> {
begin {<statement list>}
process {<statement list>}
end {<statement list>}
}
A Begin lista de instruções é executada apenas uma vez, no início da função.
Importante
Se sua função definir um Beginbloco ou Process , End todo o seu código deverá residir dentro de um dos blocos.
A lista de instruções Process é executada uma vez para cada objeto no pipeline.
Enquanto o bloco Process está em execução, cada objeto de pipeline é atribuído à variável automática $_, um objeto de pipeline por vez.
Depois que a função recebe todos os objetos no pipeline, a lista de instruções é executada End uma vez. Se nenhuma Beginpalavra-chave , Process, ou End for usada, todas as instruções serão tratadas como uma lista de End instruções.
A função a seguir usa a palavra-chave Process. A função exibe exemplos do pipeline:
function Get-Pipeline
{
process {"The value is: $_"}
}
Para demonstrar essa função, insira uma lista de números separados por vírgulas, conforme mostrado no exemplo a seguir:
1,2,4 | Get-Pipeline
The value is: 1
The value is: 2
The value is: 4
Quando você usa uma função em um pipeline, os objetos canalizados para a função são atribuídos à variável automática $input. A função executa instruções com a palavra-chave Begin antes que os objetos venham do pipeline. A função executa instruções com a palavra-chave End após todos os objetos terem sido recebidos do pipeline.
O exemplo a seguir mostra a variável automática $input com palavras-chave Begin e End.
function Get-PipelineBeginEnd
{
begin {"Begin: The input is $input"}
end {"End: The input is $input" }
}
Se essa função for executada usando o pipeline, ela exibirá os seguintes resultados:
1,2,4 | Get-PipelineBeginEnd
Begin: The input is
End: The input is 1 2 4
Quando a Begin instrução é executada, a função não tem a entrada do pipeline. A instrução End é executada depois que a função tem os valores.
Se a função tiver uma palavra-chave Process, cada objeto em $input será removido do $input e atribuído a $_. O exemplo a seguir tem uma lista de instruções Process:
function Get-PipelineInput
{
process {"Processing: $_ " }
end {"End: The input is: $input" }
}
Neste exemplo, cada objeto que é canalizado para a função é enviado para a lista de Process instruções. As instruções Process são executadas em cada objeto, um objeto por vez. A variável automática $input fica vazia quando a função atinge a palavra-chave End.
1,2,4 | Get-PipelineInput
Processing: 1
Processing: 2
Processing: 4
End: The input is:
Para obter mais informações, consulte Usando enumeradores
Filtros
Um filtro é um tipo de função que é executada 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 [<scope:>]<name> {<statement list>}
O filtro a seguir usa entradas de log do pipeline e, em seguida, exibe toda a entrada ou apenas a parte da mensagem da entrada:
filter Get-ErrorLog ([switch]$message)
{
if ($message) { Out-Host -InputObject $_.Message }
else { $_ }
}
Escopo da função
Existe uma função no escopo em que foi criada.
Se uma função fizer parte de um script, a função 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 exemplo a seguir:
function global:Get-DependentSvs {
Get-Service | Where-Object {$_.DependentServices}
}
Quando uma função está no escopo global, você pode usar a função em scripts, em funções e na linha de comando.
As funções normalmente criam um escopo. Os itens criados em uma função, como variáveis, existem apenas no escopo da função.
Para obter mais informações sobre o escopo no PowerShell, consulte about_Scopes.
Localizando e gerenciando funções usando a função: Unidade
Todas as funções e filtros no PowerShell são armazenados automaticamente na unidade Function:. Essa unidade é exposta pelo provedor de de funções do PowerShell.
Ao se referir à unidade de Function:, digite dois-pontos após Function, exatamente como faria ao referenciar a unidade C ou D de um computador.
O comando a seguir exibe todas as funções na sessão atual do PowerShell:
Get-ChildItem function:
Os comandos na função são armazenados como um bloco de script na propriedade de definição da função. Por exemplo, para exibir os comandos na função de Ajuda que vem com o PowerShell, digite:
(Get-ChildItem function:help).Definition
Você também pode usar a sintaxe a seguir.
$function:help
Para obter mais informações sobre a unidade de Function:, consulte o tópico de ajuda do provedor de de funções do. Digite Get-Help Function.
Reutilizando funções em novas sessões
Quando você digita uma função no prompt de comando do PowerShell, a função se torna parte da sessão atual. Ele está disponível até o término da sessão.
Para usar sua função em todas as sessões do PowerShell, adicione a função ao seu perfil do 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 PowerShell. Digite sua função em um arquivo de texto e salve o arquivo com a extensão de nome de .ps1 arquivo.
Escrevendo ajuda para funções
O cmdlet Get-Help obtém ajuda para funções, bem como para cmdlets, provedores e scripts. Para obter ajuda para uma função, digite Get-Help seguido pelo nome da função.
Por exemplo, para obter ajuda para a função Get-MyDisks, digite:
Get-Help Get-MyDisks
Você pode escrever ajuda para uma função usando um dos dois métodos a seguir:
Ajuda Comment-Based para funções
Crie um tópico de ajuda usando palavras-chave especiais nos comentários. Para criar ajuda baseada em comentários para uma função, os comentários devem ser colocados no início ou no final do corpo da função ou nas linhas anteriores à palavra-chave da função. Para obter mais informações sobre ajuda baseada em comentários, consulte about_Comment_Based_Help.
Ajuda XML-Based para funções
Crie um tópico de ajuda baseado em XML, como o tipo que normalmente é criado para cmdlets. A ajuda baseada em XML será necessária se você estiver localizando tópicos de ajuda em vários idiomas.
Para associar a função ao tópico de ajuda baseado em XML, use a palavra-chave de ajuda baseada em comentários
.ExternalHelp. Sem essa palavra-chave,Get-Helpnão é possível localizar o tópico de ajuda da função e as chamadas paraGet-Helppara a função retornam apenas ajuda gerada automaticamente.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 Como escrever a ajuda do cmdlet na biblioteca MSDN.
VEJA TAMBÉM
about_Ajuda_Baseada_em_Comentário
about_Functions_Advanced_Methods
about_Functions_Advanced_Parameters
about_Functions_CmdletBindingAttribute