¿Qué es Windows PowerShell y para qué se utiliza? Parte 1: características principales

Históricamente, las utilidades de línea de comandos en sistemas Unix han estado más desarrolladas que en Windows, sin embargo, con la llegada de nuevas soluciones, la situación ha cambiado.

Windows PowerShell permite a los administradores del sistema automatizar la mayoría de las tareas rutinarias. Con ella, se pueden cambiar configuraciones, detener y iniciar servicios, así como mantener la mayoría de las aplicaciones instaladas. Considerar la ventana azul como otro intérprete de comandos sería un error. Este enfoque no refleja la esencia de las innovaciones propuestas por Microsoft. En realidad, las capacidades de Windows PowerShell son mucho más amplias: en una breve serie de artículos intentaremos desglosar en qué se diferencia la solución de Microsoft de las herramientas más familiares.

¿Qué es Windows PowerShell y para qué se utiliza? Parte 1: características principales

Principales características 

Por supuesto, Windows PowerShell es ante todo una consola de comandos con un lenguaje de scripting, originalmente creada sobre la plataforma .NET Framework y más tarde sobre .NET Core. A diferencia de las consolas que reciben y devuelven datos de texto, Windows PowerShell trabaja con clases de .NET, que tienen propiedades y métodos. PowerShell permite ejecutar comandos comunes y también proporciona acceso a objetos COM, WMI y ADSI. Utiliza varios almacenes, como el sistema de archivos o el registro de Windows, para los cuales se han creado lo que se conoce como proveedores. Es importante destacar la posibilidad de incrustar componentes ejecutables de PowerShell en otras aplicaciones para realizar diversas operaciones, incluso a través de una interfaz gráfica. De manera inversa, muchas aplicaciones para Windows ofrecen acceso a sus interfaces de control a través de PowerShell. 

Windows PowerShell permite:

  • Cambiar configuraciones del sistema operativo;
  • Gestionar servicios y procesos;
  • Configurar roles y componentes del servidor;
  • Instalar software;
  • Gestionar software instalado a través de interfaces especiales;
  • Incrustar componentes ejecutables en programas externos;
  • Crear scripts para automatizar tareas de administración;
  • Trabajar con el sistema de archivos, el registro de Windows, el almacén de certificados, etc.

Consola y entorno de desarrollo

Existen dos formas de Windows PowerShell: además del emulador de consola con `command shell`, hay un entorno de scripting integrado (Integrated Scripting Environment — ISE). Para acceder a la interfaz de línea de comandos, basta con seleccionar el acceso directo correspondiente en el menú de Windows o ejecutar `powershell.exe` desde el menú `Ejecutar`. Aparecerá una ventana azul que se diferencia notablemente en capacidades del anticuado `cmd.exe`. Allí hay autocompletado y otras características familiares para los usuarios de interfaces de línea de comandos de sistemas Unix.

¿Qué es Windows PowerShell y para qué se utiliza? Parte 1: características principales

Para trabajar con la consola, hay que recordar algunas combinaciones de teclas:

  • Las flechas hacia arriba y hacia abajo navegan por el historial para repetir comandos previamente introducidos;
  • La flecha hacia la derecha al final de la línea vuelve a escribir el comando anterior carácter por carácter;
  • Ctrl+Home elimina el texto escrito desde la posición del cursor hasta el inicio de la línea;
  • Ctrl+End elimina el texto desde el cursor hasta el final de la línea.

F7 muestra una ventana con los comandos ingresados y permite seleccionar uno de ellos. También se puede seleccionar texto con el ratón, copiar y pegar, posicionar el cursor, eliminar, backspace: todo como a nosotros nos gusta.

¿Qué es Windows PowerShell y para qué se utiliza? Parte 1: características principales
Windows PowerShell ISE es un entorno de desarrollo completo con un editor de código que soporta pestañas y resaltado de sintaxis, un constructor de comandos, un depurador integrado y otras alegrías para programadores. Si en el editor del entorno de desarrollo escribes un guion después del nombre del comando, obtendrás en el menú desplegable todos los parámetros disponibles con la indicación del tipo. Se puede iniciar PowerShell ISE ya sea a través del acceso directo en el menú del sistema o mediante el archivo ejecutable `powershell_ise.exe`.

