Windows PowerShell est-il aussi puissant que le terminal Unix / Linux? [fermé]

41

Est-ce que Windows PowerShell aussi puissant et efficace que Linux ' terminal?

Les gens hors ligne me disent, sans trop en dire, que Windows PowerShell est une tentative pour rendre les administrateurs Unix plus à l'aise avec Windows. Mais je suppose qu’ils ne seront à l’aise que s’il a (ou presque) la même efficacité.

kern
la source
3
C'est difficile de répondre, car il n'y a PAS CE shell Linux. Il existe de nombreux shells couramment utilisés sous Linux (ou généralement * nix). Le plus utilisé est bash, vous pouvez donc vous renseigner à ce sujet. & Lt; br & gt; Aussi "puissant" est très basé sur l'opinion.
Kritzefitz
5
People offline tell me ... that Windows Powershell is an attempt to make UNIX administrators feel more comfortable using Windows. Ces personnes n'ont jamais utilisé Unix ou Powershell.
surfasb
Je dirais que PowerShell est une reconnaissance de la part de certaines zones de Microsoft qu’elles n’avaient pas un shell puissant à leur disposition. Cependant, il ne copie pas du tout le style de UNIX. Pour connaître PS, vous devez bien comprendre un peu le fonctionnement de Windows et de .NET.
Julian Knight
En passant, Microsoft disposait d'un shell BASH faisant partie d'un kit de migration censé aider les utilisateurs à passer d'UNIX à Windows Server.
Julian Knight
Je suis un fan de longue date d'Unix qui préfère Unix à Windows à bien des égards. Cependant, PowerShell bat bash haut la main car l’un des tubes dirige des objets ayant des paires clé / valeur et non du texte pur. Cela le rend plus similaire dans la conception à jQuery qu'à bash.
Mario

Réponses:

52

Eh bien, votre premier problème est que vous comparez un shell (PowerShell) à un terminal. Sous Linux, un terminal est quelque chose qui envoie et reçoit des E / S basées sur des caractères et est supposé avoir un utilisateur interactif derrière lui (en d’autres termes, c’est l’application GUI utilisée pour contenir une coquille). Un des coquillages les plus courants dans Le terminal d'Ubuntu est Frapper , mais il y en a d'autres.

Les gens hors ligne me disent, sans trop en dire, que Windows PowerShell est une tentative pour rendre les administrateurs Unix plus à l'aise avec Windows.

En réalité, la chose correcte à dire est que PowerShell est Windows exposant une grande partie de la WMI , COM et .NET modèle d'objet dans un environnement de ligne de commande interactif et scriptable - et que cet environnement de ligne de commande continue à emprunter de nombreux concepts - tels que les pipelines et la redirection d'E / S - à des shells Unix, tout comme l'ancien DOS (2.0 et versions ultérieures) command.com et cmd.exe fait. Les pipelines fonctionnent avec des objets dans PowerShell. Vous pouvez faire des choses comme créer du HTML et éventuellement Exceller feuilles de calcul à la volée si vous en savez assez. C'est certainement une mise à niveau / remplacement de l'ancien cmd.exe shell qui n'a pas beaucoup changé de Windows NT 4.0 .

En ce qui concerne la syntaxe, cela ressemble moins aux shells Unix (bien que finalement aucune applet de commande / comme commutateur ou indicateur de paramètre), mais il existe de nombreux alias pour les commandes Unix classiques - telles ls dans une fenêtre PowerShell fonctionnera comme dir. Mais ce ne sont que des alias ("Get-Alias" les énumère?).

En ce qui concerne les capacités de PowerShell, vous disposiez réellement de fonctionnalités similaires, en mode script uniquement, de VBScript et CScript - bien que ces deux éléments soient antérieurs à .NET.

Une chose que les gens d’Unix n’ont pas à faire lors de l’utilisation de Bash consiste le plus souvent à se familiariser avec le modèle objet éventuellement très élaboré d’un programmeur ou d’un objet, qui est requis pour de nombreuses tâches PowerShell simples et avancées. Mais ceci n’est possible que parce qu’il existe une convention claire de sortie de texte simple pour de nombreux logiciels standard. POSIX commandes. Windows n'a pas eu cette tradition - il a semblé préférer utiliser un mmc console pour les tâches administratives, avec des commandes ajoutées ici et là au fil des ans. En outre, de nombreux utilitaires Unix bien connus sont complexes et nécessitent une étude avant d’être utilisés - rsync, wget, et plein d'autres. L'efficacité dépend probablement du degré de connaissance de l'outil utilisé.

LawrenceC
la source
6
+1 pour avoir mentionné que PowerShell expose .NET à la console & amp; en tant qu'hôte de script. Il expose la puissance de nombreuses bibliothèques Windows clés à utiliser dans les scripts. Les cas d'utilisation entre les deux peuvent être similaires, le style est totalement différent.
Julian Knight
1
+1 pour mentionner qu'un terminal contient un shell. Cela fait longtemps que j'utilise Windows et Linux, mais personne n'a jamais dit la différence aussi clairement.
Tyler Collier
24

Windows PowerShell et le shell Unix sont deux choses différentes qui présentent des avantages.

Unix (shell) a pour philosophie que tout est un fichier. L’entrée et la sortie d’une commande Unix sont accessibles comme un fichier. Cela rend la commande d'enchaînement vraiment simple et réutiliser le résultat d'une commande par une autre est la puissance du shell Unix.

Avec Windows PowerShell, autant que je sache, tout est un objet. Vous pouvez transmettre le résultat d'une commande à une autre en tant qu'objet. Cela peut être très puissant, mais il n’a pas le concept simple d’Unix.

Je ne pense pas que PowerShell soit aussi efficace qu'un shell Unix, mais d'autres le pensent.

Mais la comparaison est sans objet, car Windows n'est pas un système * nix, les concepts * nix ne s'appliquent donc pas. Par rapport à MS-DOS , PowerShell est une grande amélioration.

Biapy
la source
3
Tout est qu'un fichier n'a rien à voir avec le shell, c'est une chose du noyau.
terdon
3
C'est vrai, mais cela a une incidence sur la conception du shell Unix.
Biapy
@terdon: C'est vrai, mais la coque fonctionne bien avec ça. Parce que c'est toujours le shell qui reconnaît les symboles comme |, < ou >.
Kritzefitz
1
Les gens continuent à parler de ces objets dans PowerShell. Étant habitué uniquement à cmd.exe et bash (ou à d’autres shells), pouvez-vous préciser, peut-être avec un exemple simple?
Luc
4
Sans vous éloigner de cette page - lorsque vous effectuez un pipeline dans des systèmes * nix sur le côté droit du tuyau, vous vous attendez à un texte simple, par exemple --- history | grep cp --- ne renverra que les lignes contenant cp. D'autre part, lorsque vous gérez des éléments dans PS sur le côté droit, vous obtenez un objet, avec des propriétés telles que celle-ci --- Get-History | Where-Object {$ _. CommandLine -eq "cp"} --- $ _ est chaque objet, CommandLine est la propriété, -eq est égal à et enfin la chaîne cp.
Unknown