Nesta aula, vamos mergulhar no ambiente onde o PowerShell opera. Você conhecerá as diferentes interfaces disponíveis — o console tradicional, o ISE (Integrated Scripting Environment) e o VSCode (Visual Studio Code) — e entenderá como cada uma se encaixa em diferentes cenários de uso. Além disso, exploraremos o prompt do PowerShell, a execução de comandos e o conceito de sessões, que são fundamentais para dominar a automação e a administração de sistemas.

O PowerShell não é apenas uma linguagem de script; é um shell interativo que oferece um ambiente rico para administradores e desenvolvedores. Saber navegar por esse ambiente é o primeiro passo para se tornar produtivo. Vamos começar!

Console vs ISE vs VSCode

O PowerShell pode ser executado em diferentes aplicativos host. Cada um oferece vantagens específicas dependendo da tarefa.

Console do PowerShell (powershell.exe / pwsh.exe): É a interface tradicional de linha de comando, leve e rápida. Ideal para comandos rápidos, scripts simples e administração remota via SSH. Não possui realce de sintaxe ou depuração integrada, mas é a base para qualquer interação com o PowerShell. Exemplo de inicialização:

powershell.exe -NoProfile -Command "Get-Service"

ISE (Integrated Scripting Environment): Incluído no Windows até a versão 5.1, oferece uma interface gráfica com editor de scripts, painel de console, realce de sintaxe e depuração básica. É útil para aprendizado e scripts simples, mas está em desuso e não recebe mais atualizações. Para abrir: powershell_ise.exe.

VSCode com extensão PowerShell: Atualmente é a ferramenta recomendada. Oferece editor avançado, IntelliSense, depuração completa, integração com Git, terminal integrado e suporte a múltiplos perfis. A extensão PowerShell da Microsoft proporciona uma experiência moderna e rica. Exemplo de configuração no settings.json:

"powershell.powerShellAdditionalExePaths": [
    {
        "exePath": "C:\\Program Files\\PowerShell\\7\\pwsh.exe",
        "versionName": "PowerShell 7"
    }
]

Escolha o console para tarefas rápidas, o ISE apenas se necessário em sistemas legados, e o VSCode para desenvolvimento sério de scripts e módulos.

O prompt

O prompt do PowerShell é a interface onde você digita comandos. Por padrão, ele mostra o caminho atual do diretório e o símbolo >. Exemplo:

PS C:\Users\SeuNome>

Você pode personalizar o prompt definindo uma função chamada prompt. A função deve retornar uma string. Exemplo simples:

function prompt { "PS $($executionContext.SessionState.Path.CurrentLocation)> " }

Para incluir informações úteis como data/hora ou nome do usuário:

function prompt {
    $date = Get-Date -Format "HH:mm:ss"
    "[$date] PS $($executionContext.SessionState.Path.CurrentLocation)> "
}

Depois de definir a função, o prompt será atualizado automaticamente. Você pode colocar essa função no seu perfil do PowerShell ($PROFILE) para que seja carregada sempre.

Executando comandos

No PowerShell, comandos podem ser executados diretamente no prompt ou em scripts. Existem vários tipos de comandos: cmdlets, funções, aliases, scripts e programas externos.

Cmdlets: São comandos nativos do PowerShell, no formato Verbo-Substantivo, como Get-Process, Set-Location. Exemplo:

Get-Service -Name *sql*

Aliases: São nomes curtos para cmdlets ou comandos. Por exemplo, dir é um alias para Get-ChildItem, cd para Set-Location. Você pode criar seus próprios aliases com Set-Alias:

Set-Alias -Name gs -Value Get-Service

Execução de scripts: Scripts são arquivos com extensão .ps1. Para executar, use o caminho relativo ou absoluto:

.\meuscript.ps1

Se a política de execução bloquear, você pode alterá-la (com cuidado):

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser

Comandos externos: Programas como ipconfig, ping ou notepad.exe funcionam normalmente. O PowerShell os trata como comandos nativos.

Sessões

Uma sessão do PowerShell (PSSession) é um ambiente de execução que pode ser local ou remoto. Sessões permitem executar comandos em máquinas remotas de forma persistente.

Criando uma sessão remota:

$session = New-PSSession -ComputerName Servidor01 -Credential (Get-Credential)

Executando comandos na sessão:

Invoke-Command -Session $session -ScriptBlock { Get-Process }

Gerenciando sessões: Você pode listar, remover e reutilizar sessões. Sessões são úteis para tarefas que exigem múltiplos comandos no mesmo contexto remoto.

Get-PSSession
Remove-PSSession -Session $session

Sessão implícita (implicit remoting): Permite importar comandos de uma sessão remota para o seu computador local, como se fossem cmdlets locais:

Import-PSSession -Session $session -Module ActiveDirectory

Isso é muito útil para administração de servidores sem precisar de instalação local de módulos.

Boas práticas e observações finais

Ao trabalhar com o PowerShell, lembre-se de: usar o VSCode para desenvolvimento, personalizar o prompt para aumentar a produtividade, entender a diferença entre cmdlets e comandos nativos, e gerenciar sessões com cuidado para não sobrecarregar recursos. Sempre teste scripts em ambientes controlados antes de aplicar em produção.

Referências

Exercícios

  1. Qual é a diferença principal entre o console do PowerShell e o ISE? Dê um exemplo de situação onde cada um é mais adequado.

    ✓ Resposta: O console é uma interface de linha de comando pura, leve e rápida, ideal para comandos rápidos e scripts simples. O ISE oferece uma interface gráfica com editor e depuração, sendo melhor para aprender e desenvolver scripts pequenos, mas está obsoleto. Exemplo: use o console para executar um comando rápido como Get-Service; use o ISE para escrever um script com loops e depuração.
  2. Escreva uma função de prompt que exiba a data atual no formato 'dd/MM/yyyy' e o caminho completo do diretório atual.

    ✓ Resposta:
    function prompt {
        $data = Get-Date -Format "dd/MM/yyyy"
        "[$data] PS $($executionContext.SessionState.Path.CurrentLocation)> "
    }
  3. Explique como executar um script PowerShell que está no diretório atual. O que fazer se a política de execução bloquear?

    ✓ Resposta: Para executar um script no diretório atual, use .\script.ps1. Se a política de execução bloquear, você pode alterá-la com Set-ExecutionPolicy RemoteSigned -Scope CurrentUser. Alternativamente, execute com powershell.exe -ExecutionPolicy Bypass -File script.ps1.
  4. Crie uma sessão remota para o computador 'Servidor01' e execute o comando Get-Process. Depois, remova a sessão.

    ✓ Resposta:
    $s = New-PSSession -ComputerName Servidor01 -Credential (Get-Credential)
    Invoke-Command -Session $s -ScriptBlock { Get-Process }
    Remove-PSSession -Session $s
  5. O que é implicit remoting e qual sua vantagem? Dê um exemplo de comando.

    ✓ Resposta: Implicit remoting permite importar comandos de uma sessão remota para o computador local, como se fossem cmdlets nativos. A vantagem é não precisar instalar módulos localmente. Exemplo: Import-PSSession -Session $s -Module ActiveDirectory torna os cmdlets do AD disponíveis localmente.