Share via


Windows PowerShell : Le texte est parfois ce qu'il y a de mieux

Vous n'avez pas à pencher le problème quand vous pouvez utiliser Windows PowerShell pour faire bouger les choses rapidement et facilement.

Don Jones

Après une année de prise de votre questions Windows PowerShell, cela me semblait une bonne idée d'examiner certaines des questions plus anciennes. Celui-ci à partir de ces premiers jours vraiment met en évidence quelques-unes des façons que Windows PowerShell vous permet d'obtenir des trucs à faire. Il montre également comment elle peut payer à ne pencher pas le problème.

Pour paraphraser la question, ce lecteur a un fichier XML qui comprenait un commentaire :

<!-- <tag attribute="value">Data</tag> -->

Comme vous pouvez le voir, les balises de commentaire (le "<!--" et le "-->") joindre une balise XML. Son but était d'un commentaire que, si le code XML résultant aurait la balise « actif » plutôt que "commentés." Il a démarré à l'aide de Get-Content pour lire le fichier, mais un cast du résultat en un type de données XML de Windows PowerShell :

[xml]$file = Get-Content myfile.xml

Ce que certaines personnes ne comprennent pas tout ce truc, c'est qu'il oblige Windows PowerShell, par l'intermédiaire de Microsoft .NET Framework, pour analyser le fichier XML et à construire une hiérarchie d'objets qui représentent le contenu du fichier XML. Il n'est pas si différent de l'utilisation de Import-CliXML, bien que cette astuce particulière va lire n'importe quel fichier XML valide et bien formé. Import-CliXML est destiné à lire le format XML spécifique créé par Export-CliXML.

En tout cas, le problème à traiter le contenu du fichier XML est que XML peut être une douleur dans le cou pour travailler avec. Afin de localiser un commentaire et un commentaire, vous réellement devez faire un peu de codage. Et il s'agit de code, avec que je ne suis pas du tout personnellement familiarisé.

L'approche pragmatique

Permettez-moi de recul pour un moment et offrir un peu de conseils philosophiques. Alors que j'ai fait le développement de logiciels dans le passé, je n'ai jamais été un développeur professionnel, qualifié. Dans l'âme, j'ai toujours été un administrateur. Un de mes premiers emplois était comme un AS / 400 sysop. Admins, je trouve, sont des créatures pragmatiques. « Voir le problème, résolvez le problème et puis rentrer à la maison pendant la nuit, » est comment j'ai souvent décrire l'attitude de l'administration générale.

Les développeurs, en revanche, ont un désir ancré de faire ce qui est « juste ». Ils pourraient produire peu laid-à la recherche de code alors qu'ils sont des prototypes et savoir comment quelque chose fonctionne, mais ils presque toujours revenir en arrière et réécrire ou tordre qu'il est « juste ». Si un développeur, confronté à la nécessité de modifier le XML que j'ai décrites, passeraient probablement aussi longtemps que nécessaire pour trouver la façon « juste » pour accomplir la tâche. Qui impliquerait probablement manipuler le XML via les trucs magiques de boîte noire XML du .NET Framework.

Ce n'est pas mon approche. Je n'ai juste pas ce genre de temps. Ce que j'ai est un moyen d'obtenir le travail fait sans se soucier. Ma suggestion est d'arrêter de traiter le fichier au format XML. Après tout, ne pas vraiment besoin de salir avec aucune des données dans le fichier, alors pourquoi faire Windows PowerShell analyser tout ça du format XML ? Nous avons juste besoin de faire une petite modification simple du texte brut :

$text = Get-Content myfile.xml $text = $text –replace '<!--','' $text = $text –replace '-->','' $text | Out-File newfile.xml

Le lecteur voulu chaque commentaire XML supprimé, et c'est ce qui fait ma solution. Simplement, elle porte sur chaque instance des caractères tag commentaire et les remplace par une chaîne vide. Effectivement, cela supprime le commentaire et rend la balise XML fermée « active » pour quel que soit le procédé a été effectivement lire et utiliser ce fichier XML.

Donc, ma solution a été d'ignorer le fait que le fichier XML. N'a pas besoin de faire quoi que ce soit « XML-ish ». J'ai juste besoin de supprimer certains caractères. En le traitant comme texte brut (que je n'a pas transtyper vers [xml] lors de l'obtention du contenu de l'avis), je pourrais utiliser les opérateurs de manipulation de texte Windows PowerShell parfaitement capables d'accomplir la tâche.

Cette philosophie de la mine met parfois les gens hors. Parfois les gens vont demander, « Comment pouvez-vous modifier les autorisations de fichiers et de dossiers dans Windows PowerShell? » Je vais haussement d'épaules et dire, « XCacls. » Il s'exécute dans Windows PowerShell, je sais comment l'utiliser et il fait le travail.

Les solutions de rechange — Get-ACL et Set-ACL — sont trop compliquées. Ils requièrent une connaissance plus approfondie d'un tas de trucs de .NET Framework que, franchement, je ne suis pas intéressé à apprendre dès maintenant. Pourquoi s'embêter quand il existe déjà un moyen parfaitement bien de faire le travail ?

Évidemment, ma philosophie est un partagé par l'équipe de Windows PowerShell. Sinon, pourquoi ils travailler si dur pour s'assurer que les exécutables externes comme XCacls, Ipconfig, Ping et le tout comme travail à l'intérieur de Windows PowerShell ? Ils savaient que nous savons déjà comment utiliser ces outils, et rendant ainsi travailler à l'intérieur de Windows PowerShell nous donne une longueur d'avance dans l'obtention d'effectuer notre travail.

Personne n'est l'apprentissage de Windows PowerShell « juste parce que. » Nous l'apprenons parce qu'elle rend notre travail plus facile. Cela arrive seulement, bien que, si elle nous permet toujours d'utiliser les outils que nous connaissons. Nous vous invitons à être en désaccord avec mon approche « Voir le problème, corriger la problème et aller la maison. » Beaucoup de gens le faire. Cependant, je trouve que c'est une approche pratique quand vous avez juste un travail à faire et vous vous en fichez comment assez ou laid, la solution est aussi longtemps que le travail est accompli.

Don Jones

Don Jones est un destinataire Microsoft MVP Award et auteur de "Apprendre Windows PowerShell dans un mois de repas » (Manning Publications, 2011), un livre conçu pour aider n'importe quel administrateur devenir efficace avec Windows PowerShell. Jones propose également le publique et sur le site formation de Windows PowerShell. Vous pouvez le contacter via ConcentratedTech.com ou bit.ly/AskDon.

Contenu connexe