390 votes

PowerShell est prêt à remplacer mon shell de cygwin sous Windows ?

Je suis demandais si je devais apprendre PowerShell, ou simplement coller avec Cygwin/Scripts Perl/Shell Unix scripts, etc.

L'avantage de PowerShell serait que les scripts pourraient être plus facilement utilisé par des coéquipiers qui n'ont pas de cygwin; cependant, je ne sais pas si je serais vraiment écrit que de nombreuses fins générales de scripts, ou si les gens les utilisent même.

Scripts Unix est si puissant, ne PowerShell venir assez près pour justifier le changement?

EDIT: Voici certaines des choses (ou équivalents), je serais à la recherche pour en PowerShell:

  • grep
  • tri
  • uniq
  • Perl (comment fermer n'PowerShell venir à Perl capacités?)
  • awk
  • sed
  • fichier (la commande qui donne des informations sur le fichier)
  • etc.

795voto

Jeffrey Snover - MSFT Points 5511

Les outils sont des outils.
Ils aident ou ils ne le font pas.
Vous avez besoin d'aide ou vous n'avez pas.

Si vous connaissez Unix et les outils dont vous avez besoin à faire sur Windows, alors vous êtes le plus heureux des hommes, et il n'est pas nécessaire d'apprendre PowerShell (sauf si vous voulez explorer).

Mon intention première était d'inclure un ensemble d'outils Unix dans Windows et être fait avec elle (un certain nombre d'entre nous dans l'équipe de profondes univers Unix et une bonne dose de respect pour la communauté.) Ce que j'ai constaté, c'est que cela n'a pas vraiment aider beaucoup. La raison en est que awk/grep/sed ne fonctionnent pas contre COM, WMI, ADSI, le Registre, le cert magasin, etc, etc. En d'autres termes, UNIX est un écosystème complet d'auto-écoute autour des fichiers de texte. En tant que tel, les outils de traitement de texte efficace des outils de gestion. Windows est un système complètement différent de l'écosystème de l'auto-écoute autour des Api et des Objets. C'est pourquoi nous avons inventé PowerShell.

Je pense que vous trouverez, c'est que il y aura beaucoup d'occasions lors de traitement de texte vous n'obtiendrez pas ce que vous voulez sur Windows. À ce stade, vous aurez envie de ramasser PowerShell. REMARQUE - il n'est pas un tout ou rien. Dans PowerShell, vous pouvez appeler vos outils Unix (et d'utiliser le texte de leur processus ou PowerShell du traitement de texte). Vous pouvez également appeler PowerShell à partir de vos outils Unix et obtenir le texte.

Encore une fois - il n'y a pas de religion ici - notre objectif est de vous donner les outils dont vous avez besoin pour réussir. C'est pourquoi nous sommes des passionnés de la rétroaction. Laissez-nous savoir où nous en sommes, tombant sur l'emploi ou si vous n'avez pas un outil dont vous avez besoin et nous allons le mettre sur la liste et d'obtenir à elle. En toute honnêteté, nous sommes à creuser nous-mêmes de 30 ans sur le trou de sorte qu'il est va prendre un certain temps. Cela dit, si vous prenez la version bêta de Windows Server 2008 /R2 et/ou les bêtas de nos produits serveur, je pense que vous serez choqués de voir à quelle vitesse ce trou est exécuté.

Quant à l'utilisation que nous avons eu > 3,5 millions de téléchargements à ce jour. Qui ne comprend pas les gens à l'utiliser dans Windows Server 2008, car il est inclus comme un composant facultatif et n'a pas besoin d'un téléchargement. V2 sera disponible dans toutes les versions de Windows. Il sera par défaut pour toutes les éditions à l'exception de Serveur de base où il est un composant facultatif. Peu de temps après Windows 7/Windows Server 2008 R2 navires, nous ferons V2 disponible sur toutes les plateformes XP et au-dessus. En d'autres termes, votre investissement dans l'apprentissage sera applicable à un très grand nombre de machines/environnements.

Un dernier commentaire. Si/lorsque vous commencez à apprendre PowerShell, je pense que vous serez assez heureux. Une grande partie de la conception est fortement influencée par notre univers Unix ainsi, alors que nous sommes tout à fait différents, vous pourrez récupérer très rapidement (après que vous obtenez plus de jurer qu'il n'est pas Unix :-) ). Nous savons que les gens ont un budget très limité pour l'apprentissage - c'est pourquoi nous sommes super hard-core au sujet de la cohérence. Vous allez apprendre quelque chose et puis vous allez l'utiliser plus et plus et plus de nouveau.

Faites l'expérience! Profitez-en! S'engager!

Jeffrey snover fait [MSFT] Windows Un Partenaire De Gestion De L'Architecte

125voto

Richard Points 54016

grep

Select-String cmdlet -match opérateur de travailler avec les regexes. Aussi, vous pouvez directement faire usage de .NET de la regex de soutien pour des fonctionnalités plus avancées.

tri

Sort-Object est plus puissant (que je me souviens de *nix de l' sort). Multi-niveau de tri arbitraire et les expressions. Ici PSH l'entretien de type sous-jacent aide; par exemple, un DateTime de la propriété seront triés selon un DateTime sans avoir à s'assurer de la mise en forme dans un sortable format.

uniq

Select-Object -Unique

Perl (comment fermer n'PowerShell venir à Perl capacités?)

En termes de Perl à l'étendue du domaine spécifique des bibliothèques de support: aucun (pour le moment).

Pour la programmation en général, PSH est certainement plus cohésif et cohérent, et plus facile à étendre. L'une lacune du texte munging est quelque chose d'équivalent en perl .. de l'opérateur.

awk

Il a été assez longtemps puisque l'utilisation de awk (doit être >18 ans, puisque plus tard, j'ai juste utilisé perl), ne peut donc pas vraiment de commentaire.

sed

[Voir ci-dessus]

fichier (la commande qui donne des informations sur le fichier)

PSH force ici n'est pas tant de ce qu'il peut faire avec les objets du système de fichiers (et il est plein d'informations ici, dir retours FileInfo ou FolderInfo objets selon le cas) est que c'est l'ensemble du modèle de fournisseur.

Vous pouvez traiter le registre, magasin de certificats, SQL Server, c'est à dire de la RSS etc cache. comme un objet de l'espace navigable par la même applets de commande que le système de fichiers.


PSH est certainement la voie à suivre sur Windows. MS ont fait une partie de leurs besoins futurs en matière de non-produits de la maison. D'où la prise en charge riche en Échange, de soutien dans SQL Server, ce n'est que va se développer.

Un exemple récent est la TSF PowerToys. De nombreux TFS client opérations sont effectuées sans avoir à démarrage tf.exe à chaque fois (ce qui nécessite un nouveau serveur TFS connexion etc.) et est notamment plus facile de continuer à traiter les données. Ainsi que de permettre un large accès à l'ensemble de la TSF client de l'API pour plus de détails qu'exposé dans l'une des équipes de l'Explorateur de TF.exe.

59voto

Ubiguchi Points 2145

Comme quelqu'un qui a de la carrière axée sur Windows le développement des entreprises de 1997 à 2010, la réponse évidente serait Powershell pour toutes les bonnes raisons exposées ci-dessus (par exemple, Elle est partie de MS' stratégie d'entreprise; il s'intègre très bien avec Windows/COM/.NET; et à l'aide d'objets au lieu de les fichiers prévoit un "riche" modèle de codage). Pour cette raison, j'avais été l'utilisation et la promotion de Powershell pour les 2 dernières années ou ainsi, avec le consentement express de la croyance, je suivais le "Mot du projet de Loi."

Cependant, comme un pragmatique, je ne suis plus sûr de Powershell est une bonne réponse. Alors que c'est un excellent outil de Windows et fournit un pas vers le remplissage de l'historique trou qui est la Fenêtre de ligne de commande, comme nous le montre MS' adhérence sur la consommation de calcul de glissement, il semble de plus en plus probable que MS a une grande bataille à l'avance pour garder l'OS comme important pour l'entreprise de l'avenir.

En effet, étant donné que je trouve mon travail est de plus en plus dans des environnements hétérogènes, je trouve qu'il est beaucoup plus utile d'utiliser des scripts bash pour le moment, comme ils travaillent non seulement sur Linux, Solaris et Mac OS X, mais ils travaillent aussi avec l'aide de Cygwin-sur Windows.

Donc, si vous achetez dans la conviction que l'avenir de l'OS est banalisé, plutôt que d'un monopolisé, alors il semble logique d'opter pour un développement agile outil de stratégie qui tient à l'écart de propriété outils lorsque cela est possible. Si toutefois vous voyez votre avenir en étant dominé par les tout-ce-qui-est-Redmond puis aller pour Powershell.

35voto

Daishiman Points 667

J’ai utilisé un peu de Powershell pour l’automation de script. Alors que c’est très bien que l’environnement semble avoir été pensé beaucoup plus que les shells Unix, dans la pratique, l’utilisation d’objets au lieu de flux de texte est beaucoup plus maladroit, et un grand nombre des installations Unix qui ont été développés au cours des 30 dernières années sont toujours portés disparus.

Cygwin est toujours mon environnement de script de choix pour les hôtes Windows. Il vaut certainement mieux les alternatives en termes de bouger les choses.

14voto

Eric Smith Points 2442

J'ai récemment commencé à barboter dans PS avec un certain degré de gravité. Bien que, pour les sept dernières années, j'ai travaillé presque exclusivement environnement Windows, je viens d'un Unix à l'arrière-plan et de trouver moi-même constamment en essayant de "Unix-fy" mon expérience d'interaction sur Windows. C'est frustrant pour dire le moins.

Il n'est que juste de comparer PS à quelque chose comme Bash, tcsh ou zsh depuis des utilitaires comme grep, sed, awk, trouver etc. ne sont pas, à proprement parler, partie de la coquille; ils seront toujours, cependant, de faire partie d'un environnement Unix. Cela dit, une commande PS, comme Select-String est très semblable à la fonction grep et est livré avec un module de base en PS ... donc les lignes peut être un peu floue.

Je pense que la clé, c'est de la culture, et le fait que l'outil-ensembles incarner leurs cultures respectives:

  • Unix est une base de fichiers, en général, non Unicode) texte de base de la culture. Les fichiers de Configuration sont presque exclusivement de texte des fichiers. Windows, sur l'autre main a toujours été beaucoup plus structurée en matière de formats de configuration--les configurations sont généralement conservés dans des bases de données propriétaires (par exemple, le registre de Windows) qui nécessitent des outils spécialisés pour leur gestion.
  • L'administration Unix (et, pendant de nombreuses années, le développement de l'interface a toujours été la ligne de commande et le terminal virtuel. Windows a commencé comme une interface graphique et des fonctions administratives n'ont que récemment commencé à se déplacer loin d'être exclusivement basé sur l'interface. On peut s'attendre à l'expérience Unix en ligne de commande pour être plus riche, plus mature compte tenu de l'importance de plomb qu'il a sur PS, et mon expérience correspond à cela. Sur ce, mon expérience:

    • L'Unix d'expérience administrative est orientée vers la fabrication de choses facile à faire dans un minimum de frappes de touche; c'est probablement en raison de la situation historique d'avoir à administrer un serveur lent 9600 bauds connexion d'accès à distance. Maintenant PS n'ont d'alias qui vont un long chemin à obtenir autour de la assez bavard Verbe-Substantif standard, mais connaître les alias est un peu de douleur (quelqu'un sait quelque chose de mieux que: alias | where {$_.ResolvedCommandName -eq "<command>"}?).

      Un exemple de la richesse de façon dont l'histoire peut être manipulé:

      iptables des commandes sont souvent de longue haleine et les répète avec de légères différences serait une douleur si ce n'était qu'une des nombreuses caractéristiques intéressantes de l'histoire de manipulation construit en Bash, donc l'insertion d'une règle iptables comme suit:

      iptables -I camera-1-internet -s 192.168.0.50 -m state --state NEW -j ACCEPT

      une deuxième fois pour une autre caméra ("camera-2"), est juste un cas de délivrance:

      !!:s/-1-/-2-/:s/50/51

      ce qui signifie "exécuter la commande précédente, mais en remplaçant -1- avec -2- et 50 avec 51.

    • L'expérience des systèmes Unix est optimisée pour l'interaction tactile-dactylographes; on peut à peu près faire tout sans quitter la position "origine". Par exemple, en Bash, à l'aide de l' Emacs de raccourcis clavier (oui, Bash prend également en charge vi liaisons), randonnée à vélo à travers l'histoire se fait à l'aide de Ctrl-P et Ctrl-N tout en se déplaçant au début et à la fin d'une ligne se fait à l'aide de Ctrl-A et Ctrl-E , respectivement, ... et il n'a certainement pas là. Essayez, même la plus simple de la navigation dans la PS console sans bouger de sa position d'origine et que vous êtes en difficulté.

    • Des choses simples comme la polyvalente de pagination (ala moins) sur Unix ne semblent pas être disponibles out-of-the-box dans le PS qui est un peu frustrant, et un riche éditeur de l'expérience n'existe pas non plus. Bien sûr, on peut toujours télécharger des outils de tiers, qui permettra de combler ces lacunes, mais il serait vraiment bien si ces choses étaient simplement là comme ils sont assez bien toutes les saveurs de Unix.
  • Les Fenêtres de la culture, au moins en termes de système de l'API est en grande partie motivée par le soutien des cadres, viz., COM et .NET, les deux qui sont très structurée et basée sur les objets. D'autre part, l'accès à l'API Unix a été traditionnellement par le biais d'un fichier d'interface (/dev et /proc) ou (non-orienté objet) C-style appels de bibliothèque. Il n'est donc pas surprenant que le script expériences correspondent à leurs OS respectifs paradigmes. PS est, par nature, structuré (tout est un objet) et Bash-et-les amis de fichier. De la structuration de l'API qui est à la disposition d'un PS programmeur est vaste (essentiellement correspondant à l'immensité de l'ensemble existant de la norme COM et .NET interfaces).

En bref, bien que les fonctionnalités de script de PS sont sans doute plus puissant que Bash (surtout quand on considère la disponibilité de l' .NET BCL), l' interactive de l'expérience est nettement plus faible, en particulier si vous venez à partir d'une entièrement clavier-driven, console de point de vue (comme de nombreux Unix-têtes).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X