Windows PowerShell. A volte, il testo è la soluzione migliore

Non devi overthink il problema, quando è possibile utilizzare Windows PowerShell per fare le cose rapidamente e facilmente.

Don Jones

Dopo un anno di prendere il vostro domande di Windows PowerShell, mi sembrava una buona idea di rivedere alcune delle prime domande. Questo uno di quei primi giorni davvero evidenzia alcuni dei modi in cui che Windows PowerShell consente di ottenere cose fatto. Viene inoltre illustrato come può pagare per non overthink il problema.

Per parafrasare la domanda, questo lettore aveva un file XML che comprendeva un commento:

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

Come potete vedere, il tag di commento (il "<!-" e la "->") racchiudono un tag XML. Il suo obiettivo era un commento che, così il XML risultante avrebbe l'etichetta "attivo" piuttosto che "ha commentato fuori." Ha iniziato utilizzando Get-Content per leggere il file, ma il cast del risultato come un tipo di dati XML di Windows PowerShell:

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

Quello che non capiscono alcune persone su questo trucco è che forze Windows PowerShell tramite il Framework .NET di Microsoft, per analizzare il file XML e costruire una gerarchia di oggetti che rappresentano il contenuto del file XML. Non è tutto ciò che è diverso dall'utilizzo di Import-CliXML, anche se questo particolare trucco leggerà qualsiasi file XML valido, ben formato. Import-CliXML è destinato a leggere il formato XML specifico creato da Export-CliXML.

Comunque, il problema di trattare il contenuto del file XML è che XML può essere un dolore al collo per lavorare con. Al fine di individuare un commento e un commento, in realtà devi fare un po ' di codifica. E questo è il codice che conosco affatto personalmente.

L'approccio pragmatico

Mi permetta un passo indietro per un momento e offrire un po ' di consulenza filosofica. Mentre ho fatto lo sviluppo di software in passato, non sono mai stato uno sviluppatore professionista, qualificato. Al cuore, sono sempre stato un amministratore. Uno del mio primo posti di lavoro era come un AS / 400 sysop. Amministratori, trovo, sono creature pragmatici. "Vedere il problema, correggere il problema e poi tornare a casa per il giorno," è come spesso descrivere l'atteggiamento generale admin.

Gli sviluppatori, invece, hanno un radicato desiderio di fare ciò che è "giusto". Si potrebbe produrre qualche codice di brutto aspetto mentre sono prototipazione e capire come qualcosa funziona, ma sono quasi sempre tornare indietro e riscrivere o modificare per essere "giusto". Così uno sviluppatore, di fronte alla necessità di modificare il XML come ho descritto, sarebbe probabilmente spendere come necessario per capire il modo "giusto" per eseguire il compito. Che sarebbe probabilmente comportano manipolazione XML via roba di scatola nera .NET Framework XML magico.

Che non è il mio approccio. Semplicemente non hanno quel tipo di tempo. Quello che ho è un modo per ottenere il compito fatto a prescindere. Il mio suggerimento era quello di smettere di trattare il file come XML. Dopo tutto, non abbiamo davvero bisogno di pasticciare con i dati nel file, quindi perché fare Windows PowerShell analizzarlo tutto fuori del formato XML? Abbiamo solo bisogno di fare una piccola modifica semplice del testo crudo:

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

Il lettore ha voluto ogni commento XML rimosso, e questo è quello che la mia soluzione. Semplicemente sembra per ogni istanza dei personaggi di tag di commento e li sostituisce con una stringa vuota. Questo effettivamente rimuove il commento e chiuso il tag XML «attivi» per qualunque processo era effettivamente leggere e tramite file XML.

Quindi la mia soluzione era quella di ignorare il fatto che il file XML. Non ho bisogno di fare nulla "XML-ish." Ho solo bisogno di rimuovere alcuni personaggi. Trattandolo come testo normale (notare che io non cast a [xml] quando si ottiene il contenuto), potrei usare gli operatori di modifica del testo di Windows PowerShell perfettamente in grado di realizzare il compito.

Questa filosofia del mio zecche talvolta persone. A volte si chiedono, "Come è possibile modificare le autorizzazioni di file e cartelle in Windows PowerShell?" Io spallucce e dire, "XCacls." Funziona in Windows PowerShell, so come si usa e si ottiene il lavoro fatto.

Le alternative — Get-ACL e Set-ACL — sono troppo complicate. Essi richiedono di approfondire la conoscenza di un sacco di roba di .NET Framework che, francamente, io non sono interessato a imparare ora. Perché preoccuparsi quando c'è già un modo perfettamente bene di ottenere il lavoro fatto?

Ovviamente, la mia filosofia è condiviso dal team di Windows PowerShell. Perché altrimenti lavorano duramente per assicurarsi che gli eseguibili esterni come XCacls, Ipconfig, Ping e il tutto come lavoro da all'interno di Windows PowerShell? Sapevano che sappiamo già come utilizzare tali strumenti, e facendoli lavorare all'interno di Windows PowerShell ci dà un vantaggio nell'ottenere il lavoro fatto.

Nessuno sta imparando Windows PowerShell "solo perché." Noi imparare perché rende il lavoro più facile. Che succede solo, però, se ancora ci permette di utilizzare gli strumenti che già conosciamo. Siete i Benvenuti in disaccordo con il mio approccio di "vedere il problema, risolvere il problema e andare a casa." Faccio un sacco di persone. Tuttavia, trovo che sia un approccio pratico quando hai solo un lavoro da fare e non si cura di quanto piuttosto o brutto la soluzione è fino a quando il lavoro viene fatto.

Don Jones

Don Jones è un Microsoft MVP Award destinatario e autore di "Imparare Windows PowerShell in un mese di pranzi" (Manning Publications, 2011), un libro progettato per aiutare qualsiasi amministratore diventa efficace con Windows PowerShell. Jones offre anche formazione di Windows PowerShell pubblica e in loco. Contattarlo tramite ConcentratedTech.com o bit.ly/AskDon.

Contenuti correlati