Compartir a través de


Windows PowerShell: A veces, el texto es mejor

No tienes que overthink el problema cuando usted puede usar Windows PowerShell para hacer las cosas rápidamente y fácilmente.

Don Jones

Tras un año de tomar su Windows PowerShell preguntas, me pareció una buena idea revisar algunas de las primeras preguntas. Este uno de los primeros días realmente destaca algunas de las maneras de Windows PowerShell le ayuda a obtener cosas hecho. También se muestra cómo se puede pagar para no overthink el problema.

Parafraseando la pregunta, este lector tuvo un archivo XML que incluía un comentario:

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

Como puede ver, las etiquetas de comentario (el "<!--" y el "-->") adjuntar una etiqueta XML. Su objetivo era un comentario que, por lo que el XML resultante tendría la etiqueta "activo" en lugar de "comentado." Comenzó utilizando Get-Content para leer en el archivo, pero convertir el resultado como un tipo de datos XML de Windows PowerShell:

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

Lo que algunas personas no entienden acerca de este truco es que obliga a Windows PowerShell, a través de Microsoft .NET Framework, para analizar el archivo XML y construir una jerarquía de objetos que representa el contenido del archivo XML. No es todo lo que diferente del uso de importación-CliXML, aunque este truco particular leerá cualquier archivo XML válido, correcto. Importación-CliXML está diseñado para leer el formato XML específico creado por exportación-CliXML.

De todos modos, el problema con tratar el contenido del archivo XML es XML puede ser un dolor en el cuello para trabajar con. Con el fin de localizar un comentario y un comentario, realmente tienes que hacer un poco de codificación. Y este es el código que conozco no personalmente.

El enfoque pragmático

Permítanme dar un paso atrás por un momento y ofrecer un poco de asesoramiento filosófico. Si bien he hecho el desarrollo de software en el pasado, nunca he sido un desarrollador profesional, capacitado. En el corazón, siempre he sido un admin. Uno de mis primeros trabajos fue como un AS / 400 sysop. Administradores, encuentro, son criaturas pragmáticos. "El problema, corrija el problema y luego ir a casa para el día," es cómo se suele describir la actitud de la administración general.

Los desarrolladores, por otro lado, tienen un arraigado deseo de hacer lo "correcto". Podría producir algún código mirando feo mientras que son prototipos y averiguar cómo funciona algo, pero casi siempre volver y reescribir o retocarlo para ser «derecho». Así que un desarrollador, ante la necesidad de modificar el XML como he descrito, probablemente pasaría como tarda para averiguar la manera "correcta" para realizar la tarea. Ello implicaría probablemente manipular el XML a través de cosas mágicas de caja negra para el XML de .NET Framework.

Ese no es mi enfoque. Simplemente no tengo ese tipo de tiempo. Lo que tengo es una manera de conseguir la tarea independientemente. Mi sugerencia era dejar de tratar el archivo como XML. Después de todo, realmente no necesita meterse con cualquiera de los datos en el archivo, así ¿por qué que Windows PowerShell analizarlo todo de formato XML? Sólo tenemos que hacer un poco simple modificación del texto sin formato:

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

El lector quería cada comentario XML quitado, y eso es lo que mi solución. Simplemente se busca cada instancia de los caracteres de la etiqueta de comentario y se reemplaza con una cadena vacía. Esto quita el comentario con eficacia y hace la etiqueta XML adjunta "activo" para cualquier proceso fue realmente leer y utilizar ese archivo XML.

Así que mi solución fue pasar por alto el hecho de que el archivo XML. No necesitaba hacer nada "XML-ish." Sólo necesitaba eliminar algunos de los caracteres. Por tratarlo como texto sin formato (aviso que yo no convierte en [xml] cuando el contenido), pude utilizar los operadores de manipulación de texto perfectamente capaces de Windows PowerShell para realizar la tarea.

Esta filosofía de minas a veces garrapatas personas. A veces se preguntan, "¿Cómo puede usted modificar los permisos de archivos y carpetas en Windows PowerShell?" Voy a encogerse y decir, "XCacls." Se ejecuta en Windows PowerShell, sé cómo usarla y consigue el trabajo hecho.

Las alternativas — Get-ACL y Set-ACL — son demasiado complicados. Requieren un conocimiento más profundo de un montón de cosas de .NET Framework que, francamente, no estoy interesado en aprender ahora. ¿Por qué molestarse cuando ya hay una manera perfecta de hacer el trabajo?

Obviamente, mi filosofía es compartida por el equipo de Windows PowerShell. ¿Por qué más trabajaban arduamente para asegurarse de que ejecutables externos como XCacls, Ipconfig, Ping y como todo trabajo desde dentro de Windows PowerShell? Ellos sabían que ya sabemos cómo utilizar esas herramientas, y haciéndolos trabajar dentro de Windows PowerShell nos da una ventaja para conseguir nuestros trabajos.

Nadie está aprendiendo Windows PowerShell "porque." Lo aprendemos porque hace nuestro trabajo más fácil. Esto sólo sucede, aunque, si todavía nos permite utilizar las herramientas que ya sabemos. Le invitamos a estar en desacuerdo con mi acercamiento a "ver el problema, corregir el problema y vaya hogar." Mucha gente hace. Sin embargo, considero que es un enfoque práctico cuando sólo tienes un trabajo que hacer y no le importa cómo bastante o feo la solución mientras se realiza el trabajo.

Don Jones

Don Jones es un receptor de Microsoft MVP Award y autor de "Aprender Windows PowerShell en un mes de comidas" (Manning Publications, 2011), un libro diseñado para ayudar a cualquier administrador en vigencia con Windows PowerShell. Jones también ofrece formación pública y en el sitio Windows PowerShell. Contactar con él a través de ConcentratedTech.com o bit.ly/AskDon.

Contenido relacionado