# PowerShell

PowerShell (originalmente llamada Windows PowerShell) es una interfaz de consola (CLI) con posibilidad de escritura y unión de comandos por medio de instrucciones (scripts en inglés). Esta interfaz de consola está diseñada para su uso por parte de administradores de sistemas con el propósito de automatizar tareas o realizarlas de forma más controlada. Originalmente denominada como MONAD en 2003, su nombre oficial cambió al actual cuando fue lanzada al público el 25 de abril de 2006. El 15 de agosto de 2016, Microsoft publicó el código fuente de PowerShell en GitHub y cambió su nombre a PowerShell Core. La versión 6 se ofrece con licencia MIT.

## Requisitos

Requiere la instalación previa del framework .NET versión 2.0 para su funcionamiento. Se presentó junto con el sistema operativo Windows Vista y se incluye también en Windows 7, Windows 8 y Windows 10.
También puede instalarse en sistemas Linux y macOS.

## Funciones

Powershell no solo permite interactuar con el sistema operativo, sino también con programas de Microsoft como SQL Server, Exchange o IIS. La principal utilidad de Powershell es permitir automatizar tareas administrativas al usuario.
El lenguaje de la consola incluye declaración de variables, variables especiales predefinidas, operadores matemáticos (incluyendo igualdades y desigualdades numéricas, manejo de vectores, comparación entre estos, operadores de asignación), vectores asociativos (hashtables), valores booleanos, ciclos y ruptura de los mismos, operadores de expansión para simplificación de ejecuciones complejas (creación de vectores por medio de llamados a procedimientos, creación dinámica de vectores, etc.); comentarios, operadores de comparación binaria, caracteres de escape, orden de ejecución, ciclos del tipo "foreach", creación de procedimientos y funciones, creación de filtros, estructuras condicionales complejas (if/then/else/elseif/switch), operador de invocación dinámica del contenido de variables ($p = "MiProceso" --> &$p ejecuta MiProceso), llamada a métodos de tipo "$p.ToUpper", acceso a propiedades de instancias de objetos, redirección de salida normal de consola a archivos, retorno de valores, manejo de cadenas de caracteres por medio de operadores, manejo de excepciones y conversión explícita de tipos.
Una de las principales funciones de Powershell es tratar de igualar el lenguaje Perl de UNIX, que se considera versátil, potente y con facilidad para interactuar con el sistema operativo. Exchange server 2007 utiliza Powershell internamente. La tendencia es que todas las aplicaciones tengan su sección visual y una opción para ver el código generado en Powershell.

### Características

La característica distintiva de PowerShell es que es un intérprete de comandos orientado a objetos. La información de entrada y de salida en cada etapa del proceso (cmdlet, "comándulo") es un conjunto de instancias de objeto, a diferencia de lo que ocurre con los intérpretes de comandos tradicionales, que solo devuelven y reciben texto.

#### Alias de comandos

En Powershell se pueden crear alias al estilo de Unix, es decir, nombrar de diferentes maneras a los comandos.
Por ejemplo para mostrar directorios se usa dir, ls, gci. El programador puede apodar el comando como quiera. Esto facilita trabajar con el entorno de programación.
Utilizando una única sentencia, mediante Powershell se pueden realizar fácilmente las siguientes acciones:
* Monitorizar contadores.
* Apagar o detener servicios.
* Modificar registros del sistema.

## Versiones
### PowerShell 1.0

PowerShell 1.0 se lanzó en noviembre de 2006 para Windows XP SP2, Windows Server 2003 SP1 y Windows Vista. Es un componente opcional de Windows Server 2008.

### PowerShell 2.0

Windows PowerShell ISE v2.0 en Windows 7, un entorno de desarrollo integrado para los scripts de PowerShell.
PowerShell 2.0 está integrado con Windows 7 y Windows Server 2008 R2 y se lanza para Windows XP con Service Pack 3, Windows Server 2003 con Service Pack 2 y Windows Vista con Service Pack 1.
PowerShell 2.0 incluye cambios en el lenguaje de scripts y en la API de hospedaje; además, incluye más de 240 nuevos cmdlets.

### PowerShell 3.0

