Bueno, llegó la hora de empezar a hablar de Powershell…

Como IT Pros en nuestras labores diarias siempre tenemos la necesidad de realizar tareas repetitivas que podemos ejecutar de manera más fácil automatizándolas a través de Powershell. Actualmente Powershell se encuentra en la versión 3.0.

Como para hacerse una idea de la potencia de esta versión en Windows Server 2012 existen más de 2300 “Cmdlets” -que son los comandos que se ejecutan en el ambiente de Powershell- ello nos da una idea muy buena de todas las posibilidades que existen. En Windows 2008 existen 230 Cmdlets, como lo pueden ver ahora hay 10 veces más en la verisón Server 2012.

La otra buena noticia es que existen muy buenos recursos en Technet de Microsoft para aprender a hacer scripts y prácticamente se podría decir que ya todo está hecho, es cuestión de saber en dónde se encuentra.

Les recomiendo el sitio del famoso “Scripting Guy” Ed Wilson http://technet.microsoft.com/en-us/scriptcenter/dd901334.aspx que contiene mucha información valiosa y es prácticamente la biblia de Powershell.

Tanto en Windows Server 2012 como en Windows 8 se agregó una funcionalidad denominada Powershell ISE (Intellisense) que nos ayuda a autocompletar los comandos de una manera inteligente. En Windows 8 Powershell ISE no viene en el menú inicio pero sí existe.

Pero bien, vamos a ejecutar una serie de comandos básicos de Powershell para empezar. Para invocar a Powershell basta con escribir powe en el menú inicio de Windows Server 2012 o Windows 8:


 

Observen que aparecen todas las aplicaciones que empiezan por “powe”, en este caso Powershell y PowerPoint. Ahora podemos hacer clic en Windows Powershell. Este es uno de los métodos de búsqueda de una aplicación que podemos usar en Windows 8, pero también hay más de una manera de hacer esta búsqueda.

 

En esta ventana ya se pueden ejecutar comandos, empecemos por saber cómo pedir ayuda:

Get-Help | more

Algo muy interesante es que con la tecla TAB podemos autocompletar los comandos, es decir que si escribo get-h en primer lugar el sistema va a poner la primera letra de la palabra get en mayúsculas y luego del guión la h en mayúsculas, es decir Get-H. Esto se hace de manera automática aunque Powershell no es sensible a mayúsculas o minúsculas, es decir que si escribo get-help o Get-Help el resultado será el mismo.

Volviendo a Get-H tan pronto presione la tecla TAB veré todas las opciones de comandos o funciones que empiecen por Get-H es decir:

Get-Help
Get-History
Get-Host
Get-Hotfix

Como quiero  usar el comando Get-Help, lo selecciono:

En realidad el comando more combinado con el carácter pipe (|) existe desde hace muchos años desde las épocas del DOS y permite mostrar por páginas la salida en pantalla (también existe en Linux).

Para obtener ayuda en particular de algún comando puedo usar Get-Help <comando>, por ejemplo para obtener detalles del comando Get-Disk escribo Get-Help Get-disk |more



Ahora bien, si quiero ver toda la lista de comandos disponibles uso el comando Get-Command | more lo cual me entrega una muy larga lista de todos los comandos existentes.

Si quiero hacer una búsqueda de algún comando en esa lista puedo usar findstr.exe de la siguiente manera

 

 

Observen que le dije a Powershell que me mostrara todos los comandos y funciones relacionadas con el disco, por ello usé el comando Get-Command | findstr.exe “Disk” y sólo me mostró los comandos relacionados con la cadena de caracteres Disk

Lo que debemos en empezar a hacer como IT Pros es identificar los comandos que nos van a servir para saber qué tiene nuestro sistema, es decir debemos conocer las 4 variables fundamentales de este sistema: Disco, Memoria, CPU y Red.

 

DISCO

Para saber las características del disco físico podemos usar el comando Get-Disk



Bueno, como iniciamos Powershell como un usuario no privilegiado obtuvimos este error dado que ciertos comandos y funciones no los podemos ejecutar con usuarios no privilegiados, como lo es el caso de Get-Disk

Por lo tanto debemos ejecutar Powershell como administrador. Volvemos a hacer la búsqueda que ya mencioné arriba (powe...) pero esta vez hacemos clic derecho y seleccionamos Run as administrator


 

Nos va a pedir autorización para ejecutar el programa como administrador (Es la opción por defecto, pero se puede cambiar), le decimos que sí y se nos abrirá Powershell con privilegios de administrador:

 

 

 

Observen que la ruta por defecto es C:\windows\system32.

Bueno, ahora sí podemos ejecutar el famoso Get-Disk


 

En este ejemplo se ve mi disco interno y un disco USB que tengo conectado a la máquina.

Si quiero ver detalles de uso de espacio en disco debo usar cosas más sofisticadas, y para ello los refiero al blog http://blogs.technet.com/b/heyscriptingguy/archive/2012/08/08/use-Powershell-to-create-a-report-displaying-free-disk-space.aspx del Scripting Guy

 

MEMORIA


Aquí hay que apelar a un par de comandos que pueden crearse en un archivo .ps1 o ejecutarlos directamente en Powershell:

$mem = Get-WmiObject -Class Win32_ComputerSystem

"Este sistema tiene {0} MB de Memoria" -f $($mem.TotalPhysicalMemory/1mb)

Veamos el resultado:

 

 

 

CPU


Para ver la información básica es posible usar el comando

Get-WmiObject Win32_Processor

O

gwmi win32_Processor


Ambos producen la misma salida, gwmi es un Alias de Get-WmiObject, como lo vamos a ver en Powershell existen muchos Aliases de comandos, que son una abreviatura del comando en sí y dan el mismo resultado:


De nuevo, si quieren resultados más elaborados pueden ver el siguiente link (Scripting Guy) http://blogs.technet.com/b/heyscriptingguy/archive/2011/09/26/use-Powershell-and-wmi-to-get-processor-information.aspx

 

RED


Aquí sí hay varios comandos directos. Para ver todos los adaptadores de una máquina se usa Get-NetAdapter:

 

 

Si quiero muchos más detalles puedo usar Get-NetAdapterAdvancedProperty|more (No se olviden del more…)

 

 

Si quiero ver qué protocolos (TCP/IP v4, TCP/IP v6, etc) están habilitados en todos los adaptadores uso:

 

Get-NetAdapterBinding|more



Obviamente puedo ver características de un solo adaptador especificando el nombre del mismo.

 

EJEMPLOS (Usando el adaptador denominado Wi-Fi):

 

Get-NetAdapter Wi-Fi


 

Get-NetAdapterAdvancedProperty Wi-Fi


 

Get-NetAdapterBinding Wi-Fi



 

Espero que les haya sido de utilidad, y empiecen a probar Powershell, es realmente muy poderoso tal como su mismo nombre mismo lo indica.