Introducción a PowerShell

Estándar

En esta pequeña introducción veremos los intringulis de esta gran herramienta creada para los administradores de sistemas. Estamos hablando de PowerShell.
Pese a que con el anterior intérprete de comandos de Windows se podía hacer casi un 100% del trabajo a base de scripts, Windows PowerShell se diseña para mejorar si cabe el entorno de comandos e incorporar nuevas y variadas funciones.

Requisitos para instalar Windows PowerShell

Tener instalado algún sistema operativo tal como Windows XP SP2, Windows 2003 (con al menos Service Pack 1) o versiones posteriores.

Microsoft .NET FrameWork 2.0

Descargar Windows PowerShell

Empezando a trabajar con PowerShell

Veremos los principales comandos que podremos utilizar para familiarizarnos con PowerShell.
Para seguir los ejemplos, trabajaré con un directorio en el que tengo una serie de archivos. El archivo lo tengo alojado en mi unidad C y lo he llamado power. En este directorio tengo archivos .rar, .zip, .doc, .exe, etc… y mediante una serie de comandos, empezaremos a trabajar con estos archivos.
Empecemos!!🙂

El comando Get-ChildItem

Este Cmdlet devolverá una lista con todos los elementos que hay dentro del directorio power.
Para ejecutar este comando la sintaxis sería la siguiente:

Get-ChildItem C:\power

A lo que devolvería una lista como la que aparece

powershell

Pero detengámonos un momento…. Si esto es un vulgar comando dir no? La respuesta es sí y no al mismo tiempo.
Get-ChildItem se diseña para que retorne la información que encuentre en una localización específica, pero puede ser utilizado con otras funciones de Windows PowerShell. Sin ir más lejos, para trabajar con el registro de Windows. Podemos invocar a este comando para que nos devuelva todas las subclaves de una entrada específica del registro, con este comando:

Get-ChildItem hkcu:\

Este comando nos devuelve como salida las ramificaciones del registro que cuelgan de la clave HKEY_CURRENT_USER

Si os fijáis, el comando dir también funciona en Windows PowerShell, y realiza la misma función. Esto es porque el comando dir es un alias, que direcciona al comando Get-ChildItem.
Para ver todos los alias que hay referenciados en PowerShell, podemos escribir estos comandos, que nos darán la misma salida:

Get-Alias
Get-Command –commandtype alias

Si ejecutamos el comando Get-Command dir, este comando nos devuelve como respuesta que ha encontrado un alias con nombre dir, pero que referencia directamente al comando Get-ChildItem.

Para ver toda la ayuda que disponemos sobre este comando, podremos tipear el comando Get-Help comando , y como salida nos mostrará toda la ayuda referenciada sobre el comando que necesitemos obtener ayuda.

Si ejecutamos la ayuda para el comando Get-ChildItem, veremos que este nos proporciona muchas opciones para alterar la salida tanto como queramos. Así que veamos unos ejemplos:

Por ejemplo, si quisiésemos ver todos los archivos del directorio C:\power, excluyendo de la salida los archivos con extensión .tmp, ejecutaríamos el comando:

Get-ChildItem C:\power –exclude *.tmp

Con este comando podemos excluir tantas extensiones como queramos, separando las extensiones por , (comas). Si quisiésemos excluir a parte alguna que otra extensión más, ejecutaríamos:

Get-ChildItem C:\power –exclude *.tmp, *.temp, *.hl_

Estaríamos excluyendo de nuestra salida los ficheros con extensión .tmp, .temp y .hl_.

También podemos incluir en nuestra salida sólo los elementos que nosotros queramos. Esto se consigue con el parámetro –include. El funcionamiento es similar al anterior, pero con un pequeño añadido. Tenemos que incluir en la ruta de búsqueda la cadena *.*

Por ejemplo, si quisiésemos listar sólo los archivos que tengan extensión .zip y .doc, el comando resultante para esta operación será:

Get-ChildItem C:\power\*.* -include *.zip, *.doc

Por defecto, en la salida se nos muestran los siguientes atributos:

Nombre
Modo
Ultimo Acceso
Tamaño

Mode LastWriteTime Length Name
——- —————— ——— ——–
-a— 28/01/2007 0:06 26624 12122006-djtest.doc

Nosotros podemos alterar esta salida, permitiéndonos mostrar o solo el Nombre, o sólo la última fecha de acceso, o el tamaño, el tamaño y el nombre, etc… Esto lo conseguimos filtrando la salida con el cmdlet Select-Object.
Así pues, si quisiésemos que en nuestra salida sólo nos mostrase el nombre y el tamaño de los ficheros, el comando que pondríamos sería:

Get-ChildItem C:\power\*.* –include *.zip, *.doc | Select-Object Name, Length

Truquito para el que no sepa inglés🙂

Get-ChildItem C:\power\*.* –include *.zip, *.doc | Select-Object N*, Le*

Con este comando conseguimos exactamente lo mismo, pero con comodines.

Podemos ordenar la salida por tamaño:

Get-ChildItem C:\power\*.* -include *.zip, *.doc | Select-Object N*, Le* | sort length

Agrupar por tipos de extensiones:

Get-ChildItem C:\power | Group-Object extension

Espero que os guste esta primera impresión de PowerShell. En sucesivos artículos nos iremos adentrando un poco más en el mundillo de PowerShell para aprender a automatizar esas tareas que tanto nos cuestan….

1Saludo!

6 comentarios en “Introducción a PowerShell

  1. Leo Gutierrez R.

    Hola, me gustaron los articulos sobre PowerShell, aunque aun no puedo correr algun script.

    Suelo hacer bastantes Scripts batch, pero con PowerShel no puedo aun.

    Tengo algunas preguntas basicas:

    Guardo mi Script con extencion .ps1, pero se me abre con el Bloc de Notas, como pudiera que cuando abra el archivo (Haciendo doble clic, o desde la consola) se me ejecutaran los comandos(comandos PowerShell) contenidos???

  2. Agradecido por tus artículos de Powershell, muy interesantes.

    Leo: Comprueba el estado de las “executionpoliy” con “get-executionpolicy”, si las tienes en “restricted” deberás cambiarlas con el comando “set-executionpolicy” y la opción que mas te interese.

    Venga…

  3. Jesus

    Bueno veo que esto es desde el 2008 y yo apenas estoy descubriendo powershell estoy como que un poquito atrasado ..!!
    Mi pregunta es la siguiente como podria utilizar un Get-childitem para que solo me muestre o archivos o directorios.?
    trate de hacer esto pero no me funciono

    >Get-ChildItem C:\ | Format-Table Mode, Name | Where-Object -FilterScript {$_.Mode -like “d”}

    >Get-ChildItem C:\ | Format-Table Mode, Name | Where-Object -FilterScript {$_.Mode -eq “d”}

    Ninguno me funciona y he investigado pero no he encontrado como hacerlo ojala me puedas dar luz sobre esta duda ..!

    Y gracias tus Post son muy buenos para Newbie como yo !! =)

  4. Mi pregunta es la siguiente como podria utilizar un Get-childitem para que solo me muestre o archivos o directorios.?
    trate de hacer esto pero no me funciono

    >Get-ChildItem C:\ | Format-Table Mode, Name | Where-Object -FilterScript {$_.Mode -like “d”}

    >Get-ChildItem C:\ | Format-Table Mode, Name | Where-Object -FilterScript {$_.Mode -eq “d”}

    Ninguno me funciona y he investigado pero no he encontrado como hacerlo ojala me puedas dar luz sobre esta duda ..!

    Y gracias tus Post son muy buenos para Newbie como yo !! =)

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s