PowerShell 3.0 está integrado con Windows 8 y con Windows Server 2012. Microsoft también ha puesto a disposición PowerShell 3.0 para Windows 7 con Service Pack 1, para Windows Server 2008 con Service Pack 1 y para Windows Server 2008 R2 con Service Pack 1.
PowerShell 3.0 es parte de un paquete más grande, Windows Management Framework 3.0 (WMF3), que también contiene el servicio WinRM para apoyar el remoting. Microsoft hizo varias versiones de Community Technology Preview de WMF3. El 2 de diciembre de 2011 se publicó una versión temprana de la Community Technology Preview 2 (CTP 2) de Windows Management Framework 3.0. Windows Management Framework 3.0 se publicó para su disponibilidad general en diciembre de 2012 y se incluye con Windows 8 y Windows Server 2012 de forma predeterminada.

### PowerShell 4.0

PowerShell 4.0 está integrado con Windows 8.1 y con Windows Server 2012 R2. Microsoft también ha hecho que PowerShell 4.0 esté disponible para Windows 7 SP1, Windows Server 2008 R2 SP1 y Windows Server 2012.

### PowerShell 5.0

Windows Management Framework (WMF) 5.0 RTM, que incluye PowerShell 5.0, se lanzó a la web el 24 de febrero de 2016 después de un lanzamiento inicial con un grave bug. Las características clave incluyen cmdlets OneGet PowerShell para soportar la administración de paquetes basada en el repositorio de Chocolatey y la ampliación del soporte para la administración de conmutadores a los conmutadores de red de capa 2.

### PowerShell Core 6.0

PowerShell Core 6.0 se anunció por primera vez el 18 de agosto de 2016, cuando Microsoft dio a conocer PowerShell Core y su decisión de hacer que el producto sea multiplataforma, independiente de Windows, de código libre y abierto. Alcanzó la disponibilidad general el 10 de enero de 2018 para Windows, macOS y Linux. Tiene su propio ciclo de vida de soporte y se adhiere a la política de ciclo de vida de Microsoft que se introduce con Windows 10: sólo la última versión de PowerShell Core es compatible. Microsoft espera lanzar una versión menor para PowerShell Core 6.0 cada seis meses.
El cambio más significativo en esta versión de PowerShell es la expansión a las otras plataformas. Para los administradores de Windows, esta versión de PowerShell carece de nuevas características importantes. En una entrevista con la comunidad el 11 de enero de 2018, se pidió al equipo de PowerShell que enumerara las 10 cosas más emocionantes que sucederían a un profesional de TI de Windows que migrara de Windows PowerShell 5.1 a PowerShell Core 6.0; en respuesta, Angel Calvo de Microsoft sólo pudo nombrar dos: multiplataforma y de código abierto.

### PowerShell Core 6.1

Las nuevas características de PowerShell Core 6.1 incluyen:
* Compatibilidad con los más de 1900 cmdlets existentes en Windows 10 y Windows Server 2019.
* Construido sobre .NET Core 2.1.
* Soporte para las últimas versiones de Windows, macOS y Linux.
* Mejoras significativas en el rendimiento.

### PowerShell Core 6.2

El lanzamiento de PowerShell Core 6.2 está enfocado principalmente en mejoras de rendimiento, corrección de errores, y mejoras menores de cmdlet/idioma que mejoran la calidad de vida de los usuarios.

### PowerShell 7

PowerShell 7 es el producto de reemplazo para los productos PowerShell Core 6.x y para Windows PowerShell 5.1, que es la última versión de Windows PowerShell soportada. Para que PowerShell 7 sea un reemplazo viable para Windows PowerShell 5.1 debe tener casi paridad con Windows PowerShell en términos de compatibilidad con los módulos que se envían con Windows.
Las nuevas características de PowerShell 7 incluyen:
* Construido sobre .NET Core 3.1 (LTS).
* ForEach-Object -Parallel
* Envoltura de compatibilidad con Windows.
* Notificación de nueva versión.
* Nueva vista de error y cmdlet Get-Error.
* Operadores de la cadena de oleoductos (&& y ||).
* ?: operador ternario (a ? b : c).
* Asignación nula y operadores de coalescencia nula (??= y ??)[97].
* Invocación de plataforma Invoke-DscResource (experimental).
* Out-GridView, -ShowWindow y otros cmdlets GUI heredados están de vuelta en Windows.