Llegamos a ustedes gracias a:



Reportajes y análisis

Vuélvase pro: La guía del usuario de PowerShell

[21/10/2016] Si ha luchado con Windows 10, sin duda ha oído hablar de PowerShell. Si ha tratado de hacer algo elegante con Win7/ 8.1 recientemente, probablemente se haya topado con PowerShell. Después de años de depender de la línea de comandos de Windows y archivos estirados por lotes, es el momento de fijar su mirada en algo más potente, más adaptable -mejor.

PowerShell es una enorme adición a la caja de herramientas de Windows, y puede provocar un poco de miedo, dada su enormidad. ¿Es un lenguaje de script, una consola de comandos? ¿Tiene que enlazar un cmdlet con una instancia clase .Net para que se ejecute con los proveedores? ¿Y dado que todos los documentos de soporte hablan de administradores - tengo que ser un administrador profesional de Windows para hacer uso de ella?

Relájese. PowerShell es poderosa, pero no tiene que ser intimidante.

La siguiente guía está dirigida a aquellos que han ejecutado uno o dos comandos de Windows, o un archivo por lotes. Considérelo como una transición paso a paso de un curioso de PowerShell a conocedor de PowerShell.

Paso 1: Haga que destaque

Lo primero que necesita en sí es PowerShell. Si está utilizando Windows 10, ya tiene PowerShell 5 -la última versión- instalado. (La actualización de aniversario de Win10 tiene 5.1, pero no sabrá la diferencia con la actualización 5.0 de otoño). Windows 8 y 8.1 vienen con PowerShell 4, lo cual es lo suficientemente bueno para empaparse en la materia. La instalación de PowerShell en Windows 7 no es difícil, pero se necesita un cuidado especial -y necesita instalar .Net Framework por separado. JuanPablo Jofre detalla cómo instalar WMF (Windows Management Framework) 5.0, que incluye PowerShell, además de herramientas que probablemente no utilice al principio, en MSDN.

PowerShell ofrece dos interfaces. Los usuarios avanzados preferirán la interfaz de usuario completa, conocida como Integrated Scripting Environment (ISE). Sin embargo, los principiantes preferirán la consola de PowerShell, una interfaz de texto simple que recuerda a la línea de comandos de Windows, o incluso DOS 3.2.

PowerShell

Para iniciar PowerShell como administrador de Windows 10, haga clic en Inicio y desplácese por la lista de aplicaciones hasta Windows PowerShell. Haga clic en esa línea, haga clic en Windows PowerShell y seleccione Ejecutar como administrador. En Windows 8.1, busque Windows PowerShell en la carpeta del sistema de Windows. En Win7, se encuentra en la carpeta Accesorios. Puede ejecutar PowerShell como un usuario "normal", siguiendo la misma secuencia, pero con un clic izquierdo.

En cualquier versión de Windows, puede utilizar la búsqueda de Windows para buscar PowerShell. En Windows 8.1 y Windows 10, puede ponerlo en su "Menú de Inicio", Ctrl-X (clic derecho en un espacio vacío en la barra de tareas y seleccione Propiedades; en la pestaña de navegación, marque la casilla para reemplazar Símbolo del sistema). Una vez que lo haya abierto, es bueno fijar PowerShell a la barra de tareas. Le gustará mucho.

Paso 2: Escriba antiguos comandos de Windows

Se sorprendería de cómo muchos comandos de la línea de sintaxis de Windows funcionan como se esperaba en PowerShell.

Por ejemplo, cd cambia directorios (también conocidos como carpetas), y dir todavía muestra todos los archivos y carpetas incluidas en la carpeta actual.

Dependiendo de cómo se inicia la consola de PowerShell, puede comenzar en c:\Windows\System32 o en C:\Usuarios\<nombre de usuario>. En la imagen de ejemplo, utilizo cd .. (nótese el espacio) para subir un nivel a la vez; a continuación, ejecuto dir para mostrar todos los archivos y subcarpetas en el directorio C:\.

