🇯🇵 日本語 | 🇺🇸 English | 🇪🇸 Español | 🇵🇹 Português | 🇹🇭 ไทย | 🇨🇳 中文

Comparando para entender a diferença entre o PowerShell e o cmd [com diagramas]

Quando se pensa no "ecrã preto" do Windows, muitas pessoas podem imaginar a antiga "Linha de Comandos (cmd.exe)". No entanto, o que temos vindo a aprender nos artigos até agora foi o "PowerShell", mais moderno e potente, caracterizado pelo seu fundo azul. Estes dois, embora parecidos, são na verdade completamente diferentes.

Muitos de vós devem ter dúvidas como: "Porque existem dois tipos?", "Qual devo usar no final?", "O cmd já está obsoleto?". Neste artigo, vamos comparar estes eternos rivais (?), o PowerShell e a Linha de Comandos, com tarefas concretas, explicando as suas diferenças de uma forma que até os iniciantes conseguem entender.

Quando terminar de ler este artigo, deverá ter uma compreensão clara das suas vantagens esmagadoras e do porquê de dever escolher o PowerShell. Vamos ver com os nossos próprios olhos a diferença entre a Linha de Comandos, que é um "martelo", e o PowerShell, que é uma "ferramenta elétrica multifunções"!


A maior e decisiva diferença: "Objetos" vs. "Texto"

A diferença mais fundamental entre o PowerShell e o cmd é o formato da informação que os comandos devolvem. Compreender isto é a chave para entender a diferença entre os dois.

O mundo da Linha de Comandos (cmd): tudo é "texto"

Quando se digita um comando como dir na Linha de Comandos, o que aparece no ecrã é apenas "texto (uma cadeia de caracteres)" formatado para leitura humana. É como uma lista impressa em papel. É muito entediante e requer um processamento de cadeias de caracteres complexo para extrair apenas o "nome do ficheiro" ou a "data de modificação" desta lista para usar no processo seguinte.

C:\> dir
 O volume na unidade C é o Windows
 O Número de Série do Volume é XXXX-XXXX

 Diretório de C:\

07/07/2024  09:00              Program Files
07/07/2024  09:05              Users
07/07/2024  09:10              Windows
               0 Ficheiro(s)              0 bytes
               3 Pasta(s)  123.456.789.012 bytes livres

Este resultado é apenas uma "sequência de caracteres" e, para um programa, são dados sem estrutura.


O mundo do PowerShell: tudo são "objetos"

Por outro lado, quando executa um comando semelhante, Get-ChildItem, no PowerShell, o que é devolvido é uma coleção de "objetos" estruturados. Um objeto é um bloco de dados que contém várias informações (propriedades).

【Diagrama conceptual】Um dos "objetos de ficheiro" que o Get-ChildItem devolve contém a seguinte informação armazenada de forma ordenada:

Isto é como uma tabela de Excel com a informação organizada. Graças a esta estrutura, o PowerShell torna surpreendentemente fácil realizar operações flexíveis baseadas em dados, como "ordenar por tamanho em ordem decrescente" ou "exibir apenas ficheiros com a extensão .txt".

PS C:\> Get-ChildItem

    Diretório: C:\

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
d-----        07/07/2024     09:00                Program Files
d-----        07/07/2024     09:05                Users
d-----        07/07/2024     09:10                Windows

Embora pareçam semelhantes, o ponto mais importante é que a qualidade dos dados que estão a ser manuseados nos bastidores é completamente diferente.


Comparação prática: vamos comparar com uma tarefa específica

Vamos comparar os dois com uma tarefa um pouco complexa: "Da lista de serviços atualmente em execução, exibir apenas os que têm 'Windows' no nome, ordenados por nome."

O desafio na Linha de Comandos (cmd)

Tentar alcançar isto no cmd é muito difícil. Pode obter uma lista de serviços com net start, mas o resultado é apenas texto. Extrair as linhas que contêm uma palavra específica e depois ordená-las exigiria o uso de findstr, sort, e um complexo loop for, o que é quase impossível para um iniciante.

C:\> net start
Os seguintes serviços do Windows foram iniciados:

   Application Host Helper Service
   Background Tasks Infrastructure Service
   Base Filtering Engine
   ...
   Windows Audio
   Windows Connection Manager
   Windows Defender Antivirus Service
   ...

Extrair com precisão apenas a informação desejada desta parede de texto é uma tarefa formidável.


A solução elegante no PowerShell

No PowerShell, graças aos objetos e ao pipeline, pode escrever este processo de forma intuitiva numa única linha.

Get-Service | Where-Object { $_.DisplayName -like "*Windows*" } | Sort-Object -Property DisplayName

Esta única linha realiza os seguintes passos em sequência:

  1. Get-Service: Obtém todos os serviços como "objetos".
  2. |: Passa a coleção de objetos para o comando seguinte.
  3. Where-Object ...: Dos objetos passados, filtra apenas aqueles cuja propriedade DisplayName contém "Windows".
  4. |: Passa os resultados filtrados para o comando seguinte.
  5. Sort-Object ...: Ordena os objetos passados pela sua propriedade DisplayName.

Esta comparação deve ter-lhe dado uma noção real da superioridade do PowerShell no processamento de dados e das suas vantagens.


Diferenças em comandos e sintaxe

Para compatibilidade com o cmd, o PowerShell permite-lhe usar alguns comandos antigos como "aliases" (nomes alternativos). No entanto, os seus cmdlets e sintaxe nativos são projetados para serem mais modernos e consistentes.

Manuseamento de variáveis

cmd: set nome_variavel=valor

set MYVAR=Hello World

PowerShell: $nome_variavel = valor

$myVar = "Hello World"

No PowerShell, a regra é prefixar os nomes das variáveis com um $.


Ramificação condicional (instrução if)

cmd:

if "%MYVAR%"=="Hello World" (echo Same)

PowerShell:

if ($myVar -eq "Hello World") { Write-Host "Same" }

O PowerShell usa operadores de comparação mais intuitivos como -eq (equal) e -gt (greater than).


O cmd já é desnecessário? O futuro do shell do Windows

Pode perguntar-se: "Se o PowerShell é tão conveniente, a Linha de Comandos já não é necessária?". A resposta é: "Não, não desaparecerá em breve. No entanto, deve fazer tudo o que é novo no PowerShell."

A Linha de Comandos ainda está incluída no Windows para manter a compatibilidade com sistemas muito antigos e com o vasto número de ficheiros batch (.bat) criados no passado. É pouco provável que a Microsoft a descontinue completamente.

No entanto, como se pode ver pelo facto de o PowerShell ser a configuração padrão na ferramenta de terminal padrão do Windows, o "Windows Terminal", não há dúvida de que a Microsoft posicionou o PowerShell como o centro da futura administração e automação do Windows.

Se está a aprender a linha de comandos do zero, escolher o PowerShell é, sem dúvida, a escolha mais sensata.


Conclusão

Desta vez, comparámos as diferenças decisivas entre o PowerShell e a Linha de Comandos (cmd), com a ajuda de diagramas (conceptuais).

Agora, quando se deparar com o ecrã preto do Windows, deverá ter uma razão clara para escolher a "ferramenta multifunções" que é o PowerShell. A nossa série de introdução ao PowerShell termina aqui, mas a sua jornada para a automação apenas começou. Incentivamo-lo a incorporar o PowerShell nas suas tarefas diárias e a sentir o seu poder por si mesmo!