Dieser Artikel wurde maschinell übersetzt.

Windows PowerShell: Manchmal ist Text das Beste

Sie haben nicht das Problem zu overthink, wenn Sie Windows PowerShell verwenden können, um schnell und einfach erledigen.

Don Jones

Nach einem Jahr nehmen Ihre Windows PowerShell Fragen, es schien wie eine gute Idee, einige der frühesten Fragen zu überprüfen. Diesein von jenen frühen Tagen werden wirklich einige der Möglichkeiten, die Windows PowerShell hilft Ihnen die Sachen erledigt werden. Es zeigt auch, wie sie bezahlen kann, um das Problem nicht overthink.

Um die Frage zu paraphrasieren, hatte dieser Reader eine XML-Datei, die einen Kommentar enthalten:

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

Wie Sie sehen können, die Kommentartags (die "<!--" und die "-->") schließen Sie ein XML-Tag. Sein Ziel war es, un-Kommentar, dass also das resultierende XML Tag "aktiv" statt "auskommentiert." hätte Er begann mit Get-Content in der Datei lesen, aber das Ergebnis als Windows PowerShell XML-Datentyp:

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

Was einige Leute nicht verstehen, über diesen Trick ist, dass es Windows PowerShell, das Microsoft .NET Framework zwingt, die XML-Datei analysiert und konstruieren einer Objekthierarchie, die XML-Datei Inhalt darstellt. Es ist nicht alles, was anders als mit Import-CliXML, obwohl dieser besonderen Trick jeder gültige, wohlgeformte XML-Datei gelesen wird. Import-CliXML soll die spezifische XML-Format erstellt von Export-CliXML lesen.

Wie auch immer, kann das Problem mit der Behandlung der Inhalt der Datei als XML, XML ist ein Schmerz im Nacken, mit zu arbeiten. Um einen Kommentar und un-Kommentar zu suchen haben, Sie tatsächlich einiges an Codierung zu tun. Und dies ist der Code, den ich überhaupt nicht persönlich kenne.

Der pragmatische Ansatz

Lassen Sie mich Schritt zurück für einen Moment und ein bisschen Philosophische Beratung bieten. Während ich die Software-Entwicklung in der Vergangenheit getan habe, habe ich nie eine professionelle, ausgebildete Entwickler. Am Herzen schon ich war immer ein admin. Meine erste IT-jobs gehörte als einer AS / 400 Sysop. Admins, ich finde, pragmatische Kreaturen sind. "Das Problem, das Problem zu beheben und dann nach Hause gehen für den Tag" ist, wie ich oft die allgemeine Admin-Haltung beschreiben.

Entwickler, haben auf der anderen Seite einen tief verwurzelten Wunsch zu tun, was "richtig". Sie könnte etwas hässlich aussehende Code produzieren, während sie sind, Prototyping und herauszufinden, wie etwas funktioniert, aber sie fast immer gehen Sie zurück und schreiben oder optimieren, um "richtig". So würde ein Entwickler, angesichts der Notwendigkeit, den XML-Code zu ändern, wie ich beschrieben habe, wahrscheinlich verbringen, so lange es dauert, bis der "richtige" Weg, die Aufgabe herauszufinden. Wahrscheinlich würde, die Bearbeitung von XML über magische .NET Framework XML Blackbox-Zeug beinhalten.

Das ist nicht mein Ansatz. Ich habe nicht nur diese Art von Zeit. Was ich zu tun habe, ist ein Weg, um die Aufgabe, die unabhängig davon gemacht. Mein Vorschlag war es, aufhören, die Datei als XML. Schließlich brauchen wir nicht wirklich, um Durcheinander mit den Daten in der Datei, also warum Windows PowerShell es alle aus der XML-Format zu analysieren? Wir müssen nur eine kleine einfache Änderung der Rohtext zu tun:

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

Der Leser wollte jeder XML-Kommentar entfernt, und das ist, was tut meine Lösung. Es sieht für jede Instanz der Kommentar-Tag-Zeichen einfach und ersetzt sie durch eine leere Zeichenfolge. Dadurch effektiv entfernt den Kommentar und das eingeschlossene XML-Tag "aktiv" für welchen Prozess war tatsächlich lesen und verwenden diese XML-Datei.

So war meine Lösung zu verkennen, dass die Datei XML war. Ich brauchte nicht zu tun "XML-Ish." Ich brauchte nur ein paar Zeichen zu entfernen. Durch Behandlung als nur-Text (Beachten Sie, dass ich es nicht in [Xml] umgewandelt, wenn den Inhalt immer), könnte ich die durchaus in der Lage Windows PowerShell-Bearbeitung von Text-Operatoren verwenden, um die Aufgabe.

Diese Philosophie von mir tickt manchmal Menschen aus. Manchmal fragt Leute, "Wie Sie Datei- und Ordnerberechtigungen in Windows PowerShell ändern können?" Ich werde mit zucken und sagen, "XCacls." Es läuft in Windows PowerShell, ich weiß, wie man es benutzt und es wird die Arbeit getan.

Die alternativen — Get-ACL und Set-ACL — sind übermäßig kompliziert. Fordern sie tiefere Kenntnisse von .NET Framework Zeug, dass ehrlich gesagt, bin ich nicht gerade jetzt lernen interessiert. Wozu, wenn es bereits ein ganz guter Weg, um den Job zu erledigen?

Meine Philosophie ist offensichtlich eine von der Windows PowerShell-Team geteilt. Warum sonst sie so hart arbeiten um sicherzustellen, dass externe Executables wie XCacls, Ipconfig, Ping und wie alle Arbeiten von innerhalb Windows PowerShell? Sie wussten, dass wir wissen bereits, wie Sie diese Tools verwenden, und macht sie innerhalb Windows PowerShell arbeiten uns einen Vorsprung gibt immer in unsere Arbeit zu erledigen.

Niemand ist Windows PowerShell "just because." lernen. Wir lernen es, weil unsere Arbeit erleichtert. Das passiert nur, wenn wenn es weiterhin ermöglicht uns die Tools verwenden wir bereits wissen. Du bist willkommen, nicht einverstanden mit meine Herangehensweise an das Problem sehen, beheben das Problem und nach Hause gehen." Viele Menschen tun. Allerdings finde ich, dass es ist ein praktischer Ansatz, wenn Sie gerade einen Job habe zu tun, und Sie sich nicht wie schön kümmern oder hässlich ist die Lösung so lange, wie die Arbeit erledigt wird.

Don Jones

Don Jones ist ein Microsoft MVP Award Empfänger und Autor der "Lernen Sie Windows PowerShell in ein Monat der Mittagessen" (Manning Publications, 2011), ein Buch soll helfen, alle Administratoren, die mit Windows PowerShell zustande. Jones bietet öffentlichen und vor-Ort-Windows PowerShell-Training. Sie erreichen ihn über ConcentratedTech.com oder bit.ly/AskDon.

Verwandte Inhalte