vista-tecnica

Échale un vistazo técnico a Windows Vista
PowerShell (II de V)

Comenzamos esta segunda entrega describiendo la base de la sintaxis en powershell. Lo primero que debemos conocer es que los comandos de PowerShell ahora se denominan cmdlets y comparten una sintaxis común.

 

Todos los cmdlets consisten de un verbo y un nombre, separados por un guión.

Esta estructura permite un aprendizaje más rápido y sobre todo relacionar fácilmente el verbo con lo que se quiere realizar, por ejemplo.

 

Algunos de los verbos admitidos en esta versión 1.0 de powershell son get, set, new, write, start, stop, remove, add, etc..Es relativamente sencillo suponer qué es lo que hace cada uno de los verbos. Si a continuación le agregamos el nombre, completamos el cmdlet, por ejemplo:

 

  • Get-help
  • Get-childitem
  • Get-service
  • Get-process
  • New-item
  • Set-acl
  • Set-alias
  • Set-date

 

Sin embargo muchos de estos cmdlets tienen su alias en versión UNIX y CMD.EXE para aquellos administradores que vengan desde estos entornos, por ejemplo:

 

Get-childitem nos sirve para listar los objetos dentro de una carpeta o disco y podemos utilizar el cmdlet nativo de Powershell o los ya conocidos ls y dir de UNIX y CMD.EXE respectivamente. Además, para no tener que escribir todo el cmdlet, también existe un alias reducido como gci en este caso.

 

Si no conocemos el nombre que debemos utilizar después de un verbo, PowerShell incluye una ayuda para autocompletar los cmdlets utilizando la tecla tabulación. Por ejemplo, si escribimos el verbo set- y queremos saber qué nombres están admitidos, solo vamos circulando por los nombres con TAB.

 

  • Set-acl -> TAB -> set-alias -> TAB -> set-authenticodeSignature -> TAB -> set-content -> TAB -> set-date -> TAB -> set-ExecutionPolicy ->  y así sucesivamente

 

Podemos también comenzar escribiendo las primeras letras del nombre y PowerShell completará los nombres que coincidan con estas primeras letras.

 

Windows PowerShell es una consola orientada a objetos, lo que quiere decir que todos los comandos de entrada y salida son en sí mismos objetos.  PowerShell se basa en el modelo de objetos de.Net.

 

.Net es una representación de objetos unificada que utilizan todos los equipos de desarrollo de Microsoft, por lo tanto desde PowerShell se pueden gestionar todos los componentes de Windows y de las aplicaciones basadas en .Net

 

Por ejemplo, si queremos conocer el día de la semana del 4 de enero de 1643 (nacimiento de Isaac Newton), solo tenemos que escribir lo siguiente:

 

  • (get-date “04/01/1643”).DayOfWeek

 

En este ejemplo, el cmdlet get-date devuelve el objeto .Net DateTime, que tiene una propiedad que calcula el día de la semana. Una aplicación más interesante para los administradores de sistemas es por ejemplo verificar si un archivo es más reciente que otro.

 

  • (get-childitem archivo1.txt).lastwritetime –gt (get-childitem archivo2.txt).lastwritetime

 

Si queremos conocer todos los detalles de cada cmdlet, Get-help nos muestra la ayuda completa. Su so es: get-help cmdlet, por ejemplo: get-help get-childitem.

 

La ayuda en PowerShell está muy cuidada y es muy extensa, de hecho podemos mostrar tres niveles de ayuda:

 

  • get-help get-childitem (Ayuda general y resumida)
  • get-help get-childitem –detailed (ayuda detallada)
  • get-help get-childitem –full (ayuda técnica completa)

 

Si la ayuda es extensa para visualizarla en pantalla, podemos exportar el contenido a un archivo de texto:

 

  • get-help get-childitem –full | out-file C:\AyudaPowerShell.txt

 

Aunque si estáis acostumbrados a cmd.exe, podemos escribir lo siguiente para hacer lo mismo:

 

  • get-help dir –full > C:\AyudaPowerShell.txt

 

 

Además, parte de la ayuda completa incluye numerosos ejemplos de aplicación de cada cmdlet.

 

Como habéis podido observar, en el anterior ejemplo hemos utilizado el símbolo | Una de las características más importantes de PowerShell es la capacidad de crear pipas (pipes), de tal forma que podemos pasar los resultados de un cmdlet hacia el siguiente. Esta funcionalidad ya la conocen muy bien los administradores que vienen del entorno UNIX ya que es una característica común desde hace mucho tiempo, y que sin embargo en Windows había sido una funcionalidad reducida a algunos comandos muy específicos, como por ejemplo > para exportar los resultados a un archivo de texto.

 

Cada cmdlet en un pipeline recibe un objeto del cmdlet previo, realiza una operación en él y después pasa el resultado al siguiente cmdlet en la pipa.

 

  • Get-childitem –recurse –filter *.exe | format-table name, lenght

 

En el ejemplo anterior, el cmdlet get-childitem recorre todas las carpetas por debajo de la ubicación actual en busca de archivos .exe y el resultado se pasa al cmdlet format-table para dar formato con el nombre y la longitud de los archivos encontrados.

 

Esta es una forma sencilla de hacer búsquedas y formatear la salida en pantalla. Otro ejemplo similar es el siguiente:

 

  • Get-childitem –recurse –path “C:\windows” –filter *.dll | where {$_-name –match “system.*dll”}

 

Esta instrucción busca todos los archivos en la carpeta Windows que lleven la palabra system y con extensión dll.

 

Una característica destacable es la capacidad de ejecución en streaming de Powershell, es decir, no necesitamos esperar a que se procesen todos los resultados para verlos en pantalla, sino que a medida que se van encontrando valores coincidentes, se van presentando en pantalla.

 

En la mayoría de las consolas, el streaming se consigue ejecutando procesos separados para cada elemento en la pipa. PowerShell solo utiliza un proceso de ejecución y un único hilo. El streaming se logra particionando los cmdlets en tres cláusulas: inicio de proceso (begin-processing), objeto en proceso (process-object) y fin de proceso (end-processing).

 

Con esto llegamos al final de esta segunda entrega de PowerShell, seguiremos comentando más detalles de los cmdlets y su utilización por parte de los administradores de sistemas en el siguiente post.

Publicado: 11/6/2007 8:30 por Joshua Saenz con 5 comment(s)

Comparte este post:

Comentarios

# re: PowerShell (II de V) @Monday, June 11, 2007 12:35 PM

¿pipe no se suele traducir por tubería?

Muy interesante el artículo, esperaré a que en la tercera parte te metas hasta el fondo :-)

penyaskito

# re: PowerShell (II de V) @Friday, July 27, 2007 9:42 PM

Muy buenos artículos para introducirse a esta tecnología de Microsoft.

Estoy en espera de los restantes artículos de este tema.

Saludos desde México.

Saidmr

# re: PowerShell (II de V) @Saturday, September 22, 2007 7:40 PM

Buen tutorial básico

pipa (pipes) -> Tuberias ;-)

Curioso lo de que utilicen -- en vez del típico / de Windows. jejeje.

NetVicious

# re: PowerShell (II de V) @Monday, September 24, 2007 8:49 AM

Hola NetVicious, ya lo usaba el pipe desde tiempos inmemoriales para paginar los resultados.

c:> dir /s | more

Saludos!

Chema Alonso

# re: PowerShell (II de V) @Thursday, April 3, 2008 7:50 PM

Muy bueno!!!

Esperando mas articulos sobre PowerShell.

Saludos!

Cristian