¿Qué es Windows PowerShell y para qué se utiliza? Parte 1: características principales

Cmdlets 

En Windows PowerShell han aparecido los llamados cmdlets. Son clases especializadas de .NET que incorporan una funcionalidad variada. Están nombrados según el principio de `Acción-Objeto` (o `Verbo-Sustantivo`, si así lo prefieres), y la combinación separada por un guion recuerda al predicado y el sujeto en las oraciones de lenguas naturales. Por ejemplo, `Get-Help` literalmente significa `Obtener-Ayuda` o en el contexto de PowerShell: `Mostrar-Ayuda`. En esencia, esto es análogo al comando `man` en sistemas Unix, y los manuales en PowerShell deben consultarse precisamente así, y no invocando cmdlets con la opción `—help` o `/?`.. No olvides la documentación en línea de PowerShell: la de Microsoft es bastante detallada.

Además de Get, se utilizan otros verbos (y no solo verbos, estrictamente hablando) en los cmdlets para denotar acciones. A continuación, presentamos algunos ejemplos:

Agregar — agregar;
Limpiar — limpiar;
Enable — activar;
Desactivar — desactivar;
Nuevo — crear;
Eliminar — eliminar;
Establecer — establecer;
Iniciar — iniciar;
Stop — detener;
Exportar — exportar;
Importar — importar.

Hay cmdlets del sistema, cmdlets de usuario y cmdlets opcionales: como resultado de la ejecución, todos ellos devuelven un objeto o una matriz de objetos. No son sensibles a las mayúsculas, es decir, para el intérprete de comandos no hay diferencia entre Get-Help y get-help. Se utiliza el símbolo ';' para separarlos, pero debe utilizarse solo si se ejecutan varios cmdlets en una misma línea. 

Los cmdlets de Windows PowerShell se agrupan en módulos (NetTCPIP, Hyper-V, etc.), y existe el cmdlet Get-Command para buscar por objeto y acción. La ayuda sobre este cmdlet se puede mostrar así:

Get-Help Get-Command

¿Qué es Windows PowerShell y para qué se utiliza? Parte 1: características principales

Por defecto, el comando muestra una breve ayuda, pero se pueden pasar parámetros (argumentos) a los cmdlets cuando sea necesario. Con estos parámetros, por ejemplo, se puede obtener una ayuda detallada (parámetro -Detailed) o completa (parámetro -Full), así como mostrar ejemplos en pantalla (parámetro -Examples):

Get-Help Get-Command -Examples

La ayuda en Windows PowerShell se actualiza con el cmdlet Update-Help. Si la cadena de comandos es demasiado larga, los argumentos del cmdlet se pueden trasladar a la siguiente línea, escribiendo el símbolo de escape '`' y presionando Enter; simplemente terminar de escribir un comando en una línea y continuar en otra no funcionará.

A continuación, presentamos algunos ejemplos de cmdlets comunes: 

Get-Process — mostrar los procesos en ejecución en el sistema;
Get-Service — mostrar servicios y su estado;
Get-Content — mostrar el contenido de un archivo.

Para los cmdlets y utilidades externas que se usan con frecuencia en Windows PowerShell, hay sinónimos cortos — alias (del inglés Alias). Por ejemplo, dir es el alias de Get-ChildItem. La lista de sinónimos también incluye análogos de comandos de sistemas Unix (ls, ps, etc.), y el cmdlet Get-Help se invoca con el comando help. Se puede ver la lista completa de sinónimos mediante el cmdlet Get-Alias:

¿Qué es Windows PowerShell y para qué se utiliza? Parte 1: características principales

Scripts, funciones, módulos y el lenguaje PowerShell

Los scripts de Windows PowerShell se guardan como archivos de texto simples con la extensión .ps1. No se pueden ejecutar haciendo doble clic: es necesario hacer clic derecho para abrir el menú contextual y seleccionar la opción «Ejecutar en PowerShell». Desde la consola, se debe indicar la ruta completa al script o cambiar al directorio correspondiente y escribir el nombre del archivo. La ejecución de scripts también está limitada por la política del sistema, y para verificar la configuración actual se puede utilizar el cmdlet Get-ExecutionPolicy, que devolverá uno de los siguientes valores:

