O Windows PowerShell é tão poderoso quanto o terminal do Unix / Linux? [fechadas]

45

O Windows PowerShell é tão poderoso e eficiente quanto o Linux terminal?

As pessoas offline dizem-me, sem explicar muito, que o Windows PowerShell é uma tentativa de fazer com que os administradores do Unix se sintam mais confortáveis ​​usando o Windows. Mas acho que só serão confortáveis ​​se tiver (ou quase) a mesma eficiência.

kern
fonte
3
É difícil responder, porque não existe esse shell do Linux. Existem muitos shells comumente usados ​​no Linux (ou geralmente nos sistemas * nix). O mais usado é o bash, então você pode perguntar sobre isso. <br> Também "poderoso" é muito baseado em opiniões.
Kritzefitz 26/01
8
People offline tell me ... that Windows Powershell is an attempt to make UNIX administrators feel more comfortable using Windows.Essas pessoas nem usaram o Unix nem o Powershell.
surfasb
Eu diria que o PowerShell é um reconhecimento de algumas áreas da Microsoft que eles estragaram por não ter um shell poderoso disponível. No entanto, ele não copia o estilo do UNIX. Para conhecer o PS, é realmente bom entender um pouco sobre como o Windows funciona e como o .NET funciona.
Julian Knight
Aliás, a Microsoft tinha um shell BASH disponível que fazia parte de um kit de ferramentas de migração que deveria ajudar as pessoas a passar do UNIX para o Windows Server.
Julian Knight
1
Sou fanboy de longa data do Unix que prefere o Unix ao Windows na maioria dos aspectos; no entanto, o PowerShell é melhor do que o bash, porque um canal de objetos com pares de chave / valor e não texto puro. Isso o torna mais semelhante ao design do jQuery do que ao bash.
Mario

Respostas:

56

Bem, seu primeiro problema é que você está comparando um shell (PowerShell) a um terminal. No Linux, um terminal é algo que envia e recebe E / S baseada em caracteres e supõe-se que haja um usuário interativo (em outras palavras, é o aplicativo GUI usado para conter um shell). Um dos shells mais comuns executados no Terminal do Ubuntu é o Bash , mas existem outros.

As pessoas offline dizem-me, sem explicar muito, que o Windows PowerShell é uma tentativa de fazer com que os administradores do Unix se sintam mais confortáveis ​​usando o Windows.

Realmente, a coisa certa a dizer é que o PowerShell é o Windows que expõe grande parte do modelo de objeto WMI , COM e .NET em um ambiente de linha de comando interativo e com script - e que esse ambiente de linha de comando continua a emprestar muitos dos conceitos - como pipelines e redirecionamento de E / S - dos shells do Unix, exatamente como o antigo DOS (2.0 e superior) command.come o cmd.exefez. Os pipelines funcionam com objetos no PowerShell. Você pode fazer coisas como criar HTML e, possivelmente, planilhas do Excel em tempo real, se soubesse o suficiente. Certamente é uma atualização / substituição do cmd.exeshell antigo que não mudou muito em relação ao Windows NT 4.0 .

Em relação à sintaxe, é menos parecido com os shells do Unix (embora, finalmente, nenhum dos cmdlets use /como um comutador ou indicador de parâmetro), mas existem muitos aliases para os comandos clássicos do Unix - como entrar lsem uma janela do PowerShell funcionará da mesma forma dir. Mas esses são apenas aliases ("Get-Alias" lista esses?).

Em relação à capacidade do PowerShell, você realmente possuía capacidade semelhante, somente de script, do VBScript e CScript - embora ambos sejam anteriores ao .NET.

Uma coisa que as pessoas do Unix não precisam fazer ao usar o Bash na maioria das vezes é familiarizar-se com o modelo de objeto possivelmente muito elaborado de um programador ou objeto, necessário para muitas tarefas simples e avançadas do PowerShell. Mas isso só é possível porque existe uma convenção clara de saída de texto direto para muitos comandos POSIX padrão . O Windows não tem essa tradição - parece preferir que você use um mmcconsole para tarefas de administração, com comandos adicionados aqui e ali ao longo dos anos. Além disso, muitos utilitários Unix conhecidos são complexos e exigem algum estudo antes de usar - rsync, wgete muitos outros. A eficiência é provavelmente uma função de quão bem alguém conhece a ferramenta que está usando mais do que qualquer outra coisa.

LawrenceC
fonte
8
+1 por mencionar que o PowerShell expõe o .NET ao console e como um host de script. Ele expõe o poder de muitas bibliotecas principais do Windows para serem usadas em scripts. Os casos de uso entre os dois podem ser semelhantes, o estilo é totalmente diferente.
Julian Knight
3
+1 por mencionar que um terminal contém um shell. Eu uso o Windows e o Linux há muito tempo, mas nunca alguém disse a diferença tão claramente.
Tyler Collier
26

O Windows PowerShell e o shell Unix são duas coisas diferentes, com vantagens em ambos.

O Unix (shell) tem uma filosofia de que tudo é um arquivo. A entrada e saída de um comando Unix pode ser acessada como um arquivo. Isso torna o comando encadeamento realmente simples e reutilizar a saída de um comando por outro é o poder do shell do Unix.

Com o Windows PowerShell, até onde eu sei, tudo é um objeto. Você pode passar o resultado de um comando para outro como um objeto. Isso pode ser realmente poderoso, mas não possui o conceito simples de Unix.

Não acredito que o PowerShell seja tão eficiente quanto um shell Unix, mas outros acreditam que seja.

Mas a comparação é discutível, porque o Windows não é um sistema * nix, portanto, os conceitos * nix não se aplicam. Comparado ao MS-DOS , o PowerShell é uma grande melhoria.

Biapy
fonte
4
O tudo é um arquivo não tem nada a ver com o shell, é uma coisa do kernel.
terdon
3
É verdade, mas afeta a forma como o shell unix é projetado.
Biapy
@terdon: Isso mesmo, mas o shell funciona muito bem com isso. Porque ainda é o shell que reconhece símbolos como |, <ou >.
Kritzefitz 26/01
1
As pessoas continuam falando sobre esses objetos no PowerShell. Sendo usado apenas para o cmd.exe e o bash (ou outros shells), você pode elaborar, talvez com um exemplo simples?
Luc
5
Sem enviar você para longe desta página - quando você faz o pipeline de coisas nos sistemas * nix no lado direito do canal, espera um texto simples, por exemplo --- history | grep cp --- retornará apenas linhas que contenham cp. Por outro lado, ao canalizar as coisas no PS do lado direito, você obtém um objeto, com propriedades como esta --- Get-History | Onde-Object {$ _. CommandLine -eq "cp"} --- $ _ é cada objeto, CommandLine é a propriedade, -eq é igual a e, finalmente, a cadeia cp.
Desconhecido