Conecta con nosotros

A Fondo

Diez comandos imprescindibles para iniciarse en Windows PowerShell

Publicado el

Desde su inclusión en Windows XP SP2, Windows PowerShell se ha convertido en toda una referencia para todo tipo de profesionales TIC, especialmente en el área de desarrollo y administración de sistemas.

Como muchos saben, en PowerShell las tareas administativas se realizan empleando comandos particulares que en la jerga de Microsoft reciben el nombre de cmdlets (command-lets). A diferencia de la mayoría de los shells, que aceptan y devuelven texto, Windows PowerShell se basa en .NET Framework Common Language Runtime (CLR) y .NET Framework, y acepta y devuelve objetos de .NET. Este cambio en el entorno aporta herramientas y métodos mucho más eficaces para la administración y configuración de Windows.

PowerShell utiliza los datos provenientes del sistema de archivos o el registro. Además, los partners de Microsoft y otras compañías pueden añadir sus propios cmdlets y distintos servicios.

¿Y todo esto de qué nos sirve? Si somos administradores de sistemas, de mucho. Pero incluso si no lo somos, PowerShell puede convertirse en una gran herramienta para obtener información sobre nuestro sistema o para ahorrar mucho tiempo en algunas tareas administrativas básicas.

¿Por dónde empezar? La mejor forma desde luego, es hacerse con un manual que nos cuente los «entresijos» de esta poderosa consola de comandos. Pero si lo que queremos es empezar a descubrir algunas de sus posiblidades, nada mejor que comenzar a familiarizarse con algunos de los siguientes cmdlets.

Get-Command

Si estás dando tus primeros pasos en PowerShell, estamos seguros que agracederás poder contar con un cmdlet tan útil como «Get-Command». Al ejecutarlo, Windows te mostrará todos los comandos disponibles para tu sesión actual en PowerShell.

get-command

Get-Help

Si necesitamos ayuda, no tenemos más que pedirla. Y aquí el comando Get-Help nos va a proporcionar, nunca mejor dicho, una ayuda fundamental cuando no sepamos exactamente qué es lo que estamos haciendo o con qué otras opciones podemos trabajar en nuesta línea de comandos. Una forma habitual de utilizar este cmdlet es la siguiente:

Get-Help [[-Name] ] [-Path ] [-Category <String[]>] [-Component <String[]>]

Set-ExecutionPoliciy

Como medida de seguridad y para evitar la inyección de código malicioso, Microsoft deshabilita por defecto, la posibilidad de ejecutar scripts en el entorno PowerShell. A la mayoría de los desarrolladores en cambio, les interesa (y mucho), poder disponer de esta funcionalidad.

Para conseguirlo, el comando Set-ExecutionPolicy establece distintos niveles de control, alrededor de los cuales pueden ejecutarse distintos scripts. Son los siguientes:

    • Restricted: No carga archivos de configuración, ni ejecuta scripts. Esta es la configuración predeterminada.
    • Allsigned: Requiere que todos los scripts y archivos de configuración estén firmados por un editor de confianza.
    • Remotesigned:Requiere que todos los scripts y archivos de configuración descargados de Internet estén firmados por un editor de confianza

Unrestricted: Carga todos los archivos de configuración y ejecuta todos los scripts

Como en el caso de get-command, si no sabemos en qué entorno «nos estamos moviendo» podemos averiguarlo fácilmente ejecutando el comando Get-ExecutionPolicy

Get-Service

Además de los comandos con los que podemos trabajar, también es útil saber con qué servicios podemos contar en el sistema. Podemos averiguarlo sencillamente con el comando Get-Service. Una salida típica para este comando podría ser la siguiente:

Status Name DisplayName
------ ---- -----------
Running AdobeActiveFile... Adobe Active File Monitor V4
Stopped Alerter Alerter
Running ALG Application Layer Gateway Service
Stopped AppMgmt Application Management
Running ASChannel Local Communication Channel

Si necesitamos conocer el estado de un servicio concreto, escribiremos el nombre del mismo tras el sufijo -Name

ConvertTo-HTML

Si necesitamos extraer los datos de PowerShell para compartirlos con una tercera persona, el comando ConvertTo-HTML es una forma muy recomendable de hacerlo. Utilizarlo es tan sencillo como incluirlo como sufijo de cualquier otro comando cuyo output queramos guardar. Además deberemos determinar el nombre de un archivo HTML. Por ejemplo, de la siguiente forma:

PS C:\> get-alias | convertto-html > aliases.htm
PS C:\> invoke-item aliases.htm

Si en vez de HTML preferimos el formato CSV, podemos utilizar de la misma forma el comando Export-CSV.

Get-EventLog

Una de las utilidades más interesantes de PowerShell es analizar los registros de eventos de nuestro equipo. Para ello utilizaremos el cmdlet Get-Eventlog. Para hacerlo, utilizaremos el parámetro -Log seguido del nombre del archivo de registro para ver un registro específico. Una forma de utilizarlo es la siguiente:

Get-EventLog -Log "Application"

Get-Process

De la misma forma que nos puede interesar acceder a un listado de comandos y servicios, nos puede resultar muy útil entender qué procesos se están ejecutando en un momento determinado. El comando Get-Process nos ofrece esta información.

Además de para saber qué es lo que se está ejecutando, este cmdlet nos sirve como primer paso para terminar un proceso que no está funcionando como debería o qué se ha bloqueado. Para ello utilizaremos la orden Stop-Process. Una forma de realizar ambas acciones, podría ser la siguiente:

Get-Process
Stop-Process -processname notepad

Clear-History

¿Queremos borrar el histórico de comandos que hemos empleado hasta ahora? Nada tan fácil como utilizar la orden Clear-History. ¿Nos interesa borrar el histórico de un comando en concreto? Le añadiremos el ap?endice -Command. Por ejemplo, de esta forma:

Clear-History -Command *help*

Where-Object

Llegamos a uno de los cmdlets más importantes que tienes que conocer. Crea un filtro que controla los objetos que se van a pasar con una canalizacion de comandos. Filtra los objetos que recibe, bien como entrada canalizada o a traves del parametro “- inputobject“. Determina que objetos se van a pasar a traves de la canalizacion mediante la evaluacion de un bloque de script que puede incluir una referencia a un objeto que se va a filtrar. Si el resultado de la ejecucion es verdadero, el objeto que se va a procesar se pasa a traves de la canalizacion, en caso contrario, el objeto queda descartado.

Set-AuthenticodeSignature

Si deseamos mantener nuestro trabajo seguro y evitar posibles modificaciones, podemos echar mano del cmdlet Set-AuthenticodeSignature para añadir una firma Authenticode a un script o archivo.

Hasta aquí, algunos de los comandos básicos de PowerShell que te van a ayudar a iniciarte en las entrañas de una de las herramientas más interesantes que Microsoft pone en manos de los profesionales TIC.

Periodista tecnológico con más de una década de experiencia en el sector. Editor de MuyComputerPro y coordinador de MuySeguridad, la publicación de seguridad informática de referencia.

Lo más leído