PowerShell
Paso 3: Instale los archivos de ayuda

Los comandos como cd y dir no son comandos nativos de PowerShell. Son alias -sustitutos de los auténticos comandos de PowerShell. Los alias pueden ser útiles para aquellos de nosotros con poca memoria. Pero ni siquiera tocan las partes más importantes de PowerShell.

Para comenzar a sentir una sensación de que utiliza PowerShell, escriba help seguido de un comando que conozca. Por ejemplo, en la captura de pantalla, escribí help dir.

PowerShell

La ayuda PowerShell dice que dir es un alias para el comando de PowerShell Get-ChildItem. Efectivamente, si escribe get-childitem en PS C:\>, verá exactamente lo que vio con el comando dir.

Como se ha señalado en la parte inferior de la pantalla, los archivos de ayuda para PowerShell no se instalan automáticamente. Para recuperarlos (querrá conseguirlos), inicie sesión en PowerShell en el modo de administrador; a continuación, escriba update-help. La instalación de los archivos de ayuda tardará varios minutos, y es posible que falten un par de módulos -la ayuda para NetWNV y SecureBoot no se pudo instalar en mi máquina de prueba. Pero cuando haya terminado, el sistema de ayuda completo estará a su entera disposición.

A partir de ese momento, digite get-help seguido por el comando ("cmdlet" en el idioma PowerShell) que le preocupa, y vea toda la ayuda para ese elemento. Por ejemplo, get-help get-childitem produce un resumen de las opciones para get-childitem. También le pide que escriba en variaciones sobre el tema. Por lo tanto:

get-help get-childitem -examples

produce siete ejemplos detallados de cómo utilizar get-childitem. El comando de PowerShell

get-help get-childitem -detailed

Incluye los siete ejemplos, así como una explicación detallada de todos los parámetros disponibles para el cmdlet Get-ChildItem.

Paso 4: Obtenga ayuda sobre los parámetros

En la captura de pantalla help dir, puede haber notado que hay dos listados en SYNTAX para get-childitem. El hecho de que hay dos sintaxis separadas para el cmdlet significa que hay dos modos de ejecutar el cmdlet. ¿Cómo se mantiene separada la sintaxis -y qué significan los parámetros? La respuesta es fácil, si se sabe el truco.

Para obtener todos los detalles acerca de los parámetros para el cmdlet Get-ChildItem, o cualquier otro cmdlet, utilice el parámetro -full, así:

get-help get-childitem -full

Eso produce un listado de línea a línea de lo que puede hacer con el cmdlet y lo que puede (o no) ocurrir. Vea la captura de pantalla.

PowerShell

Moviéndose a través de los detalles de los parámetros es bastante fácil ver que get-childitem se puede utilizar para recuperar elementos "child" (como los nombres de las subcarpetas o nombres de archivos) en una ubicación que especifique, con o sin coincidencias específicas de carácter. Por ejemplo:

get-childitem "* .txt" -recurse

Recupera una lista de todos los archivos "* .txt" de la carpeta actual y todas las subcarpetas (debido al parámetro -recurse). Donde lo siguiente:

get-childitem "HKLM:\Software"

devuelve una lista de todas las claves de registro de alto nivel en HKEY_LOCAL_MACHINE\Software.

Si alguna vez ha tratado de entrar en el registro mediante una línea de comandos de Windows o un archivo por lotes, estoy seguro de que puede ver lo poderoso que puede ser este tipo de acceso.

Paso 5: Establezca los nombres

Hay una razón por la cual los cmdlets que hemos visto hasta ahora tienen el mismo aspecto: get-childitem, update-help, y get-Help siguen la misma convención verbo-sustantivo. Afortunadamente, todos los cmdlets de PowerShell pueden utilizar esta convención, con un verbo que precede a un sustantivo (singular). Aquellos de ustedes que pasaron semanas luchando por comandos VB y VBA con nombres inconsistentes, pueden dar un suspiro de alivio.

