O que é o PowerShell?What is PowerShell?

O PowerShell é uma estrutura multiplataforma de gerenciamento de configuração e de automação de tarefas, que consiste em um shell de linha de comando e em uma linguagem de script.PowerShell is a cross-platform task automation and configuration management framework, consisting of a command-line shell and scripting language. Ao contrário da maioria dos shells, que aceitam e retornam texto, o PowerShell é criado com base no CLR (Common Language Runtime) do .NET e aceita e retorna objetos .NET.Unlike most shells, which accept and return text, PowerShell is built on top of the .NET Common Language Runtime (CLR), and accepts and returns .NET objects. Essa mudança fundamental traz ferramentas e métodos totalmente novos para a automação.This fundamental change brings entirely new tools and methods for automation.

A saída é baseada em objetoOutput is object-based

Ao contrário de interfaces de linha de comando tradicionais, os cmdlets do PowerShell são projetados para lidar com objetos.Unlike traditional command-line interfaces, PowerShell cmdlets are designed to deal with objects. Um objeto representa informações estruturadas que vão além da uma cadeia de caracteres exibida na tela.An object is structured information that is more than just the string of characters appearing on the screen. A saída do comando sempre acompanha informações extras que poderão ser usadas quando necessário.Command output always carries extra information that you can use if you need it.

Se você já usou ferramentas de processamento de texto para processar dados, perceberá que elas se comportam de maneira diferente quando usadas no PowerShell.If you've used text-processing tools to process data in the past, you'll find that they behave differently when used in PowerShell. Na maioria dos casos, você não precisa de ferramentas de processamento de texto para extrair informações específicas.In most cases, you don't need text-processing tools to extract specific information. Você acessa diretamente partes dos dados usando a sintaxe de objeto padrão do PowerShell.You directly access portions of the data using standard PowerShell object syntax.

A família de comandos é extensívelThe command family is extensible

Interfaces como a do cmd.exe não fornecem uma forma de estender diretamente o conjunto de comandos internos.Interfaces such as cmd.exe don't provide a way for you to directly extend the built-in command set. Você pode criar ferramentas de linha de comando externas que são executadas no cmd.exe.You can create external command-line tools that run in cmd.exe. Mas essas ferramentas externas não têm serviços, como a integração com a Ajuda.But these external tools don't have services, such as Help integration. O cmd.exe não sabe automaticamente que essas ferramentas externas são comandos válidos.cmd.exe doesn't automatically know that these external tools are valid commands.

Os comandos no PowerShell são conhecidos como cmdlets .The commands in PowerShell are known as cmdlets . Você pode usar cada cmdlet separadamente, mas o potencial deles é atingido quando você os combina para executar tarefas complexas.You can use each cmdlet separately, but their power is realized when you combine them to perform complex tasks. Como muitos shells, o PowerShell fornece acesso ao sistema de arquivos no computador.Like many shells, PowerShell gives you access to the file system on the computer. Os provedores do PowerShell permitem que você acesse outros armazenamentos de dados, como o Registro e os repositórios de certificados, com tanta facilidade quanto o sistema de arquivos.PowerShell providers enable you to access other data stores, such as the registry and the certificate stores, as easily as you access the file system.

Você pode criar módulos de cmdlet e de função usando código compilado ou scripts.You can create your own cmdlet and function modules using compiled code or scripts. Os módulos podem adicionar cmdlets e provedores ao shell.Modules can add cmdlets and providers to the shell. O PowerShell também dá suporte a scripts que são análogos aos scripts de shell do UNIX e aos arquivos em lotes do cmd.exe.PowerShell also supports scripts that are analogous to UNIX shell scripts and cmd.exe batch files.

Suporte para aliases de comandoSupport for command aliases

O PowerShell dá suporte a aliases para se referir aos comandos por nomes alternativos.PowerShell supports aliases to refer to commands by alternate names. Usar alias permite que usuários com experiência em outros shells utilizem nomes de comando comuns que já conhecem para operações semelhantes no PowerShell.Aliasing allows users with experience in other shells to use common command names that they already know for similar operations in PowerShell.

O alias associa um novo nome a outro comando.Aliasing associates a new name with another command. Por exemplo, o PowerShell tem uma função interna denominada Clear-Host que limpa a janela de saída.For example, PowerShell has an internal function named Clear-Host that clears the output window. Você pode digitar o alias cls ou clear em um prompt de comando.You can type either the cls or clear alias at a command prompt. O PowerShell interpreta esses aliases e executa a função Clear-Host.PowerShell interprets these aliases and runs the Clear-Host function.

