¿Windows PowerShell es tan poderoso como el terminal de Unix / Linux? [cerrado]

45

¿Windows PowerShell es tan poderoso y eficiente como Linux terminal?

La gente sin conexión me dice, sin explicar mucho, que Windows PowerShell es un intento de hacer que los administradores de Unix se sientan más cómodos usando Windows. Pero supongo que se sentirán cómodos solo si tiene (o casi) la misma eficiencia.

kern
fuente
3
Eso es difícil de responder, porque no hay ESO shell de Linux. Hay muchos shells de uso común en Linux (o en general en sistemas * nix). El más utilizado es bash, por lo que es posible que desee preguntar sobre eso. <br> También "poderoso" está muy basado en la opinión.
Kritzefitz
8
People offline tell me ... that Windows Powershell is an attempt to make UNIX administrators feel more comfortable using Windows.Esas personas no han usado Unix ni Powershell.
surfasb
Yo diría que PowerShell es un reconocimiento de algunas áreas de Microsoft de que se equivocaron al no tener un shell potente disponible. Sin embargo, no copia en absoluto el estilo de UNIX. Para conocer PS, realmente hace bien en comprender un poco sobre cómo funciona Windows y cómo funciona .NET.
Julian Knight
Por cierto, Microsoft tenía un shell BASH disponible que formaba parte de un kit de herramientas de migración que supuestamente ayudaba a las personas a pasar de UNIX a Windows Server.
Julian Knight
1
Soy un fanático de Unix desde hace mucho tiempo que prefiere Unix a Windows en la mayoría de los aspectos; sin embargo, PowerShell supera a bash porque uno canaliza objetos que tienen pares clave / valor y no texto puro. Esto lo hace más similar en diseño a jQuery que a bash.
Mario

Respuestas:

56

Bueno, su primer problema es que está comparando un shell (PowerShell) con un terminal. En Linux, un terminal es algo que envía y recibe E / S basadas en caracteres y se supone que tiene un usuario interactivo detrás (en otras palabras, es la aplicación GUI utilizada para contener un shell). Uno de los shells más comunes que se ejecutan en la Terminal de Ubuntu es Bash , pero hay otros.

La gente sin conexión me dice, sin explicar mucho, que Windows PowerShell es un intento de hacer que los administradores de Unix se sientan más cómodos usando Windows.

Realmente, lo correcto es decir que PowerShell es Windows exponiendo gran parte del modelo de objetos WMI , COM y .NET en un entorno de línea de comandos interactivo y programable, y que este entorno de línea de comandos continúa tomando prestados muchos de los conceptos, como las tuberías y redirección de E / S: desde shells de Unix, al igual que el antiguo DOS (2.0 y superior) command.comy lo cmd.exehizo. Las tuberías funcionan con objetos en PowerShell. Puede hacer cosas como crear HTML y posiblemente hojas de cálculo de Excel sobre la marcha si supiera lo suficiente. Sin duda, es una actualización / reemplazo del antiguo cmd.exeshell que no ha cambiado mucho desde Windows NT 4.0 .

Con respecto a la sintaxis, es menos como los shells de Unix (aunque finalmente ninguno de los cmdlets se usa /como un interruptor o indicador de parámetro), pero hay muchos alias para los comandos clásicos de Unix, como ingresar lsen una ventana de PowerShell dir. Pero estos son solo alias ("Get-Alias" enumera estos?).

Con respecto a la capacidad de PowerShell, realmente tenía una capacidad similar, de manera solo con script , de VBScript y CScript , aunque ambos son anteriores a .NET.

Una cosa que las personas de Unix no tienen que hacer cuando usan Bash la mayor parte del tiempo es estar íntimamente familiarizados con el modelo de objeto posiblemente muy elaborado de un programador u objeto, que se requiere para muchas tareas avanzadas y simples de PowerShell. Pero esto solo es posible porque existe una convención clara de salida de texto directo para muchos comandos POSIX estándar . Windows no ha tenido esta tradición: parece preferir que use una mmcconsola para tareas de administración, con comandos agregados aquí y allá a lo largo de los años. Por otra parte, muchas utilidades Unix conocidos son complejos y requieren algún estudio antes de usar - rsync, wgety muchos otros. La eficiencia es probablemente una función de cuán bien se conoce la herramienta que están utilizando más que cualquier otra cosa.

LawrenceC
fuente
8
+1 por mencionar que PowerShell expone .NET a la consola y como host de secuencias de comandos. Expone el poder de muchas bibliotecas clave de Windows para ser utilizadas en las secuencias de comandos. Los casos de uso entre los dos pueden ser similares, el estilo es totalmente diferente.
Julian Knight
3
+1 por mencionar que un terminal contiene un shell. He usado Windows y Linux durante mucho tiempo, pero nunca tuve a nadie que dijera la diferencia tan claramente.
Tyler Collier
26

Windows PowerShell y Unix shell son dos cosas diferentes con ventajas en ambos.

Unix (shell) tiene la filosofía de que todo es un archivo. Se puede acceder a la entrada y salida de un comando Unix como un archivo. Esto hace que el comando de encadenamiento sea realmente simple y reutilizar la salida de un comando por otro es el poder del shell de Unix.

Con Windows PowerShell, hasta donde yo sé, todo es un objeto. Puede pasar el resultado de un comando a otro como un objeto. Esto puede ser realmente poderoso, pero no tiene el simple concepto de Unix.

No creo que PowerShell sea tan eficiente como un shell de Unix, pero otros creen que lo es.

Pero la comparación es discutible, porque Windows no es un sistema * nix, por lo tanto, los conceptos * nix no se aplican. En comparación con MS-DOS , PowerShell es una gran mejora.

Biapy
fuente
44
El todo es un archivo que no tiene nada que ver con el shell, es una cosa del núcleo.
terdon
3
Es cierto, pero impacta en cómo está diseñado el shell de Unix.
Biapy
@terdon: Así es, pero el shell funciona muy bien con esto. Porque sigue siendo el shell que reconoce símbolos como |, <o >.
Kritzefitz
1
La gente sigue hablando de estos objetos en PowerShell. Al estar acostumbrado a cmd.exe y bash (u otros shells) solamente, ¿puede elaborar, tal vez con un simple ejemplo?
Luc
55
Sin alejarlo de esta página, cuando canaliza cosas en los sistemas * nix en el lado derecho de la tubería, espera texto simple, por ejemplo --- historial | grep cp --- devolverá solo líneas que contengan cp. Por otro lado, cuando se canalizan cosas en PS en el lado derecho, se obtiene un objeto, con propiedades como esta --- Get-History | Where-Object {$ _. CommandLine -eq "cp"} --- $ _ es cada objeto, CommandLine es la propiedad, -eq es igual y finalmente la cadena cp.
Desconocido el