¿Qué es Windows PowerShell y qué come? Parte 1: características clave

Históricamente, las utilidades de línea de comandos en sistemas Unix están mejor desarrolladas que en Windows, sin embargo, con el advenimiento de una nueva solución, la situación ha cambiado.

Windows PowerShell permite a los administradores del sistema automatizar la mayoría de las tareas rutinarias. Con su ayuda, puede cambiar la configuración, detener e iniciar servicios, así como realizar el mantenimiento de la mayoría de las aplicaciones instaladas. Sería un error percibir la ventana azul como otro intérprete de comandos. Este enfoque no refleja la esencia de las innovaciones propuestas por Microsoft. En realidad, las posibilidades de Windows PowerShell son mucho más amplias: en una breve serie de artículos trataremos de descubrir cómo la solución de Microsoft difiere de las herramientas más familiares.



Características clave 


Por supuesto, Windows PowerShell es principalmente un shell de comandos con un lenguaje de secuencias de comandos, creado originalmente sobre la base de .NET Framework, y más tarde en .NET Core. A diferencia de los shells que aceptan y devuelven datos textuales, Windows PowerShell funciona con clases .NET que tienen propiedades y métodos. PowerShell le permite ejecutar comandos ordinarios, y también le da acceso a objetos COM, WMI y ADSI. Utiliza varios repositorios, como el sistema de archivos o el registro de Windows, para acceder a los llamados proveedores (proveedores). Vale la pena señalar la capacidad de incrustar componentes ejecutables de PowerShell en otras aplicaciones para implementar varias operaciones, incluidas a través de la interfaz gráfica. Lo contrario también es cierto: muchas aplicaciones de Windows proporcionan acceso a sus interfaces de administración a través de PowerShell. 

Windows PowerShell le permite:

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

Shell y entorno de desarrollo


Hay Windows PowerShell de dos maneras: además del emulador de consola con un shell de comandos, hay un entorno de secuencias de comandos integrado (ISE). Para acceder a la interfaz de línea de comandos, simplemente seleccione el acceso directo apropiado en el menú de Windows o ejecute powershell.exe desde el menú Ejecutar. Aparece una ventana azul en la pantalla, significativamente diferente en capacidades del cmd.exe antediluviano. Hay autocompletado y otras características familiares para los usuarios de shells de comandos para sistemas Unix.



Para trabajar con el shell, debe recordar algunas combinaciones de teclas:

  • Las flechas hacia arriba y hacia abajo se desplazan por el historial para repetir comandos escritos anteriormente;
  • La flecha derecha al final de la línea recicla el comando anterior carácter por carácter;
  • Ctrl + Inicio elimina el texto escrito desde la posición del cursor hasta el comienzo de la línea;
  • Ctrl + Fin elimina el texto del cursor al final de la línea.

F7 muestra una ventana con los comandos escritos y le permite seleccionar uno de ellos. La selección del mouse, copiar y pegar, posicionamiento del cursor, eliminación, retroceso también funcionan en la consola, todo lo que queramos.


Windows PowerShell ISE es un entorno de desarrollo completo que admite pestañas y resaltado de sintaxis con un editor de código, diseñador de comandos, depurador incorporado y otras alegrías de programación. Si escribe un guión en el editor del entorno de desarrollo después del nombre del comando, obtendrá todos los parámetros disponibles con un tipo en la lista desplegable. Puede iniciar PowerShell ISE a través de un acceso directo desde el menú del sistema o utilizando el archivo ejecutable powershell_ise.exe.


Cmdlets 