Esse recurso ajuda os usuários a aprender sobre o PowerShell.This feature helps users to learn PowerShell. Primeiro, a maioria dos usuários do cmd.exe e do UNIX tem um grande repertório de comandos conhecidos por nome.First, most cmd.exe and Unix users have a large repertoire of commands that users already know by name. Talvez os equivalentes do PowerShell não produzam resultados idênticos.The PowerShell equivalents may not produce identical results. No entanto, os resultados são bem parecidos, e os usuários podem fazer o trabalho sem conhecer o nome de comando do PowerShell.However, the results are close enough that users can do work without knowing the PowerShell command name. A "memória muscular" é outra grande fonte de frustração ao aprender um novo shell de comando."Muscle memory" is another major source of frustration when learning a new command shell. Caso você use o cmd.exe há anos, é possível que você digite inconscientemente o comando cls para limpar a tela.If you have used cmd.exe for years, you might reflexively type the cls command to clear the screen. Sem o alias para Clear-Host, você receberá uma mensagem de erro e não saberá o que fazer para limpar a saída.Without the alias for Clear-Host, you receive an error message and won't know what to do to clear the output.

O PowerShell manipula a exibição e a entrada do consolePowerShell handles console input and display

Quando você digita um comando, o PowerShell sempre processa a linha de comando de entrada diretamente.When you type a command, PowerShell always processes the command-line input directly. O PowerShell também formata a saída exibida na tela.PowerShell also formats the output that you see on the screen. Essa diferença é considerável porque reduz o trabalho necessário em cada cmdlet.This difference is significant because it reduces the work required of each cmdlet. Isso garante que você possa fazer as coisas sempre da mesma maneira com qualquer cmdlet.It ensures that you can always do things the same way with any cmdlet. Os desenvolvedores de cmdlet não precisam escrever códigos para analisar os argumentos de linha de comando ou formatar a saída.Cmdlet developers don't need to write code to parse the command-line arguments or format the output.

Ferramentas de linha de comando tradicionais têm seus próprios esquemas para solicitar e exibir a Ajuda.Traditional command-line tools have their own schemes for requesting and displaying Help. Algumas ferramentas de linha de comando usam /? para disparar a exibição da Ajuda; outras usam -?, /H ou até mesmo //.Some command-line tools use /? to trigger the Help display; others use -?, /H, or even //. Algumas delas exibem a Ajuda em uma janela GUI em vez de na exibição do console.Some will display Help in a GUI window, rather than in the console display. Se você usar o parâmetro errado, a ferramenta poderá ignorar o que você digitou e começar a executar uma tarefa automaticamente.If you use the wrong parameter, the tool might ignore what you typed and begin executing a task automatically. Como o PowerShell analisa e processa a linha de comando automaticamente, o parâmetro -? sempre significa "mostre-me a Ajuda para este comando".Since PowerShell automatically parses and processes the command line, the -? parameter always means "show me Help for this command".

Observação

Se você executar um aplicativo gráfico no PowerShell, a janela do aplicativo se abrirá.If you run a graphic application in PowerShell, the window for the application opens. O PowerShell intervém apenas no processamento da entrada da linha de comando que você fornece ou quando a saída do aplicativo retorna para a janela do console.PowerShell intervenes only when processing the command-line input you supply or the application output returned to the console window. Ele não afeta a maneira como o aplicativo funciona internamente.It does not affect how the application works internally.

O PowerShell tem um pipelinePowerShell has a pipeline

Pipelines são possivelmente o conceito mais valioso usado nas interfaces de linha de comando.Pipelines are arguably the most valuable concept used in command-line interfaces. Quando usados adequadamente, os pipelines facilitam o uso de comandos complexos e a visualização do fluxo de trabalho.When used properly, pipelines reduce the effort of using complex commands and make it easier to see the flow of work. Cada comando em um pipeline passa sua saída, item por item, para o próximo comando.Each command in a pipeline passes its output, item by item, to the next command. Os comandos não precisam lidar com mais de um item por vez.Commands don't have to handle more than one item at a time. O resultado são o consumo reduzido de recursos e a capacidade de obter uma saída imediatamente.The result is reduced resource consumption and the ability to get output immediately.

A notação usada para pipelines é semelhante à notação usada em outros shells.The notation used for pipelines is similar to the notation used in other shells. À primeira vista, talvez seja aparente como os pipelines são diferentes no PowerShell.At first glance, it may not be apparent how pipelines are different in PowerShell. Embora você veja o texto na tela, o PowerShell redireciona objetos, e não o texto, entre comandos.Although you see text on the screen, PowerShell pipes objects, not text, between commands.