Restricted — la ejecución de scripts está prohibida (por defecto);
AllSigned — solo se permite la ejecución de scripts firmados por un desarrollador de confianza;
RemoteSigned — se permite la ejecución de scripts firmados y propios;
Unrestricted — se permite la ejecución de cualquier script.

El administrador tiene dos opciones. La más segura implica firmar los scripts, pero esto es un proceso bastante complejo que abordaremos en artículos futuros. Ahora tomaremos el camino de menor resistencia y cambiaremos la política:

Set-ExecutionPolicy RemoteSigned

¿Qué es Windows PowerShell y para qué se utiliza? Parte 1: características principales
PowerShell deberá ser ejecutado como administrador para esto, aunque con un parámetro especial se puede cambiar la política también para el usuario actual.

Los scripts se escriben en un lenguaje de programación orientado a objetos, cuyas órdenes se nombran de la misma manera que los cmdlets discutidos anteriormente: «Acción-Objeto» («Verbo-Sustantivo»). Su principal objetivo es la automatización de tareas administrativas, pero es un lenguaje interpretado completo que incluye todas las construcciones necesarias: condicionales, bucles, variables, arreglos, objetos, manejo de errores, etc. Se puede utilizar cualquier editor de texto para escribir scripts, pero es más conveniente iniciar Windows PowerShell ISE.

Se pueden pasar parámetros al script, hacerlos obligatorios, y también establecer valores predeterminados. Además, Windows PowerShell permite crear funciones y llamarlas de la misma manera que los cmdlets; para ello se utiliza la construcción Function y llaves. Un script con funciones se llama módulo y tiene la extensión .psm1. Los módulos deben almacenarse en directorios definidos en las variables de entorno de PowerShell. Se pueden ver mediante el siguiente comando:

Get-ChildItem Env:PSModulePath | Format-Table -AutoSize

Conveyores

En el último ejemplo hemos aplicado una estructura familiar para los usuarios de shells de sistemas Unix. En Windows PowerShell, la barra vertical también permite pasar la salida de un comando a la entrada de otro, pero hay una diferencia significativa en la implementación del canal: aquí ya no se trata de un conjunto de caracteres o de algún texto. Los cmdlets integrados o las funciones personalizadas devuelven objetos o matrices de objetos, y también pueden recibirlos como entrada. Al igual que en Bourne shell y sus numerosos seguidores, en PowerShell se simplifica la ejecución de tareas complejas mediante el canal.

El ejemplo más simple de un canal se ve así:

Get-Service | Sort-Object -property Status

¿Qué es Windows PowerShell y para qué se utiliza? Parte 1: características principales
Primero se ejecuta el cmdlet Get-Service, y luego todos los servicios recibidos se pasan a ordenar por la propiedad Status al cmdlet Sort-Object. A qué argumento se pasa el resultado del trabajo del segmento anterior del canal depende de su tipo: generalmente es InputObject. Este tema se tratará más a fondo en un artículo dedicado al lenguaje de programación PowerShell. 

Si se desea, se puede continuar la cadena y pasar el resultado del trabajo de Sort-Object a otro cmdlet (se ejecutarán de izquierda a derecha). Por cierto, a los usuarios de Windows también les resulta familiar la construcción para salida paginada: 

Get-Service | Sort-Object -property Status | more

Ejecución de tareas en segundo plano 

A menudo es necesario ejecutar algún comando en segundo plano para no esperar el resultado de su ejecución en la sesión de la shell. En Windows PowerShell hay varios cmdlets para tal caso:

Start-Job — iniciar una tarea en segundo plano;
Stop-Job — detener una tarea en segundo plano;
Get-Job — ver la lista de tareas en segundo plano;
Receive-Job — ver el resultado de la ejecución de una tarea en segundo plano;
Remove-Job — eliminar una tarea en segundo plano;
Wait-Job — llevar una tarea en segundo plano de vuelta a la consola.

Para iniciar una tarea en segundo plano, utilizamos el cmdlet Start-Job y entre llaves especificamos el comando o conjunto de comandos:

Start-Job {Get-Service}