En Windows PowerShell, el llamado cmdlets Estas son clases especializadas .NET que contienen diversas funcionalidades. Se nombran de acuerdo con el principio "Acción-Objeto" (o "Verbo-Sustantivo, si le gusta más), y un conectivo separado por guiones se asemeja al predicado y sujeto en oraciones de lenguajes naturales. Por ejemplo, Get-Help literalmente significa "Get-Help" o, en el contexto de PowerShell: "Show-Help". De hecho, este es un análogo del comando man en sistemas Unix y los manuales en PowerShell deben solicitarse de esta manera, y no llamando a cmdlets con la tecla --help o /? No se olvide de la documentación en línea de PowerShell: Microsoft lo tiene bastante detallado.

Además de Get, se usan otros verbos (y no solo verbos, estrictamente hablando) en cmdlets para indicar acciones. En la lista a continuación damos algunos ejemplos:

Add- add;
Clear- limpio
Enable- habilitar;
Disable- apagar;
New- crear;
Remove- Eliminar;
Set- pedir;
Start- correr;
Stop- detener;
Export- exportación;
Import- Importar.

Hay cmdlets de sistema, usuario y opcionales: como resultado de la ejecución, todos devuelven un objeto o una matriz de objetos. No distinguen entre mayúsculas y minúsculas, es decir desde el punto de vista del intérprete de comandos, no hay diferencia entre Get-Help y get-help. El carácter ';' se usa para la separación, pero es obligatorio establecerlo solo si se ejecutan varios cmdlets en la misma línea. 

Los cmdlets de Windows PowerShell se agrupan en módulos (NetTCPIP, Hyper-V, etc.), y el cmdlet Get-Command existe para buscar por objeto y acción. Puedes mostrar ayuda de esta manera:

Get-Help Get-Command



De manera predeterminada, el comando muestra una breve ayuda, pero si es necesario, los parámetros (argumentos) se pasan a los cmdlets. Utilizándolos, por ejemplo, puede obtener ayuda detallada (-Parámetro detallado) o completa (-Parámetro completo), así como mostrar ejemplos (-Parámetro de ejemplos):

Get-Help Get-Command -Examples

La ayuda en Windows PowerShell se actualiza con el cmdlet Update-Help. Si la línea de comando es demasiado larga, los argumentos del cmdlet se pueden transferir al siguiente escribiendo el carácter de servicio `` '' y presionando Enter; simplemente termine de escribir el comando en una línea y continúe en otra.

A continuación se muestran algunos ejemplos de cmdlets comunes: 

Get-Process- muestra los procesos en ejecución en el sistema;
Get-Service- mostrar servicios y su estado;
Get-Content- Muestra el contenido del archivo.

Para los cmdlets de uso frecuente y las utilidades externas en Windows PowerShell, hay sinónimos cortos: alias (del inglés Alias). Por ejemplo, dir es un alias de Get-ChildItem. La lista de sinónimos contiene análogos de comandos de sistemas Unix (ls, ps, etc.), y el comando de ayuda llama al cmdlet Get-Help. Se puede ver una lista completa de sinónimos con el cmdlet Get-Alias:


Scripts, funciones, módulos e idioma de PowerShell


Los scripts de Windows PowerShell se almacenan como archivos de texto sin formato con la extensión .ps1. No puede iniciarlos con un doble clic: debe hacer clic con el botón derecho en el menú contextual y seleccionar el elemento "Ejecutar en PowerShell". Desde la consola, deberá especificar la ruta completa al script o ir al directorio apropiado y escribir el nombre del archivo. La ejecución de los scripts también está limitada por la política del sistema, y ​​para verificar la configuración actual, puede usar el cmdlet Get-ExecutionPolicy, que le dará uno de los siguientes valores:

Restricted- la ejecución de scripts está prohibida (de manera predeterminada);
AllSigned- solo se permite el lanzamiento de scripts firmados por un desarrollador de confianza;
RemoteSigned- permitido ejecutar scripts firmados y personalizados;
Unrestricted- permitido ejecutar cualquier script.

El administrador tiene dos opciones. Lo más seguro implica firmar scripts, pero esta es una hechicería bastante seria: trataremos en los siguientes artículos. Ahora seguiremos el camino de menor resistencia y cambiaremos la política:

Set-ExecutionPolicy RemoteSigned


Para hacer esto, PowerShell tendrá que ejecutarse como administrador, aunque con un parámetro especial puede cambiar la política para el usuario actual.

Las secuencias de comandos se escriben en un lenguaje de programación orientado a objetos, cuyos comandos se nombran de acuerdo con el mismo principio que los cmdlets discutidos anteriormente: "Action-Object" ("Verbo-Sustantivo"). Su objetivo principal es la automatización de las tareas de administración, pero es un lenguaje interpretado completo que tiene todas las construcciones necesarias: ramificación condicional, bucles, variables, matrices, objetos, manejo de errores, etc. Cualquier editor de texto es adecuado para escribir scripts, pero es más conveniente iniciar Windows PowerShell ISE.

Puede pasar parámetros al script, hacerlos obligatorios y también establecer valores predeterminados. Además, Windows PowerShell le permite crear funciones y llamarlas exactamente de la misma manera que los cmdlets: para esto, utiliza la construcción de funciones y las 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. Puede verlos con el siguiente comando:

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

Transportadores


En el último ejemplo, utilizamos un diseño familiar para los usuarios de shells para sistemas Unix. En Windows PowerShell, la barra vertical también le permite transferir la salida de un comando a la entrada de otro, pero hay una diferencia significativa en la implementación de la canalización: no se trata de un conjunto de caracteres o texto. Los cmdlets integrados o las funciones definidas por el usuario devuelven objetos o matrices de objetos, y también pueden recibirlos en la entrada. Al igual que el shell Bourne y sus muchos seguidores, PowerShell simplifica las tareas complejas con una tubería.

El ejemplo más simple de una tubería se ve así:

Get-Service | Sort-Object -property Status


Primero, se ejecuta el cmdlet Get-Service y luego todos los servicios que recibe se pasan al cmdlet Sort-Object para ordenarlos por la propiedad Status. A qué argumento se pasa el resultado de la sección anterior de la canalización depende de su tipo; por lo general, este es un objeto de entrada. Este problema se discutirá con más detalle en un artículo del lenguaje de programación PowerShell. 

Si lo desea, puede continuar la cadena y pasar el resultado de Sort-Object a otro cmdlet (se ejecutarán de izquierda a derecha). Por cierto, el diseño familiar de Windows para la salida de paginación también está disponible para todos los Unixoides: 

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

Ejecución de tareas en segundo plano 


Muy a menudo, debe ejecutar un determinado comando en segundo plano para no esperar el resultado de su ejecución en una sesión de shell. En Windows PowerShell, hay varios cmdlets para este caso:

Start-Job- iniciar una tarea en segundo plano;
Stop-Job- detener la tarea en segundo plano;
Get-Job- Ver una lista de tareas en segundo plano;
Receive-Job- ver el resultado de la tarea en segundo plano;
Remove-Job- eliminación de la tarea en segundo plano;
Wait-Job- Transfiera la tarea en segundo plano a la consola.

Para comenzar una tarea en segundo plano, usamos el cmdlet Start-Job e indicamos entre llaves un comando o un conjunto de comandos:

Start-Job {Get-Service}


Las tareas en segundo plano en Windows PowerShell pueden manipularse conociendo sus nombres. Primero, aprenda a mostrarlos:

Get-Job


Ahora mostramos el resultado de Job1:

Receive-Job Job1 | more


Es muy simple

Ejecución remota de comandos


Windows PowerShell le permite ejecutar comandos y scripts no solo en la computadora local, sino también en la computadora remota, e incluso en un grupo completo de máquinas. Hay varias formas de hacerlo:

  • Muchos cmdlets tienen un parámetro -ComputerName, pero de esta manera fallará, por ejemplo, al crear una tubería;
  • El cmdlet le Enter-PSSessionpermite crear una sesión interactiva en una máquina remota; 
  • Con el cmdlet, Invoke-Commandpuede ejecutar comandos o scripts en una o más computadoras remotas.

Versiones de PowerShell


Desde su primer lanzamiento en 2006, PowerShell ha cambiado mucho. La herramienta está disponible para muchos sistemas que se ejecutan 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 se lanzó el 10 de enero de 2018. Es más probable que las secuencias de comandos escritas para versiones anteriores funcionen en versiones posteriores, pero puede haber problemas con la transferencia inversa, ya que a lo largo de los años de desarrollo, han aparecido una gran cantidad de cmdlets nuevos en PowerShell. Puede encontrar la versión del shell instalada en la computadora usando la propiedad PSVersion de la variable incorporada $ PSVersionTable:

$PSVersionTable.PSVersion


También puede usar el cmdlet:

Get-Variable -Name PSVersionTable –ValueOnly


Lo mismo se hace con el cmdlet Get-Host. De hecho, hay muchas opciones, pero para usarlas debe aprender el lenguaje de programación PowerShell, que haremos en el próximo artículo

Resumen 


Microsoft ha logrado crear un shell de comandos realmente potente con un entorno integrado conveniente para desarrollar scripts. Se diferencia de los medios que nos son familiares en el mundo de Unix por su profunda integración con los sistemas operativos Windows, así como con el software para ellos y la plataforma .NET Core. PowerShell puede llamarse un shell orientado a objetos porque los cmdlets y las funciones definidas por el usuario devuelven objetos o matrices de objetos y pueden recibirlos en la entrada. Creemos que todos los administradores de servidores de Windows deberían poseer esta herramienta: ha pasado el tiempo en que podrían prescindir de la línea de comandos. Se necesita especialmente una consola avanzada en nuestro VPS de bajo costo que ejecuta Windows Server Core , pero esa es otra historia.

2: Windows PowerShell
3: ,
4: ,

Source: https://habr.com/ru/post/undefined/


All Articles