Para ver hacia dónde vamos, dele un vistazo a algunos de los cmdlets más comunes (gracias al blog Hey, Scripting Guy! de Ed Wilson). Comience con los cmdlets que llegan a su sistema y extraen información útil, como los siguientes:

  • set-location: Establece la ubicación de trabajo actual en una ubicación específica.
  • get-content: Obtiene el contenido de un archivo.
  • get-item: Obtiene archivos y carpetas.
  • item-copia: Copia un elemento de un lugar a otro.
  • remove-item: Borra archivos y carpetas.
  • get-process: Obtiene los procesos que se ejecutan en una computadora loca o remota.
  • get-service: Obtiene los servicios que se ejecutan en una computadora local o remota.
  • invoke-webrequest: Obtiene el contenido de una página web en la Internet.

Para ver cómo funciona un cmdlet determinado, utilice get-help, como en

get-help copy-item -full

En base a la descripción de su ayuda, puede averiguar fácilmente lo que quiere el cmdlet. Por ejemplo, si desea copiar todos los archivos y carpetas de los documentos en c:\temp, debería utilizar:

copy-item c:\users\[nombre de usuario]\documentos\* c:\temp

A medida que escribe en ese comando, verá unos toques agradables integrados en el entorno de PowerShell. Por ejemplo, si escribe copy-i y pulsa la tecla Tab, PowerShell rellena Copy-item y un espacio. Si escribe incorrectamente un cmdlet de PowerShell y no puede resolverlo, obtiene una descripción muy completa de lo que salió mal.

Pruebe este cmdlet. (Puede tratar de instalar un programa para leer el "acerca de". Si es así, ignórelo).

invoke-webrequest askwoody.com

Obtendrá una lista sucinta de las declaraciones de contenido de la página web, los encabezados, imágenes, enlaces y mucho más. ¿Ve cómo funciona? En el listado get-help fíjese en invoke-webrequest que el cmdlet invoke-webrequest "retorna colecciones de formularios, enlaces, imágenes y otros elementos significativos HTML" -exactamente lo que debe ver en su pantalla.

Algunos cmdlets le ayudan a controlar o asimilar PowerShell en sí:

  • get-command: Lista todos los cmdlets disponibles (que es una lista larga).
  • get-verb: Lista todos los verbos disponibles (las mitades izquierda de los cmdlets).
  • clear-host: Borra la pantalla en el programa anfitrión.

Varios parámetros (recuerde, get-help) le permiten reducir gradualmente los comandos y reducir las opciones que pueden ser de utilidad para usted. Por ejemplo, para ver una lista de todos los cmdlets que trabajan con servicios de Windows, intente lo siguiente:

get-command *-service

En él se enumeran todos los verbos que están disponibles con service como sustantivo. Aquí está el resultado:

Get-Service
New-Service
Restart-Service
Resume-Service
Set-Service
Start-Service
Stop-Service
Suspend-Service

Puede combinar estos cmdlets con otros cmdlets para cavar en casi cualquier parte de PowerShell. Ahí es donde los conductos entran en escena.

Paso 6: Lleve los conductos

Si alguna vez ha utilizado la línea de comandos de Windows o pasado a través de un archivo por lotes, conoce de redirección y conductos. En términos simples, tanto redirección (el carácter >) y los conductos (el carácter |) toman la salida de una acción y la pegan en otro sitio. Puede, por ejemplo, redirigir la salida de un comando dir a un archivo de texto, o "dirigir" el resultado de un comando ping a un find, para filtrar resultados interesantes, de esta forma:

dir>temp.txt
ping askwoody.com | find "paquetes"> temp2.txt

En el segundo comando anterior, el comando find busca los paquetes de cadena en la salida de un conducto de ping askwoody.com y mete todas las líneas que coinciden en un archivo llamado temp2.txt.

