término script reconoce programa nombre función ejecutable como archivo aduser powershell batch-file

script - ¿PowerShell es una buena actualización para un archivo por lotes?



el término no se reconoce como nombre de un cmdlet función archivo de script o programa ejecutable (8)

Paquete nuestras versiones de servidor en archivos zip utilizando un archivo por lotes (Windows), ejecutando la versión de línea de comandos de WinZip. Anteriormente hicimos este tipo de cosas "a mano", pero desarrollé el proceso de automatización con un archivo por lotes.

El archivo por lotes se ha vuelto bastante complicado porque nuestro producto es complicado (es decir, ¿qué secciones estamos lanzando esta vez? ¿Estamos liberando los archivos de configuración también?) Y estoy empezando a encontrarme con algunas limitaciones frustrantes con los archivos por lotes.

¿Sería bueno investigar a PowerShell como una "actualización" del archivo por lotes? ¿O es una exageración completa dado que la mayoría de lo que estaría haciendo es disparar comandos de DOS?

Bono: ¿PowerShell puede consumir ensamblajes .NET? Como en, ¿podría empezar a comprimir con SharpZip?


La respuesta es SÍ: PowerShell puede usar ensamblajes .NET. Hay un poco de negocio divertido involucrado en v1 si necesita conectar delegados y v2 hace eso mucho más limpio.

Simplemente llame a LoadFile / LoadAssembly para obtener las bibliotecas apropiadas en la memoria y listo.

[Reflection.Assembly]::LoadFile(''/path/to/sharpzip.dll'') $zip = new-object ICSharpCode.SharpZipLib.Zip.FastZip $zip.CreateZip(''C:/Sample.zip'', ''C:/BuildFiles/', ''true'', ''^au'') # note - I didn''t actually test this code # I don''t have SharpZip downloaded - just read their reference.

También tenga en cuenta que las extensiones de comunidad de PowerShell son compatibles con varios métodos de compresión como write-zip.


No estoy seguro acerca de PowerShell, pero ¿podría recomendar utilizar algo como IronPython (si quieres tener acceso a las bibliotecas .NET) o python simple? Obtiene un lenguaje de programación completo con muy pocas limitaciones.



Por un lado, si funciona, solo déjalo. Pero parece que esto es algo que agregará a lo largo del tiempo y, por supuesto, su eventual sucesor / compañero de trabajo que necesite editar el archivo por lotes también deberá comprenderlo. Si proviene de un entorno de programación, entonces puede que encuentre que el poder de Powershell hace que su secuencia de comandos sea mucho más corta y fácil de leer / mantener (por ejemplo, incluso si tiene declaraciones completas de if y ciclos de / while). Por otro lado, si no estás demasiado familiarizado con la programación, mucha gente considera que Powershell es un poco intimidante a primera vista.

Con respecto a la parte de .NET, Powershell está construido sobre .NET, así que sí, puede acceder a los ensamblados .NET (pero siempre debe ver si hay un cmdlet disponible primero).

Yo recomendaría un libro llamado "The Powershell Cookbook" de Lee Holmes, publicado por O''Reilly. Proporciona "recetas" que puede usar para tareas comunes; esto probablemente acelerará tu tiempo para implementar el guión, y te enseñará Powershell en el camino.


Debería ver esta presentación / discusión con Jeffrey Snover , creador y arquitecto de PowerShell. Si no te sorprenden los detalles técnicos (muchos momentos "guapos"), te sorprenderá el entusiasmo de Jeffrey :). Una vez que obtenga los conceptos básicos, es fácil ser muy productivo con PowerShell.


Inicialmente, estaba realmente entusiasmado con PowerShell. Finalmente un poderoso shell nativo en Windows. Sin embargo, rápidamente me di cuenta de que, en comparación con su shell unix favorito, PowerShell es demasiado detallado. Incluso hacer cosas simples requiere demasiada mecanografía en comparación con lo que puedes hacer con las herramientas de bash y GNU para Win32.

Me gusta la idea de que el shell conozca diferentes tipos, pero si necesito hacer tanto trabajo adicional, prefiero obtener los datos necesarios con los diversos editores de flujo de Unix.

EDITAR : Acabo de echar otro vistazo a PowerShell, y debo admitir que tiene algunas características realmente útiles que no están disponibles para las herramientas de estilo Unix tradicionales.

Por un lado, PowerShell posee todos los comandos, lo que significa que puede proporcionar un conjunto de características mucho más coherente. Los parámetros se tratan de manera uniforme, puede buscar comandos, parámetros, etc. usando comodines, lo que es realmente útil.

La segunda gran característica es que PowerShell le permite enumerar fuentes que normalmente no están disponibles para transmitir editores, como el registro de Windows, el almacén de certificados, etc. Por supuesto, puede tener herramientas que lo hagan por usted y presentarlo como texto, pero el enfoque de PowerShell es realmente muy elegante.


Intenté reemplazar uno de los largos archivos de compilación que uso con power shell. Lo encontré doloroso: al menos en ese momento, la documentación se enfocaba en la verborrea graciosa y en las cosas buenas y naturales que puedes hacer con ella, pero carecía de la categoría de "hacer cosas simples". Lo hice funcionar, pero el manejo del error fue inestable.

YMMV, prueba PowerShell, puedes disfrutarlo. Pero pruébalo antes de actualizar tus lotes de compilación.

Mi solución: use una aplicación de consola C #. Tengo un registro serio, manejo de excepciones, puedo usar mis funciones de utilidad, y si algo no funciona, tengo un verdadero depurador. Es la primera solución que me gusta modificar.


Si tiene una solución de trabajo, entonces no necesita ir a Powershell. Habiendo dicho eso, si planeas hacer cambios o mejorar el proceso, recomiendo Powershell como el camino a seguir. Powershell puede acceder a ensamblajes .Net ... principalmente. Algunas asambleas están estructuradas de una manera que lo hace más difícil que otras.

Puede consultar aquí algunos recursos si decide consultar PowerShell.