.net - for - powershell unix
¿Cómo se usa PowerShell? (14)
Windows PowerShell salió el año pasado y recibió excelentes críticas de muchos bloggers .net (me viene a la mente Hanselman ). Parecía ser promocionado como una gran utilidad nueva que de alguna manera hizo que todo lo que pudieras hacer en la línea de comando fuera más fácil e integrado con .Net. Sin embargo, cuanto más leo sobre él, más parece ser una herramienta que es genial para los profesionales de TI, y no es muy útil para los desarrolladores.
¿Utiliza PowerShell en su trabajo de desarrollo? ¿Si es así, cómo? ¿Vale la pena aprender?
Nota: Después de ver las respuestas hasta el momento, creo que es válido concluir que PowerShell puede ser muy útil para un desarrollador de .Net. Sin embargo, no hay una respuesta más abajo que pueda etiquetar como respuesta (así que por favor, perdónenme por no hacerlo). Estoy votando cada respuesta que he encontrado útil.
@EdSwangren: si tiene que trabajar principalmente en una plataforma de Windows y trabajar en el espacio de .NET, recomiendo de todo corazón dedicar tiempo a aprender sobre PowerShell. Puede aprovechar su experiencia y código .NET existente, funciona con COM, WMI y ADSI. Le permite acceder a casi todo en la plataforma de Windows (y eso es solo V1). V2 está en desarrollo activo (CTP2 está disponible ahora) e incluirá más comunicación remota, enrutamiento STA y muchas otras mejoras.
Muchos proveedores también son compatibles con PowerShell: desde / n Software que proporciona cmdlets de red, hasta Citrix y VMWare que proporcionan api de administración a través de PowerShell.
Aunque todavía no aprendí cómo usarlo completamente, soy fanático ya que es compatible con la mayoría (si no con todos) de los comandos de Unix con los que estoy familiarizado para navegar usando una línea de comando. Si tiene experiencia con * nix y está desarrollando en Windows, le recomendaría usarlo simplemente porque solo tendrá que recordar un conjunto de comandos.
Sin embargo, tome lo que digo con un grano de sal. Cuando se trata de construir y compilar, utilizo la funcionalidad de línea de comando.
Definitivamente vale la pena aprender. ¿Alguna vez convierte texto? ¿Alguna vez manipulas XML? ¿Alguna vez automatizaste algo? Ejemplo simple Alguien le proporciona un archivo delimitado por comas y necesita extraer algunos campos para importarlo a otra herramienta / base de datos o crear una lista para su programa.
Si el csv tiene los nombres de campo en la primera línea del archivo, puede hacer lo siguiente en Powershell:
$Data = import-csv "something.csv"
A continuación, puede consultar sus datos utilizando los nombres de campo. Si tuviera un campo llamado SSN, podría decir $ Data [n] .SSN. También puede conectar el comando import-csv a algo que procesa los datos, incluida la exportación como XML / html o lo que desee con solo unos pocos comandos. Powershell está lleno de cosas como esta.
Es una herramienta que le brinda un tremendo acceso a un montón de cosas en su estación de trabajo y servidores, incluida la biblioteca .NET completa. Es una herramienta que no está dirigida a un tipo de persona. Quizás es solo que los tipos de Admin se han dado cuenta rápidamente de lo útil que es. Lo uso todos los dias.
Para responder realmente a la pregunta, la utilizo para automatizar las cosas que hago todos los días. Intento convertirlo en mi único lenguaje de scripting, reemplazando las cosas que hice en perl, python, vbscript, .bat / .cmd y uno de los pocos programas de utilidad / conversión que crearía.
Lo uso bastante para cosas de IT Pro (para las que es brillante), pero no creo que lo haya usado demasiado para el desarrollo, ocasionalmente para probar rápidamente algo como un String.Format. Algo que haré es desarrollar los comandos de PowerShell para algunas de nuestras aplicaciones, para permitir que los administradores realicen tareas como la administración de usuarios a través de PowerShell, pero no creo que esto sea realmente lo que usted quiere decir.
Lo uso muy poco para el trabajo de desarrollo real. Lo he usado para configurar directorios virtuales automáticamente y ejecutar un scipt que configura IIS con la misma configuración en todas nuestras máquinas de desarrollo
Lo uso para automatizar tantas cosas como pueda. Un ejemplo es la automatización de interfaz de usuario web , para facilitar el desarrollo / prueba de aplicaciones.
también lo uso para generar archivos de entrada aleatorios para varios programas. Por ejemplo, una aplicación está esperando un archivo XML, y tengo un script para compilar ese archivo con valores aleatorios y una identificación única basada en la hora actual.
No lo uso mucho, pero lo uso todos los días.
Lo uso para el inicio de múltiples procesos. y por algo que cmd no puede hacer.
Me parece que WPS es una forma de hacer que tu vida sea más fácil para hacer las cosas que necesitas. No creo que vaya a encontrar WPS integrado en decir Firefox o Quicken, pero esos equipos pueden usarlo para hacer esas cosas ... en resumen, "WPS no hace que su programa, WPS hace que su programa sea más fácil". ; o)
Nunca se usa como parte de mi función de desarrollo, pero de vez en cuando obtengo una tarea en la que escribiría un pequeño programa para automatizar, que ahora me obligo a hacer en PowerShell y lleva menos tiempo.
Por ejemplo, recientemente cambié cientos de miles de archivos de un servidor a otro usando xcopy y olvidé establecer el atributo para preservar las fechas de creación en los archivos. Powershell al rescate. En diez minutos, tuve un guión escrito y probado que copiaba las fechas de creación sin tener que volver a copiar los archivos.
Personalmente, estoy usando Python para automatizar tareas, usando WMI si es necesario. Creo que esta combinación cubre la mayoría de mis necesidades.
Probé PowerShell, me parece bien, pero no vale la pena aprender una herramienta completamente nueva. Además de eso, hay excelentes recursos en línea para dominar PowerShell si lo necesita o desea (PowerShell Live) , o incluso recipes para realizar tareas sin tener que pasar toda la curva de aprendizaje por usted mismo.
Puedes odiar a Powershell, y aun así puede ser increíblemente útil para ti. Lo uso para pequeños pero importantes tipos de cosas de una línea o en guiones muy pequeños. Realmente no se puede comparar con C # así que tan pronto como haya alguna complejidad o reutilización de potencial significativo en absoluto, cambio a C #. Además, lo importante es que Powershell es tan funky que QUIERO recrear soluciones desde cero cada vez, de lo contrario me olvido de las peculiaridades, de las cuales hay muchas. ¡He escuchado a otras personas decir esto también!
Ejemplos de lo que es realmente bueno para:
Procesamiento de texto ad hoc. Ocasionalmente, la gente me entrega un gran archivo de datos o SQL, y quieren que se manipule en una forma diferente, a veces de maneras realmente complicadas. Esto solo me ha ahorrado una increíble cantidad de tiempo. A menudo involucra muchos adhoc one-liners y archivos intermedios. Ahora que la gente sabe que puedo hacer esto, tienden a entregarme esos proyectos. O en algunos casos están tan impresionados que aprenden Powershell por sí mismos.
Cuando estoy en el sitio de un cliente y necesito desesperadamente automatizar algo, y es la única herramienta que puedo y / o tengo acceso a mis manos.
Pequeñas secuencias de comandos para iniciar sesión en sitios web y navegar a la página en la que estoy interesado o en el que estoy trabajando. Nunca me registro manualmente en un sitio web que estoy desarrollando. Trivial, pero esa es una tarea cerebral repetitiva menos molesta de la que tengo que preocuparme.
One-liners para copiar archivos y proyectos y buscar y reemplazar.
Pequeños guiones para hacer construcciones, si hay complicaciones inusuales involucradas.
Etc. Es probable que tenga pequeñas peculiaridades en su sistema, donde necesita detener / iniciar un servicio para arreglar algo más, o lo que sea.
Recientemente terminé la versión 1 de un proyecto que hospedaba un tiempo de ejecución de PowerShell para ejecutar tareas en sistemas remotos. No estoy de acuerdo sinceramente con que PowerShell no sea una herramienta de desarrollo.
Como producto basado en .NET, es un análogo directo a la programación .NET. Los programas enteros de .NET se pueden crear prototipos en PS, así como los pequeños oneliner para probar la funcionalidad de los métodos ... etc. Que los arquitectos del lenguaje para PS diseñaron específicamente la sintaxis de PS para que sea cercana a C #, significa que hay muy poco cambio de contexto cuando escribo scripts PS y código C # (algo que tuve que hacer mucho recientemente). Está aprovechando su conocimiento ya ganado con los lenguajes .NET, usando PS.
Como una herramienta de automatización, es excelente. Tiene acceso a WMI, ADO, ADSI, .NET, COM nativamente, y además puede soldarse por puntos para funcionar con cualquier otra cosa. Esto solo hace que cualquier automatización de Windows sea más fácil y más potente. La cantidad de acceso al sistema es detenida por algunos otros lenguajes (VBscript, Python) pero la facilidad de uso del lenguaje y el beneficio del framework .NET significa que algunos scripts PS están vinculando el código existente (reutilización del código) en lugar de perdiendo el tiempo escribiendo otra rutina de compresión de archivos (por ejemplo ...)
Ya hay proyectos por ahí que están creando herramientas de construcción (psake viene a la mente) para facilitar la vida del desarrollador. Los proyectos como las extensiones de comunidad de Powershell muestran las potentes capacidades de extensión que los desarrolladores normales de todos los días pueden lograr. Estoy de acuerdo con algunos de los carteles anteriores, considero que se ha hecho algo para configurar entornos de compilación o trabajar con datos para tareas de desarrollo, se puede hacer con PS, si no más rápido / más fácil / mejor, pero igual de bien.
James
Soy un administrador de oficio y recién estoy comenzando en el mundo de "Dev", pero veo que PowerShell puede ser muy útil para los desarrolladores de varias maneras.
- Automatización de tareas -> Lee Holmes (un desarrollador del equipo de PowerShell) publicó una prueba de concepto llamada BgShell, que básicamente era el tiempo de ejecución de PowerShell alojado en una aplicación de formularios de Windows que escuchaba las pulsaciones de teclas e iniciaba acciones escritas en PowerShell basadas en ellas . También incluyó una cierta automatización del portapapeles.
- Acceso rápido al framework .NET. No es necesario que compile y ejecute algo o use otro programa como el Compilador de fragmentos para probar algunas funcionalidades. Cargue el ensamblaje en su sesión de PowerShell e interactúe con él. Obtienes toda la capacidad de descubrimiento de PowerShell (como Get-Member) para explorar tu objeto.
- Fácil de construir lenguajes específicos de dominio. James Kovacs escribió un lenguaje de script de compilación simple con PowerShell llamado Psake.
- Puede proporcionar un lenguaje de scripting para su aplicación. Dado que PowerShell es parte de los 09 Criterios de ingeniería comunes, muchas aplicaciones de Microsoft tendrán interfaces para PowerShell, y la familiaridad con la sintaxis del lenguaje crecerá. Puede aprovechar ese conocimiento integrando el tiempo de ejecución de PowerShell en su aplicación y proporcionando una interfaz de scripting a sus usuarios, eligiendo a qué objetos tendrán acceso.
- En la misma línea, si necesita crear una interfaz de línea de comando para su aplicación, PowerShell proporciona una gran parte de la plomería subyacente necesaria para analizar argumentos y otras tareas básicas, dejando solo la lógica de negocios para que usted escriba, y proporcionando una interfaz coherente con otras aplicaciones (por ejemplo, si tiene cuentas de usuario que necesitan ser administradas (que aún no se integran con Active Directory, un administrador podría (usando Quest AD Cmdlets y su interfaz de aplicaciones) Get-QADUser | Nuevo -MyApplicationUser y listo. El equipo de Exchange 2007 hizo esto muy bien. Toda la funcionalidad está basada en los cmdlets de PowerShell, la GUI llama a los cmdlets y muestra al usuario lo que se está ejecutando, para que puedan construir scripts basados en eso.
- ¡Es genial! En aproximadamente 250 líneas (incluyendo comentarios), Rob Foust y Jeff Hicks escribieron un sniffer de red en PowerShell. Más fácil de usar que WinDump para la resolución de problemas ligera.
- Comunidad: hay una gran comunidad centrada en PowerShell, incluidos los desarrolladores. Obtenga más información en PowerShellCommunity.org.
Utilizo PoSH para cualquier trabajo de ''repetición'' que tengo que hacer para administrar redes, dominios, computadoras, usuarios de AD, edición de texto, búsqueda de archivos, migraciones de servidores de archivos, monitoreo y ¡también para divertirme!