Tal vez, sorprendentemente, el primero de estos comandos funciona bien en PowerShell. Para ejecutar el segundo comando, querrá algo como esto:

ping askwoody.com | seleccione paquetes unidos | out-file temp2.txt

El uso de la redirección y los conductos amplía enormemente las capacidades de la línea de comandos de Windows: En lugar de desplazarse sin cesar hacia abajo de la pantalla en busca de una cadena de texto, por ejemplo, se puede armar un comando por los conductos de Windows que hace la investigación de antecedentes por usted.

PowerShell tiene esta capacidad, pero no se limita a texto. En su lugar, PowerShell permite pasar todo un objeto de un cmdlet al siguiente, donde un "objeto" es una combinación de datos (llamados propiedades) y las acciones (métodos) que se pueden utilizar en los datos.

La parte más difícil, sin embargo, radica en la alineación de los objetos. El tipo de objeto entregado por un cmdlet tiene que coincidir con los tipos de objetos aceptados por el cmdlet receptor. El texto es un tipo muy simple de objeto, por lo que, si está trabajando con el texto, alinear los elementos es fácil. Otros objetos no son tan rudimentarios.

¿Cómo averiguarlo? Bienvenido al cmdlet Get-Member. Si desea saber qué tipo de objeto produce un cmdlet, canalícela a través de get-member. Por ejemplo, si está tratando de averiguar los procesos que se ejecutan en su computadora, y ha reducido las opciones para el cmdlet get-process, de esta forma es como se entera de lo que produce el cmdlet get-process:

get-process | get-member

La ejecución de ese comando produce una larga lista de propiedades y métodos para get-process, pero al principio de la lista se puede ver el tipo de objeto que crea get-process:

TypeName: System.Diagnostics.Process

La siguiente captura de pantalla también le dice que get-process tiene propiedades denominadas Handles Nombre, NPM, PM, SI, VM, y WS.

PowerShell

Si se quiere manipular el resultado de get-process, de modo que se pueda trabajar con él (en lugar de tener que mostrar una larga lista de procesos activos en el monitor), es necesario encontrar otro cmdlet que trabajará con System.Diagnostics.Process como entrada. Para encontrar un cmdlet dispuesto, solo tiene que utilizar ... espere ... PowerShell:

get-command -Parametertype System.Diagnostics.Process

Eso produce una lista de todos los cmdlets que pueden manejar System.Diagnostics.Process.

Algunos cmdlets son conocidos por tomar casi cualquier tipo de entrada. El principal de ellos: where-object. Tal vez confusamente, where-object recorre cada artículo enviado por las conexiones, uno por uno, y aplica cualquier criterio de selección que solicite. Hay un marcador especial llamado $ _. que le permite desplazarse por cada elemento de la red de conexiones, uno a la vez.

Digamos que quiere una lista de todos los procesos que se ejecutan en la máquina que se llama "svchost" - en el idioma de PowerShell, desea hacer coincidir una propiedad Nombre de svchost. Pruebe este comando de PowerShell:

get-process | where-objects {$ _. Nombre -eq "svchost"}

El cmdlet where-object mira a cada elemento System.Diagnostics.Process, compara el .Nombre de ese elemento en "svchost"; si el artículo coincide, aparece al extremo de las conexiones y se teclea en su monitor. Vea la captura de pantalla.

PowerShell
Paso 7: Disección de un comando útil PowerShell

En este punto ya sabe lo suficiente como para dispararse a sí mismo (y a su máquina) en el pie. Tenga cuidado. Antes de que siga leyendo y llegue a la parte más profunda, vamos a ir a través de un ejemplo de un sistema de PowerShell sobre el que muchos de ustedes han preguntado.