Por exemplo, se você usar o cmdlet Out-Host para forçar uma exibição de página a página da saída de outro comando, a saída parecerá ser apenas o texto normal exibido na tela, dividida em páginas:For example, if you use the Out-Host cmdlet to force a page-by-page display of output from another command, the output looks just like the normal text displayed on the screen, broken up into pages:

Get-ChildItem | Out-Host -Paging
    Directory: /mnt/c/Git/PS-Docs/PowerShell-Docs/reference/7.0/Microsoft.PowerShell.Core

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
d----          05/22/2020    08:30                About
-----          05/20/2020    14:36           9044 Add-History.md
-----          05/20/2020    14:36          12227 Clear-History.md
-----          05/20/2020    14:36           3566 Clear-Host.md
-----          05/20/2020    14:36          29087 Connect-PSSession.md
-----          05/20/2020    14:36           5705 Debug-Job.md
-----          05/20/2020    14:36           3515 Disable-ExperimentalFeature.md
-----          05/20/2020    14:36          25531 Disable-PSRemoting.md
-----          05/20/2020    14:36           7852 Disable-PSSessionConfiguration.md
-----          05/20/2020    14:36          25355 Disconnect-PSSession.md
-----          05/20/2020    14:36           3491 Enable-ExperimentalFeature.md
-----          05/20/2020    14:36          13310 Enable-PSRemoting.md
-----          05/20/2020    14:36           8401 Enable-PSSessionConfiguration.md
-----          05/20/2020    14:36           9531 Enter-PSHostProcess.md
...
<SPACE> next page; <CR> next line; Q quit

A paginação também reduz a utilização da CPU, pois o processamento muda para o cmdlet Out-Host quando há uma página completa pronta para exibição.Paging also reduces CPU utilization because processing transfers to the Out-Host cmdlet when it has a complete page ready to display. Os cmdlets que a precedem no pipeline pausam a execução até que a próxima página de saída esteja disponível.The cmdlets that precede it in the pipeline pause execution until the next page of output is available.

Objetos no pipelineObjects in the pipeline

Quando você executa um cmdlet no PowerShell, vê a saída de texto porque é necessário representar objetos como texto em uma janela de console.When you run a cmdlet in PowerShell, you see text output because it is necessary to represent objects as text in a console window. A saída de texto não pode exibir todas as propriedades do objeto mostrado.The text output may not display all of the properties of the object being output.

Por exemplo, considere o cmdlet Get-Location.For example, consider the Get-Location cmdlet. A saída de texto é um resumo das informações, não uma representação completa do objeto retornado por Get-Location.The text output is a summary of information, not a complete representation of the object returned by Get-Location. O título na saída é adicionado pelo processo que formata os dados para exibição na tela.The heading in the output is added by the process that formats the data for onscreen display.

Get-Location
Path
----
C:\

O redirecionamento da saída para o cmdlet Get-Member exibe informações sobre o objeto retornado por Get-Location.Piping the output to the Get-Member cmdlet displays information about the object returned by Get-Location.

Get-Location | Get-Member
   TypeName: System.Management.Automation.PathInfo

Name         MemberType Definition
----         ---------- ----------
Equals       Method     bool Equals(System.Object obj)
GetHashCode  Method     int GetHashCode()
GetType      Method     type GetType()
ToString     Method     string ToString()
Drive        Property   System.Management.Automation.PSDriveInfo Drive {get;}
Path         Property   string Path {get;}
Provider     Property   System.Management.Automation.ProviderInfo Provider {get;}
ProviderPath Property   string ProviderPath {get;}

Get-Location retorna um objeto PathInfo que contém o caminho atual e outras informações.Get-Location returns a PathInfo object that contains the current path and other information.

Sistema de ajuda internoBuilt-in help system

Semelhante às páginas man do UNIX, o PowerShell inclui artigos de ajuda detalhados que explicam os conceitos e a sintaxe de comando do PowerShell.Similar to Unix man pages, PowerShell includes detailed help articles that explain PowerShell concepts and command syntax. Use o cmdlet Get-Help para exibir esses artigos no prompt de comando ou confira as versões mais atualizadas deles na documentação online do PowerShell.Use the Get-Help cmdlet to display these articles at the command prompt or view the most recently updated versions of these articles in the PowerShell documentation online.

Próximas etapasNext steps

Para saber mais sobre o PowerShell, confira a seção Aprendendo a usar o PowerShell deste site.To learn more about PowerShell, see the Learning PowerShell section of this site.