2011-02-09 50 views
12

Soy un programador competente de C# y un novato en powershell. Me pregunto, ¿para qué sirve? ¿Es más una herramienta de programador o administrador?¿Para qué sirve PowerShell?

Por favor, comparta su experiencia. ¿Cuándo sería más fácil escribir un script usando ensamblajes .NET que una herramienta C#? ¿Para qué tareas reales de producción lo usa?

UPD: Tal vez la pregunta debería ser "lo que es bueno para en comparación con C# no por lotes".

+0

posible duplicado de [¿Cómo se utiliza PowerShell? ] (http://stackoverflow.com/questions/8722/how-do-you-use-powershell) – Helen

Respuesta

5

Escribiendo una herramienta C# normalmente necesita configurar un proyecto de Visual Studio (o un proyecto en otro IDE, o si lo hace "manualmente", necesita al menos un script de compilación para llamar al compilador C#). Si para una tarea específica esto parece ser demasiado sobrecargado, y solo necesita una solución simple de un archivo-fuente-y-programa-es-todo-en-uno, un script de PowerShell puede ser la mejor alternativa.

EDIT: Estoy haciendo mi CW respuesta, por lo que cualquiera pueda añadir aquí algunas de las razones por las que puede preferir un script de PowerShell agains una solución C#:

  • que no tiene Visual Studio (o cualquier otro C# IDE) instalado en su máquina, o no está acostumbrado (como muchos administradores de sistemas)
  • el programa es tan pequeño que no necesita un depurador, algunos resultados simples de la consola lo harán
  • no desea mantener más de un archivo
  • no desea separar los parámetros de configuración de su herramienta en un archivo de configuración separado
  • cuando puede definir tareas individuales, pero no puede determinar un flujo de trabajo exacto, una combinación de script y C# es ideal. La creación de cmdlets o proveedores en C# le da a sus scripts acceso a todo de una manera general, y PowerShell se convierte en el pegamento, lo que hace que el flujo de trabajo sea flexible ante situaciones nuevas.
  • tiene varias ideas de diseño que compiten entre sí y desea probar rápidamente las posibilidades de viabilidad. El tipado suave y la arquitectura de tuberías de Powershell hacen que sea fácil ignorar muchos de los caprichos de la estructura de control y escribir detalles y llegar al corazón de un algoritmo.
  • (...) añadir razones más aquí
+0

Gracias, doc. Pero generalmente no es un problema encender Visual Studio. ¿No es mucho más fácil depurar C# que powershell? – zzandy

+1

Puede que no sea un problema para usted, pero para un administrador de red, puede ser un verdadero dolor: la cantidad de sobrecarga se hace más autoritaria a medida que los problemas se hacen más pequeños y simples. –

+1

También puede depurar PowerShell. La instalación viene con el "Windows PowerShell ISE", que es un IDE con depuración. Por supuesto, no es tan cómodo como Visual Studio, pero es suficiente para depurar scripts de PowerShell. –

2

Powershell es una poderosa herramienta que puede utilizar para realizar varias tareas diferentes que de otro modo requerirían que el usuario use el mouse ... (no solo).

Por ejemplo, las últimas versiones de los productos de Microsoft Server como servidor SQL, Exchange, SharePoint y así sucesivamente exponen a un rico conjunto de APIs que podría utilizar con facilidad con Powershell, de esta manera, con PowerShell que puede por ejemplo:

  • adjuntar, separar, hacer una copia de seguridad, restaurar una base de datos en SQL Server;
  • manipular buzones de Exchange;
  • y mucho más.

todas las cosas que antes no podías hacer simplemente desde un archivo por lotes.

+0

¿Entonces es bueno para la automatización? ¿Pero qué hay de comparar PowerShell con C#? ¿Qué pasa si no es un problema escribir algún código en C# qué ventajas ofrece powershell? – zzandy

+0

no tiene sentido comparar powershell con C#, ¿comparamos el símbolo del sistema con Pascal? Cuando puede automatizar algo con un pequeño script de powershell, puede hacerlo y no tiene que preocuparse de crear una aplicación, una consola o una ventana, para compilarla, compilarla y depurarla para lograr los mismos resultados. –

2

Es un poco más una herramienta de administrador de sistemas, pero solo ligeramente.

Los lugares que elegiría PowerShell sobre, digamos, C# son:

  • cualquier lugar que desee ejecutar una aplicación externa
  • cualquier lugar que desee para hacer frente a una API de automatización ...
  • archivos en cualquier lugar que estés manipulando

lo usamos para automatizar nuestras pruebas de aceptación durante la noche, compilar los resultados, actualizar una página web con las últimas y correo electrónico los equipos en cuestión.

Tenga en cuenta que NuGet utiliza Powershell para automatizar la adición/eliminación de paquetes a su solución. (Y en el proceso expone una consola de PowerShell para que automatice Visual Studio usted mismo).

Además, la capacidad de desarrollar un script de forma interactiva, en lugar del ciclo write -> debug -> fix que obtiene en un lenguaje compilado, puede es rápido para derribar secuencias de comandos simples.

7

cuando sería más fácil escribir un guión utilizando ensamblados .NET que una herramienta C# ?

Ah, claro, eso es todo. PowerShell salva la brecha entre los archivos por lotes y el mundo .NET. PowerShell responde la pregunta: "¿Qué pasaría si escribiera un nuevo intérprete de comandos que tuviera todo el poder de .NET, fuera totalmente dinámico y tuviera la mayoría de las cosas que la gente quiere en un shell de comandos?"

Entonces, ¿cuándo usa PowerShell sobre C#?Es mucho más conveniente para aplicaciones pequeñas que integran u organizan otras aplicaciones; es más conveniente porque no tiene que compilarlo, Y ya tiene una forma estándar de pasar datos a otras secuencias de comandos y scriptlets, lo cual es fácil para personas (que conocen PowerShell) para entender.

2

He creado dos comandos de PowerShell puros y he creado algunos en C#. Normalmente, los que he hecho en C# son más complejos, y me resulta más fácil construir varios archivos con clases, etc. para mantener el código de una mejor manera.

También es más fácil crear pruebas para proyectos C# en comparación con PowerShell, ya que C# es un ciudadano de primera clase en Visual Studio, y PowerShell no lo es.

La ventaja de hacerlo todo en PowerShell es que cualquiera puede editar sus scripts.

+0

+1 para 'cualquiera puede editar tus guiones'. Buena observación. – akauppi

+0

@akauppi gracias :) –

2

creo que es mejor que C# para las cosas pequeñas, que podrían requerir cambios frecuentes. En general, lo uso para partes de mi compilación y configuración de automatización. La razón por la que prefiero PowerShell es que mis scripts casi siempre necesitan algunos dll de Visual Studio. Ahora, si se trata de una aplicación C#, cuando salga una nueva versión de Visual Studio necesito volver a compilar usando las nuevas referencias y luego publicarlas en todas partes. Sin embargo, si se trata de Powershell, simplemente puedo cambiar la ruta de acceso del dll en el script y todo está bien. Además, me resulta mucho más fácil trabajar con el análisis de archivos y otro tipo de trabajo tipo perl-ish.

7

Soy un desarrollador de C# y he estado usando PowerShell desde los días beta cuando aún se llamaba Monad. También desarrollé bastante en UNIX, incluida la automatización/scripting con Korn Shell. Para mí, PowerShell fue un regalo del cielo porque me estaba cansando de los pequeños desajustes de impedancias de Korn Shell con Windows. Por ejemplo, la especificación de una ruta compartida de red fue particularmente gruesa "\\\\\\server\\\\share" IIRC.Fue un juego de adivinanzas cuántas veces escapaste una barra invertida dependiendo de cuántas veces se evalúa la cadena.

utilizo PowerShell para una gran cantidad de tareas de automatización tales como:

  • grepping a través de un directorio de origen grande donde quiero buscar contenido de los archivos csproj.
  • Una vez modifiqué más de 260 archivos VCPROJ con un script de PowerShell.
  • Otra vez tuve que crear un grupo de nuevos proyectos de C# cada uno con un buen número de propiedades de proyecto para ser configuradas, incluyendo una gran cantidad de ajustes de Análisis de Código. Escribí un guión para tomar un archivo de proyecto de C# y hacer todos los ajustes para mí. Me ahorró mucho tiempo y más importancia, me salvó cometer muchos errores y/u olvidarme de establecer ciertas configuraciones
  • Consultas TFS (usando el cmdlet TFPT PowerShell) como buscar conjuntos de cambios recientes con una palabra determinada en el comentario de verificación .
  • Eliminación de todos los archivos temporales (directorios bin/obj, archivos suo, etc.) dentro de una jerarquía de carpetas determinada.

Para reemplazar personalizados utilidades de línea de comandos:

Puede utilizar PowerShell como una gran manera de reemplazar todas esas pequeñas utilidades de línea de comandos que se utiliza para escribir. Piensa sobre esto. PowerShell es un lenguaje de script razonablemente poderoso que le da acceso a la mayor parte de .NET Framework. Se destaca especialmente en el análisis de parámetros, es decir, tiene un motor de análisis de parámetros incorporado que le proporciona parámetros parciales, parámetros posicionales, parámetros opcionales, parámetros de conmutación, parámetros de enlace de tuberías, validación de parámetros y más. Ahora considere cuánto código en su utilidad típica de línea de comandos está dedicado al análisis de parámetros frente a la funcionalidad real. Casi he dejado de escribir utilidades de línea de comandos (a menos que sean particularmente complicadas, entonces no se puede vencer al depurador VS). Y dejo que PowerShell maneje todo el análisis de parámetros para mí. Y con PowerShell 2.0 es extremadamente fácil agregar documentación/uso a su utilidad simplemente decorando su script con algunos comentarios formateados apropiadamente.

También uso PowerShell como .NET REPL:

  • Elimina la necesidad de crear ConsoleApplication59 sólo para ver lo que hace una cadena de formato, por ejemplo, Simplemente voy a mi indicador de PowerShell y pruebo algo como "{0,20:F1}" -f 41.22.

También puede aprovechar fácilmente el host del motor PowerShell dentro de su propia aplicación C#. Esto es útil si proporciona características a sus usuarios finales que le gustaría hacer secuencias de comandos de secuencias de comandos. Puede escribir esas características como un cmdlet de PowerShell (en C#). Esos cmdlets se pueden utilizar directamente desde la línea de comandos y si aloja PowerShell en su aplicación GUI, a continuación, puede acceder a ese mismo conjunto de código a partir de ahí por ejemplo:

private bool VerifyPowerShellScriptSignature(string path) 
    { 
     using (var runspaceInvoker = new RunspaceInvoke()) 
     { 
      Collection<PSObject> results = 
       runspaceInvoker.Invoke("Get-AuthenticodeSignature " + path); 
      Signature signature = results[0].BaseObject as Signature; 
      return signature == null ? false : 
           (signature.Status == SignatureStatus.Valid); 
     } 
    } 
+0

PowerShell 2.0 también agrega el súper poderoso cmdlet Add-Type, que le permite a uno integrar el código CLR compilado JIT en una variedad de idiomas directamente en PowerShell; iguala agrega la posibilidad de P/Invoke! –

+0

+1 Excelente publicación. Buena descripción de cómo Powershell puede ser útil para desarrolladores de .net –