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.
O PowerShell é um shell de linha de comando e uma linguagem de script usada para automação. Semelhante a outros shells, como bash
no Linux ou no Shell de Comando do Windows (cmd.exe
), o PowerShell permite que você execute qualquer comando disponível em seu sistema, não apenas comandos do PowerShell.
Tipos de comandos
Para qualquer shell em qualquer sistema operacional, há três tipos de comandos:
As palavras-chave da linguagem do shell fazem parte da linguagem de script do shell.
- Exemplos de palavras-chave
bash
incluem:if
,then
,else
,elif
efi
. - Exemplos de palavras-chave
cmd.exe
incluem:dir
,copy
,move
,if
eecho
. - Exemplos de palavras-chave do PowerShell incluem:
for
,foreach
,try
,catch
etrap
.
Palavras-chave de linguagem shell só podem ser usadas no ambiente de runtime do shell. Não há nenhum arquivo executável, externo ao shell, que forneça a funcionalidade da palavra-chave.
- Exemplos de palavras-chave
comandos nativos do sistema operacional são arquivos executáveis instalados no sistema operacional. Os executáveis podem ser executados em qualquer shell de linha de comando, como o PowerShell. Isso inclui arquivos de script que podem exigir que outros shells funcionem corretamente. Por exemplo, se você executar um script em lote do Windows (arquivo
.cmd
) no PowerShell, o PowerShell executarácmd.exe
e passará o arquivo em lote para execução.comandos específicos do ambiente do Shell são comandos definidos em arquivos externos que só podem ser usados no ambiente de runtime do shell. Elas incluem scripts e funções ou podem ser módulos compilados especialmente que adicionam comandos ao runtime do shell. No PowerShell, esses comandos são conhecidos como cmdlets (pronuncia-se "command-lets").
Executando comandos nativos
Qualquer comando nativo pode ser executado na linha de comando do PowerShell. Normalmente, você executa o comando exatamente como faria em bash
ou cmd.exe
. O exemplo a seguir mostra a execução do comando grep
em bash
no Ubuntu Linux.
sdwheeler@circumflex:~$ grep sdwheeler /etc/passwd
sdwheeler:x:1000:1000:,,,:/home/sdwheeler:/bin/bash
sdwheeler@circumflex:~$ pwsh
PowerShell 7.2.6
Copyright (c) Microsoft Corporation.
https://aka.ms/powershell
Type 'help' to get help.
Depois de iniciar o PowerShell no Ubuntu, você pode executar o mesmo comando na linha de comando do PowerShell:
PS /home/sdwheeler> grep sdwheeler /etc/passwd
sdwheeler:x:1000:1000:,,,:/home/sdwheeler:/bin/bash
Como passar argumentos para comandos nativos
A maioria dos shells inclui recursos para usar variáveis, avaliar expressões e manipular cadeias de caracteres. Mas cada concha faz essas coisas de forma diferente. No PowerShell, todos os parâmetros começam com um caractere hifen (-
). Em cmd.exe
, a maioria dos parâmetros usa um caractere de barra (/
). Outras ferramentas de linha de comando podem não ter um caractere especial para parâmetros.
Cada shell tem sua própria maneira de manipular e avaliar cadeias de caracteres na linha de comando. Ao executar comandos nativos no PowerShell que esperam que as cadeias de caracteres sejam citadas de uma maneira específica, talvez seja necessário ajustar a forma como você passa essas cadeias de caracteres.
Para obter mais informações, consulte os seguintes artigos:
O PowerShell 7.2 introduziu um novo recurso experimental PSNativeCommandArgumentPassing
que aprimorou o tratamento de comandos nativos. Para obter mais informações, consulte $PSNativeCommandArgumentPassing
.
Manipulação de saída e erros
O PowerShell também tem vários fluxos de saída a mais do que outros shells. Os shells do bash
e do cmd.exe
têm o stdout e o stderr. O PowerShell tem seis fluxos de saída. Para mais informações, consulte sobre Redirecionamento e sobre Fluxos_de_Saída.
Em geral, a saída enviada para stdout por um comando nativo é enviada para o fluxo de Êxito no PowerShell. A saída enviada ao stderr por um comando nativo é enviada para o fluxo de Erro no PowerShell.
Quando um comando nativo tem um código de saída diferente de zero, $?
é definido como $false
. Se o código de saída for zero, $?
será definido como $true
.
No entanto, isso foi alterado no PowerShell 7.2. Os registros de erro redirecionados de comandos nativos, como ao usar operadores de redirecionamento (2>&1
), não são gravados na variável $Error
do PowerShell e a variável de preferência $ErrorActionPreference
não afeta a saída redirecionada.
Muitos comandos nativos gravam em stderr como um fluxo alternativo para obter informações adicionais. Esse comportamento pode causar confusão no PowerShell ao examinar erros e as informações de saída adicionais poderão ser perdidas se $ErrorActionPreference
estiver definido como um estado que silencie a saída.
O PowerShell 7.3 adicionou um novo recurso experimental PSNativeCommandErrorActionPreference
que permite controlar se a saída para stderr
é tratada como um erro. Para obter mais informações, consulte $PSNativeCommandUseErrorActionPreference
.
Executando comandos do PowerShell
Como observado anteriormente, os comandos do PowerShell são conhecidos como cmdlets. Os cmdlets são coletados em módulos do PowerShell que podem ser carregados sob demanda. Os cmdlets podem ser escritos em qualquer linguagem .NET compilada ou usando a própria linguagem de script do PowerShell.
Comandos do PowerShell que executam outros comandos
O operador de chamada do PowerShell (&
) permite executar comandos armazenados em variáveis e representados por cadeias de caracteres ou blocos de script. Você pode usá-lo para executar qualquer comando nativo ou comando do PowerShell. Isso é útil em um script quando você precisa construir dinamicamente os parâmetros de linha de comando para um comando nativo. Para obter mais informações, consulte o operador de chamada .
O cmdlet Start-Process
pode ser usado para executar comandos nativos, mas só deve ser usado quando você precisar controlar como o comando é executado. O cmdlet tem parâmetros para dar suporte aos seguintes cenários:
- Executar um comando usando credenciais diferentes
- Ocultar a janela do console criada pelo novo processo
- Redirecionamento de fluxos stdin, stdout e stderr
- Usar um diretório de trabalho diferente para o comando
O exemplo a seguir executa o comando nativo sort.exe
com fluxos de entrada e saída redirecionados.
$processOptions = @{
FilePath = "sort.exe"
RedirectStandardInput = "TestSort.txt"
RedirectStandardOutput = "Sorted.txt"
RedirectStandardError = "SortError.txt"
UseNewEnvironment = $true
}
Start-Process @processOptions
Para saber mais, confira Start-Process.
No Windows, o cmdlet Invoke-Item
executa a ação padrão para o item especificado. Por exemplo, ele executa um arquivo executável ou abre um arquivo de documento usando o aplicativo associado ao tipo de arquivo de documento. A ação padrão depende do tipo de item e é resolvida pelo provedor do PowerShell que fornece acesso ao item.
O exemplo a seguir abre o repositório de código-fonte do PowerShell no navegador da Web padrão.
Invoke-Item https://github.com/PowerShell/PowerShell
Para obter mais informações, consulte Invoke-Item.