Estoy debatiendo si debo aprender PowerShell, o simplemente seguir con los scripts Cygwin / Perl / Unix, etc.
El beneficio de PowerShell sería que los scripts podrían ser utilizados más fácilmente por los compañeros de equipo que no tienen Cygwin; Sin embargo, no sé si realmente estaría escribiendo tantos scripts de propósito general, o si la gente incluso los usaría.
Las secuencias de comandos de Unix son tan poderosas, ¿PowerShell se acerca lo suficiente como para justificar el cambio?
Estas son algunas de las cosas específicas (o equivalentes) que estaría buscando en PowerShell:
unix
shell
powershell
Andy White
fuente
fuente
Respuestas:
Las herramientas son solo herramientas.
Ayudan o no.
Necesitas ayuda o no la necesitas.
Si conoce Unix y esas herramientas hacen lo que necesita que hagan en Windows, entonces usted es un tipo feliz y no hay necesidad de aprender PowerShell (a menos que quiera explorar).
Mi intención original era incluir un conjunto de herramientas de Unix en Windows y terminar con esto (algunos de nosotros en el equipo tenemos profundos antecedentes de Unix y una buena dosis de respeto por esa comunidad).
Lo que encontré fue que esto realmente no ayudó mucho. La razón de esto es que AWK / grep / sed no funciona contra COM , WMI , ADSI , el Registro, el almacén de certificados, etc., etc.
En otras palabras, UNIX es un ecosistema completo autoajustado alrededor de archivos de texto. Como tal, las herramientas de procesamiento de texto son efectivamente herramientas de gestión. Windows es un ecosistema completamente diferente autoajustado en torno a API y objetos. Por eso inventamos PowerShell.
Lo que creo que encontrarás es que habrá muchas ocasiones en que el procesamiento de texto no te dará lo que quieres en Windows. En ese punto, querrás elegir PowerShell. NOTA: no es un acuerdo de todo o nada. Dentro de PowerShell, puede llamar a sus herramientas de Unix (y usar su proceso de texto o el procesamiento de texto de PowerShell). También puede llamar a PowerShell desde sus herramientas de Unix y obtener texto.
Una vez más, no hay religión aquí, nuestro enfoque es darle las herramientas que necesita para tener éxito. Es por eso que nos apasiona tanto la retroalimentación. Háganos saber dónde nos estamos cayendo en el trabajo o dónde no tiene una herramienta que necesita y la pondremos en la lista y lo buscaremos.
Honestamente, nos estamos cavando de un hoyo de 30 años, por lo que nos llevará un tiempo. Dicho esto, si elige la versión beta de Windows Server 2008 / R2 y / o las versiones beta de nuestros productos de servidor, creo que se sorprenderá de lo rápido que se llena ese vacío.
Con respecto al uso, hemos tenido más de 3.5 millones de descargas hasta la fecha. Eso no incluye a las personas que lo usan en Windows Server 2008, porque está incluido como un componente opcional y no necesita una descarga.
V2 se enviará en todas las versiones de Windows. Estará activado de forma predeterminada para todas las ediciones, excepto Server core, donde es un componente opcional. Poco después de que se envíe Windows 7 / Windows Server 2008 R2, haremos que V2 esté disponible en todas las plataformas, Windows XP y superior. En otras palabras, su inversión en aprendizaje será aplicable a una gran cantidad de máquinas / entornos.
Un ultimo comentario. Si / cuando comienzas a aprender PowerShell, creo que estarás bastante feliz. Gran parte del diseño está muy influenciado por nuestros fondos de Unix, por lo que, si bien somos bastante diferentes, lo recogerás muy rápidamente (después de que hayas insinuado que no es Unix :-)).
Sabemos que las personas tienen un presupuesto muy limitado para el aprendizaje, es por eso que somos muy duros con respecto a la coherencia. Aprenderás algo y luego lo usarás una y otra vez.
¡Experimentar! ¡Disfrutar! ¡Contratar!
fuente
tar -c . | gzip > package.tar.gz
directamente en PowerShell, o sufrirá. Ver brianreiter.org/2010/01/29/…Select-String
El cmdlet y el-match
operador trabajan con expresiones regulares. También puede utilizar directamente el soporte de expresiones regulares de .NET para una funcionalidad más avanzada.Sort-Object
es más poderoso (de lo que recuerdo * nix'ssort
). Permitir la ordenación multinivel en expresiones arbitrarias. Aquí el mantenimiento de PowerShell del tipo subyacente ayuda; por ejemplo, unaDateTime
propiedad se ordenará como unDateTime
sin tener que garantizar el formato en un formato ordenable.Select-Object -Unique
En términos de la amplitud de las bibliotecas de soporte específicas de dominio de Perl: no está cerca (todavía).
Para la programación general, PowerShell es ciertamente más coherente y consistente, y más fácil de extender. La única brecha para la mezcla de texto es algo equivalente al
..
operador de Perl .Ha pasado bastante tiempo desde que usé AWK (debe ser> 18 años, ya que más tarde usé Perl), así que realmente no puedo comentar.
[Véase más arriba]
La fortaleza de PowerShell aquí no es tanto lo que puede hacer con los objetos del sistema de archivos (y obtiene información completa aquí,
dir
devolucionesFileInfo
uFolderInfo
objetos según corresponda) es que ese es el modelo de proveedor completo.Puede tratar el registro, el almacén de certificados, SQL Server, el caché RSS de Internet Explorer, etc., como un espacio de objetos navegable por los mismos cmdlets que el sistema de archivos.
PowerShell es definitivamente el camino a seguir en Windows. Microsoft lo ha convertido en parte de sus requisitos para futuros productos no domésticos. De ahí un rico soporte en Exchange, soporte en SQL Server. Esto solo se va a expandir.
Un ejemplo reciente de esto es el TFS PowerToys. Muchas operaciones de clientes TFS se realizan sin tener que iniciar tf.exe cada vez (lo que requiere una nueva conexión de servidor TFS, etc.) y es notablemente más fácil de procesar aún más los datos. Además de permitir un amplio acceso a toda la API del cliente TFS con mayor detalle que el expuesto en Team Explorer de TF.exe.
fuente
sed 's/pattern/replacement/' file
que es aproximadamentegc file | %{$_ -replace 'pattern','replacement'}
, y de manera similar para awk:awk 'BEGIN {} /pat1/ {action1} /pat2/ {action2} END {}' file
es aproximadamente{BEGIN {}; switch -r -c -file file { 'pat1' {action1} 'pat2' {action2}}; END{};}
Como alguien cuya carrera se centró en el desarrollo empresarial de Windows desde 1997 hasta 2010, la respuesta obvia sería PowerShell por todas las buenas razones dadas anteriormente (por ejemplo, es parte de la estrategia empresarial de Microsoft; se integra bien con Windows / COM / .NET; y el uso de objetos en lugar de archivos proporciona un modelo de codificación "más rico"). Por esa razón, había estado usando y promocionando PowerShell durante los últimos dos años más o menos, con la creencia expresa de que estaba siguiendo la "Palabra de Bill".
Sin embargo, como pragmático, ya no estoy seguro de que PowerShell sea una gran respuesta. Si bien es una excelente herramienta de Windows y proporciona un paso muy necesario para llenar el vacío histórico que es la línea de comandos de Windows, a medida que todos observamos el control de Microsoft sobre el deslizamiento de la informática de consumo, parece cada vez más probable que Microsoft tenga una batalla masiva por delante para mantener su sistema operativo como importante para la empresa del futuro.
De hecho, dado que encuentro que mi trabajo es cada vez más en entornos heterogéneos, me resulta mucho más útil usar scripts de Bash en este momento, ya que no solo funcionan en Linux, Solaris y Mac OS X, sino que también funcionan con el ayuda de Cygwin en Windows.
Entonces, si crees que el futuro del sistema operativo es mercantilizado en lugar de monopolizado, entonces parece tener sentido optar por una estrategia de herramienta de desarrollo ágil que se mantenga alejada de las herramientas propietarias cuando sea posible. Sin embargo, si ve que su futuro está dominado por todo lo que es Redmond, entonces elija PowerShell.
fuente
He usado un poco de PowerShell para la automatización del script. Si bien es muy agradable que el entorno parezca haber sido pensado mucho más que los shells de Unix, en la práctica el uso de objetos en lugar de flujos de texto es mucho más complicado, y muchas de las instalaciones de Unix que se han desarrollado en los últimos 30 años. todavía faltan años.
Cygwin sigue siendo mi entorno de scripting preferido para los hosts de Windows. Ciertamente supera las alternativas en términos de hacer las cosas.
fuente
Hay muchas respuestas geniales aquí, y aquí está mi opinión. PowerShell está listo si estás ... Ejemplos:
grep = " Select-String -Pattern "
sort = "Ordenar-Objeto"
uniq = " Get-Unique "
file = " Get-Item "
cat = " Obtener contenido "
Perl / AWK / Sed no son comandos, sino utilidades, por lo tanto, difíciles de comparar, pero puedes hacer casi todo en PowerShell.
fuente
sls
,sort
,gu
,gi
,gc
, respectivamente. Nombres largos legibles que completan con tabulación y nombres cortos que se pueden escribir en un sistema. Eso es un progreso fácil de usar para ti.Get-Content
escat
, por lo que para ese no hay ninguna diferencia entre Cygwin / Unix y PowerShell. Desafortunadamente, en la mayoría de los casos, la documentación de Microsoft para los cmdlets carece de información sobre los alias, pero se genera una lista de todos los alias medianteGet-Alias
una sesión de PowerShell. El alias de "Get-Unique" es "gu", por lo que es más corto que el de Cygwin / Unix.Hace poco comencé a incursionar en PowerShell con algún grado de seriedad. Aunque durante los últimos siete años he trabajado en un entorno casi exclusivamente basado en Windows, vengo de un fondo Unix y me encuentro constantemente tratando de "Unix-fy" mi experiencia de interacción en Windows. Es frustrante por decir lo menos.
Es justo comparar PowerShell con algo como Bash , tcsh o zsh ya que las utilidades como grep , sed , awk , find , etc. no son, estrictamente hablando, parte del shell; siempre serán, sin embargo, parte de cualquier entorno Unix. Dicho esto, un comando de PowerShell como Select-String tiene una función muy similar a grep y está incluido como un módulo central en PowerShell ... por lo que las líneas pueden ser un poco borrosas.
Creo que la clave es la cultura y el hecho de que los conjuntos de herramientas respectivos encarnarán sus respectivas culturas:
La interfaz administrativa de Unix (y, durante muchos años, desarrollo) ha sido tradicionalmente la línea de comando y el terminal virtual. Windows comenzó como una GUI y las funciones administrativas solo recientemente comenzaron a dejar de estar basadas exclusivamente en la GUI. Podemos esperar que la experiencia de Unix en la línea de comandos sea más rica y madura dada la importante ventaja que tiene en PowerShell, y mi experiencia coincide con esto. Sobre esto, en mi experiencia:
La experiencia administrativa de Unix está orientada a facilitar las cosas en una cantidad mínima de pulsaciones de teclas; Esto probablemente se deba a la situación histórica de tener que administrar un servidor a través de una conexión de acceso telefónico lenta de 9600 baudios. Ahora PowerShell tiene alias que ayudan mucho a sortear el estándar Verb-Noun bastante detallado , pero conocer esos alias es un poco molesto (¿alguien sabe algo mejor que
alias | where {$_.ResolvedCommandName -eq "<command>"}
:?).Un ejemplo de la rica forma en que se puede manipular la historia:
iptables
Los comandos a menudo son largos y repetirlos con ligeras diferencias sería un dolor si no fuera por una de las muchas características de la manipulación del historial incorporadas en Bash , por lo que insertar una regla de iptables como la siguiente:iptables -I camera-1-internet -s 192.168.0.50 -m state --state NEW -j ACCEPT
una segunda vez para otra cámara ("
camera-2
"), es solo un caso de emisión:!!:s/-1-/-2-/:s/50/51
lo que significa "ejecutar el comando anterior, pero sustituir
-1-
con-2-
y50
con51
.La experiencia Unix está optimizada para mecanógrafos táctiles; uno puede hacer casi todo sin abandonar la posición de "hogar". Por ejemplo, en Bash , al usar las asociaciones de teclas de Emacs (sí, Bash también admite las vinculaciones vi ), el ciclo a través del historial se realiza usando Ctrl-Py Ctrl-Nmientras se mueve al inicio y al final de una línea se usa usando Ctrl-Ay Ctrl-Erespectivamente ... y definitivamente no termina ahí Pruebe incluso la navegación más simple en la consola PowerShell sin moverse de la posición de inicio y tendrá problemas.
La cultura de Windows, al menos en términos de API del sistema, está impulsada en gran medida por los marcos de soporte, a saber, COM y .NET , ambos altamente estructurados y basados en objetos. Por otro lado, el acceso a las API de Unix ha sido tradicionalmente a través de una interfaz de archivo (
/dev
y/proc
) o llamadas de biblioteca de estilo C (no orientadas a objetos). No sorprende entonces que las experiencias de secuencias de comandos coincidan con sus respectivos paradigmas del sistema operativo. PowerShell está estructurado por naturaleza (todo es un objeto) y basado en archivos Bash y sus amigos. La API estructurada que está a disposición de un programador de PowerShell es enorme (que coincide esencialmente con la inmensidad del conjunto existente de interfaces COM y .NET estándar).En resumen, aunque las capacidades de secuencias de comandos de PowerShell son posiblemente más poderosas que Bash (especialmente si considera la disponibilidad de .NET BCL ), la experiencia interactiva es significativamente más débil, especialmente si lo hace desde un teclado completamente controlado. , perspectiva basada en consola (como lo son muchas cabezas Unix).
fuente
alias -Definition *property
(o cualquier otro patrón)? Creo que el problema con su respuesta es que está combinando el shell y la consola: recuerde que tiene una opción de consolas con diferentes opciones de edición. Deliberadamente dejaron rota la edición de la consola de DOS para alentar a las personas a usar otras consolas como ISE.!!
ejemplo se puede escribir en Powershell como(h -c 1) -replace '-1-','-2-' -replace '50','51' | iex
pero es más fácil subir la flecha y editar para un solo comando. Si quieres hacerlo a través de muchos comandos, creo que Powershell ganaría. Para repetir 10 comandos que terminan en el comando # 255 con sus ediciones:(h -c 10 -id 255) -replace '-1-','-2-' -replace '50','51' | iex
también el historial de Powershell le permite hacer cosas inauditas en shells de Linux; si se pregunta retrospectivamente cuánto tiempo tardó en ejecutarse un comando:h -id 20 | select { $_.EndExecutionTime - $_.StartExecutionTime }
fc -e "sed -i -e 's/-1-/-2-/g' -e 's/50/51/g'" 10 255
No soy un usuario de PowerShell con mucha experiencia de ninguna manera, pero la pequeña parte de la que estuve expuesto me impresionó mucho. Puede encadenar los cmdlets integrados para hacer casi cualquier cosa que pueda hacer en un indicador de Unix, y hay algo adicional para hacer cosas como exportar a CSV, tablas HTML y para trabajos de administración de sistemas más detallados. .
Y si realmente necesita algo como sed , siempre hay UnixUtils o GnuWin32 , que puede integrar con PowerShell con bastante facilidad.
Como usuario de Unix desde hace mucho tiempo, sin embargo, tuve algunos problemas para acostumbrarme al esquema de nombres de comandos, y ciertamente me habría beneficiado más si supiera más .NET.
Así que, en esencia, digo que vale la pena aprenderlo si solo Windows no plantea un problema.
fuente
Si te gustan los scripts de shell, ¡te encantará PowerShell!
Comience en una visita guiada de Microsoft Command Shell (Ars Technica).
fuente
'
(comillas simples). Para lo de las comillas dobles, lo mismo, usewrite-output 'this is a "test"'
. La pregunta que está señalando es para Regex y el escape para regex es válido en todas partes. Powershell también tiene cadenas Here-Strings / verbatim. ¡Incluso Java no tiene estos! Intenta escapar de la expresión regular en Java. Y a veces no usas literalpath. Lo usas cuando lo necesitas. LiteralPath trata los caracteres comodín textualmente y no los expande. Lo usas cuando tus archivos lo tienen. Te da más opciones.write-output "this is a `"test`""
funciona. Solo use en`
lugar de `\`. regex :: escape existe para ayudarte a que no te pierdas las cosas de escape. No es necesario usarlo. Está pensando que las opciones adicionales que existen para ayudarlo y evitar errores son inconsistencias.Como mis experimentos recientes me llevaron a profundizar en las llamadas de PowerShell y .NET, debo decir que PowerShell puede reemplazar a Cygwin y Unix shell.
No estoy seguro acerca de Perl, pero dado que PowerShell y Perl están completos en Turing como lenguajes de programación, le doy esto como un sí para reemplazar Perl también.
Una cosa que PowerShell tiene sobre Cygwin y Bash ordinario bajo * nix, es su capacidad de realizar llamadas DLL de espacio aislado, manipulando el sistema operativo a través de llamadas API directas, métodos WMI e incluso objetos COM. ¿Qué le parece iniciar Internet Explorer a través del código y luego hacer lo que quiera con el documento que se muestra, emulando efectivamente un back-end para un servidor web?
¿Qué tal reunir datos de servidores SQL y otros proveedores de datos, analizarlos y exportarlos como CSV, mensajes de correo, texto y en realidad cualquier tipo de formato de archivo existente y no existente? (Con las habilidades adecuadas para crear un archivo válido a partir de los datos recibidos, por supuesto, pero CSV están disponibles).
Y hay una seguridad adicional disponible a través de cmdlets y scripts firmados, políticas de grupo y políticas de ejecución que ayudan a evitar que se ejecute código malicioso en su sistema, incluso si los ejecuta como administrador.
Sobre qué comandos se implementan: la respuesta de Richard los enumera y la capacidad de PowerShell de emular su funcionalidad ya.
Acerca de si PowerShell es fuerte para justificar el cambio, esto es más una cuestión de preferencia personal, aunque a medida que más y más servicios de Windows proporcionan cmdlets de PowerShell para controlarlos, no usar PowerShell con estos servicios presentes se considera un obstáculo. (El servidor Hyper-V es el principal servicio de este tipo, ¡y también proporciona la capacidad de hacer más con los cmdlets de PowerShell que con la GUI!)
Probablemente esta respuesta llegue cinco años tarde, pero aún así, si alguien realiza tareas administrativas o secuencias de comandos generales de varias cosas en Windows, definitivamente debería intentar aprovechar PowerShell para sus propósitos.
fuente
Cuando compare PowerShell con la combinación Cygwin / Perl / Shell, tenga en cuenta que PowerShell solo representa la parte "Shell" de esa combinación.
Sin embargo, puede invocar cualquier comando desde PowerShell tal como lo hace desde cmd.exe o Cygwin. No , no volver a implementar las funciones especificadas, y ciertamente no es comparable a la de Perl.
Es "solo" un shell, pero facilita la programación al proporcionar una interfaz cómoda para el universo .NET.
También tenga en cuenta que PowerShell requiere Windows XP, Windows Server 2003 o superior, lo que puede suponer un problema dependiendo de su infraestructura de TI.
Actualizar:
No tenía idea de qué tipo de debate filosófico provocaría mi respuesta.
Publiqué mi respuesta en el contexto de la pregunta: Compare PowerShell con Cygwin y Perl y Bash.
PowerShell es un shell, ya que no hace una diferencia sintáctica entre los comandos integrados, los comandos, las funciones del usuario y los comandos externos (.exe, .bat, .cmd). Solo invocar métodos .NET difiere al agregar un espacio de nombres o un objeto en la llamada.
Su programabilidad se deriva del marco .NET, no de nada específico del "lenguaje" de PowerShell.
Diría que creo que PowerShell es un "lenguaje de script" tan pronto como Bugzilla o MediaWiki se implementan como scripts de PowerShell que se ejecutan en un servidor web;)
Hasta entonces, disfruta las comparaciones .
fuente
Los cmdlets en PowerShell son muy agradables y funcionan de manera confiable. Su orientación a objetos me atrae mucho ya que soy un desarrollador de Java / C #, pero no es en absoluto un conjunto completo. Dado que está orientado a objetos, se perdió una gran parte de la madurez del flujo de texto del conjunto de herramientas POSIX (
awk
ysed
por nombrar algunos).¡La mejor respuesta que he encontrado al dilema de amar las técnicas OO y amar la madurez en las herramientas POSIX es usar ambas! Un gran aspecto de PowerShell es que hace un excelente trabajo canalizando objetos a flujos estándar. PowerShell utiliza de forma predeterminada una tubería de objeto para transportar sus objetos. Estas no son las transmisiones estándar (salida estándar, error estándar y entrada estándar). Cuando PowerShell necesita pasar la salida a un proceso estándar que no tiene una canalización de objetos, primero convierte los objetos en una secuencia de texto. Como lo hace tan bien, PowerShell es un excelente lugar para alojar herramientas POSIX.
El mejor conjunto de herramientas POSIX es GnuWin32 . La instalación demora más de 5 segundos, pero vale la pena y, por lo que puedo decir, no modifica su sistema (registro,
c:\windows\*
carpetas, etc.), excepto copiar archivos a los directorios que especifique. Esto es muy bueno porque si coloca las herramientas en un directorio compartido, muchas personas pueden acceder a ellas simultáneamente.Instrucciones de instalación de GnuWin32
Descargue y ejecute el exe (es del sitio de SourceForge ) apuntándolo a un directorio adecuado (lo usaré
C:\bin
). Creará unGetGnuWin32
directorio allí en el que ejecutarádownload.bat
, luegoinstall.bat
(sin parámetros), después de lo cual, habrá unC:\bin\GetGnuWin32\gnuwin32\bin
directorio que es la carpeta más útil que haya existido en una máquina con Windows. Agregue ese directorio a su ruta y estará listo para comenzar.fuente
TL; DR: no odio Windows o PowerShell. Simplemente no puedo hacer nada en Windows o en PowerShell.
Personalmente, todavía encuentro PowerShell decepcionante en el mejor de los casos.
~/
debajo de algunos@environment://somejibberish/%user_home%
NTFS sigue siendo un desastre y aparentemente siempre lo será. Buena suerte navegando.
interfaz cmd-esque, El dinosaurio cmd.exe todavía es visible en PowerShell, Editar → Mark sigue siendo la única forma de copiar información, y solo se copia en forma de bloques rectangulares de espacio terminal visible. y Editar → Mark sigue siendo la única forma de pegar cadenas en el terminal.
Pintarlo de azul no lo hace más atractivo. Sin embargo, no me importa que los desarrolladores de Microsoft prueben el color.
Windows siempre se abre en la esquina superior izquierda de la pantalla. Para alguien que usa barras de tareas verticales, esto es increíblemente molesto, especialmente teniendo en cuenta que la barra de tareas de Windows cubrirá la única esquina de la ventana que da acceso a la funcionalidad de copiar / pegar.
No puedo hablar mucho sobre la base de las herramientas que incluye Windows. Dado que existe un conjunto completo de herramientas de CLI de código abierto y de licencia libre, y PowerShell se envía con, que yo sepa, ninguna de ellas es una decepción total.
wget
lleva argumentos aparentemente incomparables a GNU wget. Gracias, un rayo de esperanza portátilmente inútil.&&
operador no se maneja, lo que hace que el comando condicional más simple no sea una cosa.No conozco hombre; Le di una oportunidad, realmente lo hice; Todavía trato de intentarlo con la esperanza de que la próxima vez que lo abra sea menos inútil. No puedo hacer nada en PowerShell, y apenas puedo hacer cosas con un proyecto real para llevar herramientas GNU a Windows.
MySysGit me da el mensaje dinosaurio cmd.exe con un par de herramientas GNU, y todavía es muy decepcionante, pero al final la ruta funciona. Y el comando Git se ejecutará en Git Bash.
Mintty para MySysGit ofrece la interfaz Cygwin sobre el entorno de mysysgit, haciendo que copiar y pegar sea algo (seleccione copiar (mouse), Shift+ Inspara pegar, qué moderno ...). Sin embargo, cosas como
git push
están rotas en Mintty.No me refiero a despotricar, pero aún veo grandes problemas con la usabilidad de la línea de comandos en Windows incluso con herramientas como Cygwin.
PD: el hecho de que se pueda hacer algo en PowerShell no lo hace utilizable . La usabilidad es más profunda que la habilidad y es en lo que tiendo a enfocarme cuando trato de usar un producto como consumidor.
fuente
.
o[
acceder a una propiedad o índice, por lo que no puede simplemente agregar un separador de ruta al final. ¿Qué wget de PowerShell exactamente? ¿Qué POSIX de PowerShell? No está tratando de llevar herramientas gnu a Windows, o ser compatible con bash por cierto.(get-command wg*.exe).Path
. Re: finalización de bash y readline -> leeholmes.com/blog/2012/09/13/… que lleva a github.com/lzybkr/PSReadLineNo he visto que el PowerShell haya despegado realmente, al menos no todavía. Por lo tanto, puede que no valga la pena aprenderlo a menos que otros miembros de su equipo ya lo sepan.
Para su situación, podría estar mejor con un lenguaje de secuencias de comandos que otros podrían respaldar, Perl como mencionó u otros como Ruby o Python.
Creo que mucho depende de lo que necesites hacer. Personalmente, he estado usando Python para mis propios scripts personales, pero sé que cuando empiece a escribir algo que nunca podré transmitir, así que trato de no hacer nada demasiado revolucionario.
fuente
¿Por qué no usar ambos? Llame a los scripts de PowerShell en Cygwin como cualquier otro script interpretado como Perl, etc.
Hago esto lo suficiente como para escribir https://bitbucket.org/jbianchi/powershell para un contenedor Bash para llamar a powershell.exe en Cygwin. Se puede usar como shebang como la primera línea de un script .ps1 powershell.exe (ya que PowerShell también usa "#" como comentario). Ver https://bitbucket.org/jbianchi/powershell/wiki/Home para ver ejemplos
fuente
En un par de líneas, Cygwin y PowerShell son herramientas diferentes, sin embargo, si tiene instalado Cygwin, puede ejecutar los ejecutables de Cygwin dentro de una sesión de PowerShell. Me he acostumbrado tanto a PowerShell que ahora ya no uso grep, sort, awk, etc. Hay alternativas integradas en PowerShell, y si no, puede encontrar un cmdlet.
La herramienta principal que utilizo es ssh.exe, pero dentro de una sesión de PowerShell.
Funciona muy bien
fuente
Encontré que la programación de PowerShell no valía la pena.
Tengo varios años de experiencia con las secuencias de comandos de shell en Unix, pero me resultó enormemente difícil hacer casi cualquier cosa con PowerShell.
Parece que muchas funciones requieren que interrogue la interfaz de administración de Windows y emita comandos similares a SQL para obtener la información que necesita.
Por ejemplo, quería escribir un script para eliminar todos los archivos con un sufijo específico de un árbol de directorios. Bajo Unix, esto sería un simple ...
Después de un par de horas dicking alrededor con
Scripting.FileSystemObject
yWScript.Shell
y la emisión de "SELECT * FROM Win32_ShortcutFile donde unidad = '" & Drive & ' 'Y Path ='' & SearchFolder & "'", finalmente me di por vencido y conformé del Explorador de Windows Búsqueda de mando y solo hazlo manualmente. Probablemente haya alguna forma de hacer lo que quería, pero no vi nada obvio y todos los ejemplos en el sitio de MSDN eran tan triviales que no valían nada.EDITAR Heh, por supuesto, tan pronto como escribí esto, busqué un poco más y encontré lo que me faltaba: la
-recurse
opción del comando remove-item es defectuosa (se revela si la usaget-help remove-item -detailed
).Había estado intentando "remove-item -filter '* .xyz' -recurse" y no funcionaba, así que me di por vencido.
Resulta que necesitas usar
get-childitem -filter '*.xyz' -recurse | remove-item
fuente
También puede intentar ejecutar scripts de Bash en Windows utilizando BashWin en https://github.com/skanga/BashWin .
fuente
PowerShell es muy potente, más potente que las funciones integradas estándar de los shells de Unix (pero solo porque incluye gran parte de la funcionalidad que generalmente se aplica a los subprogramas). Además, tenga en cuenta que se puede escribir applets en cualquier lenguaje .NET, incluyendo IronPython , IronRuby , PerlNET, etc .. o simplemente puede llamar a los comandos de PowerShell de Cygwin, ignorando toda la funcionalidad adicional y funcionará de manera similar a Bash, KornShell , o lo que sea...
fuente