Este comando en particular solo funciona en Windows 10 y solo si se está ejecutando PowerShell como administrador. Está diseñado para volver a instalar las aplicaciones por defecto de Windows 10, y lo he encontrado útil para refrescar las pequeñas bestias -especialmente para aquellos que eliminan las aplicaciones incorporadas, pero de repente cambian de opinión. El comando es el siguiente:

Get-AppXPackage | Foreach {Add-AppxPackage -DisableDevelopmentMode -Register "$ ($ _. InstallLocation) \ AppXManifest.xml"}

Si ejecuta ese comando PowerShell, ignore las advertencias en rojo, y cuando lo haga, reinicie su máquina; todas sus aplicaciones por defecto de Windows 10 aparecen de repente en sus últimas encarnaciones.

He aquí cómo funciona el comando. Get-AppXPackage pasa a través de todos los paquetes de aplicaciones en su perfil de usuario. Incluso si ha eliminado una aplicación por cualquier medio (algunas son fáciles, algunas no tanto), todavía aparece en su perfil de usuario.

El cmdlet Get-AppXPackage devuelve un objeto con TypeName Microsoft.Windows.Appx.PackageManager.Commands.AppxPackage, que incluye el nombre completo del paquete de la aplicación y la ubicación del archivo de manifiesto XML adjunto. Si ejecuta el cmdlet Get-appxpackage, se ve una larga lista de paquetes de aplicaciones. La captura de pantalla muestra la entrada para la aplicación Xbox en mi computadora principal.

PowerShell

En el comando de PowerShell, el cmdlet Foreach hace loops a través de cada una de las entradas en el objeto AppXPackage, alimentándolos con el cmdlet Add-AppxPackage. De acuerdo con get-help para Add-AppxPackage, hay dos interruptores clave:

  • El interruptor -Register se utiliza "Para registrar una instalación del paquete de aplicaciones existente, debe especificar el parámetro DisableDevelopmentMode y el parámetro de Register".
  • El interruptor -DisableDevelopmentMode le indica a Windows que debe volver a registrar "una instalación del paquete de aplicaciones existente que ha sido desactivado, no se registró, o se ha dañado".

La cadena "$ ($ _. InstallLocation\AppXManifest.xml" especifica donde se encuentra el archivo de manifiesto XML. Si se asoma a uno de los archivos AppXManifest.xml, verá una lista compleja de identificadores de aplicaciones, archivos ejecutables, y un gran número de elementos visuales asociados con la aplicación.

En el reinicio, todos los paquetes de aplicaciones recién añadidos se descargan desde la tienda de Windows y se instalan.

A dónde ir después

Con un poco de suerte, todo esto lo dejará orientado y fuera del capullo de la línea de comandos de Windows (o archivo por lotes). Un nuevo mundo espera.

Para empezar, sugiero hacer frente a dos introducciones largas en la web.

El primero proviene de Taylor Gibb en How-To Geek. Él tiene una serie de 11 cursos que finalizan con la elaboración de un script completo. Comience en la última lección, a continuación, utilice los enlaces para saltar a cursos individuales.

El segundo es un curso enciclopédico sobre el sitio de Microsoft MSDN. Escrito por el gurú de PowerShell, JuanPablo Jofre, "Introducción a Windows PowerShell lo lleva en un viaje relámpago por los conceptos y comandos. Lo más importante, incluye docenas de soluciones para los problemas del mundo real.

Una vez que tenga sus soportes, esté al tanto de las últimas novedades, tanto con el Blog de Windows PowerShell en MSDN, y con el blog Hey, Scripting Guy! en TechNet. Este último también tiene un foro de PowerShell.

Hay muchos libros de PowerShell en el mercado. El que más espero es la tercera edición de "Aprenda Windows PowerShell en un mes de descargas" de Don Jones y Jeffrey Hicks, que debe salir en diciembre de este año.

Si eso no es suficiente, PowerShell MVP Boe Prox tiene una lista de 50 foros de PowerShell en el blog de aprendizaje powershell.net.