¿Qué es Windows PowerShell y para qué se utiliza? Parte 1: características principales
Las tareas en segundo plano en Windows PowerShell se pueden manipular conociendo sus nombres. Para empezar, aprendamos a mostrarlas:

Get-Job

¿Qué es Windows PowerShell y para qué se utiliza? Parte 1: características principales
Ahora mostremos el resultado del trabajo de la tarea Job1:

Receive-Job Job1 | more

¿Qué es Windows PowerShell y para qué se utiliza? Parte 1: características principales
Es bastante simple.

Ejecución remota de comandos

Windows PowerShell permite ejecutar comandos y scripts no solo en la máquina local, sino también en una máquina remota e incluso en un grupo completo de máquinas. Para esto, existen varias formas:

  • Muchos cmdlets tienen el parámetro -ComputerName, pero de esa manera no se puede crear un pipeline, por ejemplo;
  • El cmdlet Enter-PSSession permite crear una sesión interactiva en una máquina remota; 
  • Con el cmdlet Invoke-Command puedes ejecutar comandos o scripts en una o varias computadoras remotas.

Versiones de PowerShell

Desde su primer lanzamiento en 2006, PowerShell ha cambiado considerablemente. La herramienta está disponible para muchos sistemas que operan en diferentes plataformas de hardware (x86, x86-64, Itanium, ARM): Windows XP, Windows Server 2003, Windows Vista, Windows Server 2008/2008 R2, Windows 7, Windows 8, Windows 8.1, Windows RT, Windows RT 8.1, Windows Server 2012/2012 R2, Windows 10, Windows Server 2016, GNU/Linux y OS X. La última versión 6.2 fue lanzada el 10 de enero de 2018. Los scripts escritos para versiones anteriores funcionarán con alta probabilidad en versiones más recientes, pero podrían surgir problemas con la retrocompatibilidad, ya que a lo largo de los años se han agregado muchos cmdlets nuevos a PowerShell. Puedes averiguar la versión del shell de comandos instalado en tu computadora utilizando la propiedad PSVersion de la variable integrada $PSVersionTable:

$PSVersionTable.PSVersion

¿Qué es Windows PowerShell y para qué se utiliza? Parte 1: características principales
También se puede usar el cmdlet:

Get-Variable -Name PSVersionTable –ValueOnly

¿Qué es Windows PowerShell y para qué se utiliza? Parte 1: características principales
Lo mismo se hace usando el cmdlet Get-Host. De hecho, hay múltiples opciones, pero para utilizarlas necesitas estudiar el lenguaje de programación PowerShell, lo cual haremos en el próximo artículo. 

Resultados 

A Microsoft le ha logrado crear un shell de comandos realmente potente con un entorno integrado fácil de usar para desarrollar scripts. A diferencia de las herramientas familiares del mundo Unix, se caracteriza por su profunda integración con los sistemas operativos de la familia Windows, así como con el software para ellos y la plataforma .NET Core. PowerShell se puede considerar un shell orientado a objetos, ya que los cmdlets y las funciones de usuario devuelven objetos o matrices de objetos y pueden recibirlos como entrada. Creemos que todos los administradores de servidores en Windows deben dominar esta herramienta: ha pasado el tiempo en que podían prescindir de la línea de comandos. Un shell de consola avanzado es especialmente necesario en nuestros VPS económicos que funcionan con Windows Server Core, pero esa ya es otra historia.

¿Qué es Windows PowerShell y para qué se utiliza? Parte 1: características principales

Solo los usuarios registrados pueden participar en la encuesta. Inicie sesión, por favor.

¿Qué temas deberían abordarse primero en los próximos artículos de la serie?

  • 53,2%Programación en PowerShell123

  • 42,4%Funciones y módulos de PowerShell98

  • 22,1%¿Cómo firmar tus propios scripts?51

  • 12,1%Trabajando con almacenes a través de proveedores (providers)28

  • 57,6%Automatización de la administración de computadoras con PowerShell133

  • 30,7%Gestión de software e integración de componentes ejecutables de PowerShell en productos de terceros71

Votaron 231 usuarios. 37 usuarios se abstuvieron.

Fuente: habr.com

Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS 🔥 Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS | ProHoster