La im­po­r­ta­n­cia de los ad­mi­ni­s­tra­do­res de sistemas en las empresas no debe su­b­e­s­ti­mar­se: una empresa solo puede alcanzar el máximo de su efi­cie­n­cia económica con una in­frae­s­tru­c­tu­ra de TI fiable y en continuo fu­n­cio­na­mie­n­to. Esto requiere, según el tamaño de la or­ga­ni­za­ción, que se mo­ni­to­reen y controlen docenas, si no cientos, de co­mpu­tado­ras de forma si­mu­l­tá­nea. Una tarea colosal que solo puede llevarse a cabo por es­pe­cia­li­s­tas ca­pa­ci­ta­dos con un profundo co­no­ci­mie­n­to de los contextos internos del sistema.

Si se produce un problema en varios or­de­na­do­res a la vez o si es necesario elegir una nueva solución de seguridad en toda la red lo antes posible, no sería eficiente que un ad­mi­ni­s­tra­dor visitara cada di­s­po­si­ti­vo uno por uno y repitiera siempre los mismos pasos. Windows Po­we­r­She­ll permite acelerar estos procesos y au­to­ma­ti­zar las tareas ru­ti­na­rias en la medida de lo posible, lo que si­m­pli­fi­ca co­n­si­de­ra­ble­me­n­te el trabajo del re­s­po­n­sa­ble del sistema. Averigua en nuestro artículo todas las po­si­bi­li­da­des que te ofrece este software.

¿Qué es Windows Po­we­r­She­ll?

Como su nombre indica, Windows Po­we­r­She­ll es una shell (en ca­s­te­llano, in­té­r­pre­te de comandos). En la te­c­no­lo­gía de la in­fo­r­ma­ción, este término hace re­fe­re­n­cia a una interfaz entre un ordenador y su usuario. El término inglés "shell" significa, li­te­ra­l­me­n­te, "concha" pero en sentido figurado se utiliza para describir una “carcasa exterior”. En in­fo­r­má­ti­ca, este término se refiere a la interfaz de usuario visible a través de la cual se puede in­ter­ac­tuar con las funciones internas del sistema en un ordenador.

Las shells suelen estar orie­n­ta­das a comandos y, por lo tanto, se controlan ex­clu­si­va­me­n­te con el teclado y la entrada de texto. Son una al­te­r­na­ti­va a las in­te­r­fa­ces gráficas de usuario (GUI) en las que se navega pri­n­ci­pa­l­me­n­te con el ratón, como el Ex­plo­ra­dor de Windows. Dado que las shells también pro­po­r­cio­nan acceso a un número mayor y más profundo de funciones y co­m­po­ne­n­tes del PC, son los pre­fe­ri­dos por muchos pro­fe­sio­na­les de TI y ad­mi­ni­s­tra­do­res de sistemas.

¿Para qué sirve Windows Po­we­r­She­ll?

Hasta hace poco, command.com y cmd.exe eran los in­té­r­pre­tes de líneas de comandos por defecto en los sistemas ope­ra­ti­vos DOS y Windows, ya que permiten a los usuarios avanzados abrir apli­ca­cio­nes de consola, so­lu­cio­nar problemas o navegar por las unidades de un PC. Por ejemplo, el comando netstat permite obtener datos básicos sobre todas las ac­ti­vi­da­des de la red. Sin embargo, command.com y cmd.exe siempre han tenido dos problemas: no tienen acceso a todos los co­m­po­ne­n­tes del sistema y sus lenguajes de script se co­n­si­de­ran limitados en su fu­n­cio­na­li­dad. Por lo tanto, siempre se han co­n­si­de­ra­do menos efi­cie­n­tes y completos que los shells de Linux y Unix actuales.

Como resultado, los de­sa­rro­lla­do­res de Microsoft empezaron en la década de 1990 a pensar cómo eliminar estas re­s­tri­c­cio­nes. Con el paso del tiempo de­sa­rro­lla­ron di­fe­re­n­tes shells. Una de las primeras so­lu­cio­nes que crearon fue Monad, que se introdujo por primera vez en 2003 y cambió su nombre por el de Po­we­r­She­ll tres años más tarde, re­su­l­ta­n­do ser pa­r­ti­cu­la­r­me­n­te in­no­va­do­ra.

Gracias a los “Common En­gi­nee­ri­ng Criteria” de Microsoft, que es­ta­ble­cen que a partir de 2009 todos los productos de servidor de la empresa sean co­m­pa­ti­bles con Po­we­r­She­ll, la he­rra­mie­n­ta se ha co­n­ve­r­ti­do en la solución central de ad­mi­ni­s­tra­ción y au­to­ma­ti­za­ción en Windows. Opcional desde Windows 2008 y estándar en las versiones po­s­te­rio­res, el software también está di­s­po­ni­ble bajo descarga como marco de trabajo de código abierto para versiones an­te­rio­res de Windows.

En 2016 se tomó la decisión de ofrecer la consola en todas las pla­ta­fo­r­mas. La intención de Microsoft detrás de esta idea es que Po­we­r­She­ll se convierta en una he­rra­mie­n­ta universal para ad­mi­ni­s­tra­do­res de sistemas de forma in­de­pe­n­die­n­te al sistema operativo en el que se trabaje, como Linux y macOS. Desde entonces, este shell se ha ido ex­te­n­die­n­do más y más.

¿Cuál es la di­fe­re­n­cia entre Po­we­r­She­ll y la línea de comandos común?

Pero ¿qué es exac­ta­me­n­te lo que distingue al nuevo marco de trabajo de Microsoft de la conocida línea de comandos? En pocas palabras, Po­we­r­She­ll tiene todas las ca­ra­c­te­rí­s­ti­cas de cmd.exe pero también realiza otras tareas que antes eran im­pe­n­sa­bles en Windows.

Po­we­r­She­ll pro­po­r­cio­na bá­si­ca­me­n­te el mismo rango de comandos que cmd.exe. Si se conocen los comandos estándar más comunes se puede utilizar de la misma manera que la línea de comandos. Sin embargo, también permite el acceso a elementos internos más profundos de Windows a los que antes no se podía acceder con cmd.exe, por ejemplo, el Registry y la Windows Ma­na­ge­me­nt In­s­tru­me­n­ta­tion (WMI). La línea de comandos de Windows Po­we­r­She­ll sigue, además, la lógica de una es­tru­c­tu­ra de comandos y sintaxis co­n­si­s­te­n­tes. En este sentido supera a la línea de comandos.

Otra ca­ra­c­te­rí­s­ti­ca que hace destacar a Windows Po­we­r­She­ll es que, a di­fe­re­n­cia de la línea de comandos y los sistemas tipo Unix, el programa está basado en objetos, en lugar de emitir los re­su­l­ta­dos de los comandos en forma de texto (strings). Cada objeto tiene pro­pie­da­des (pro­pe­r­ties) y métodos (methods) que definen cómo se puede utilizar. Por ejemplo, el objeto de proceso de Windows re­pre­se­n­ta pro­pie­da­des tales como nombres de proceso e IDs, así como métodos para pausar y terminar procesos.

Debido a que los re­su­l­ta­dos de los comandos siempre se emiten como objetos .NET, Po­we­r­She­ll permite por se­g­me­n­ta­ción (pi­pe­li­ni­ng) realizar tareas mucho más complejas que cmd.exe. Esta función utiliza la salida de un objeto como entrada para el siguiente objeto. De esta forma podrían filtrarse volúmenes grandes y complejos de datos por ex­te­n­sio­nes de archivo y emitirse como un listado más fácil de leer.

Windows Po­we­r­She­ll no es solo una línea de comandos, sino que también actúa como entorno de scripting potente y so­fi­s­ti­ca­do. En él se pueden escribir comandos propios o combinar varios para si­m­pli­fi­car las tareas de gestión del sistema. El control remoto también permite ejecutar se­cue­n­cias de comandos en cualquier número de sistemas de forma si­mu­l­tá­nea, in­de­pe­n­die­n­te­me­n­te de la ubicación y, por lo tanto, ad­mi­ni­s­trar­los, co­n­fi­gu­rar­los, re­gi­s­trar­los y re­pa­rar­los.

Esta variedad de opciones y ca­ra­c­te­rí­s­ti­cas también revela cuál es el principal público objetivo de Windows Po­we­r­She­ll: pro­fe­sio­na­les de TI y ad­mi­ni­s­tra­do­res de sistemas que tienen un profundo co­no­ci­mie­n­to de los shells y están di­s­pue­s­tos a fa­mi­lia­ri­zar­se con Po­we­r­She­ll para una mayor efi­cie­n­cia en su trabajo. Sin embargo, para los usuarios que trabajan pri­n­ci­pa­l­me­n­te con la interfaz gráfica de usuario de Windows y solo utilizan la ventana de comandos es­po­rá­di­ca­me­n­te, Po­we­r­She­ll no ofrece ningún valor añadido pa­r­ti­cu­lar, es­pe­cia­l­me­n­te porque el tiempo requerido para adquirir los co­no­ci­mie­n­tos ne­ce­sa­rios es bastante alto.

A co­n­ti­nua­ción, te ofrecemos un rápido resumen de las ventajas y de­s­ve­n­ta­jas de Windows Po­we­r­She­ll en co­m­pa­ra­ción con la línea de comandos:

¿Por qué elegir Po­we­r­She­ll? ¿Qué de­s­ve­n­ta­jas tiene Po­we­r­She­ll?
✓ Todos los comandos di­s­po­ni­bles desde la línea de comandos ✗ Requiere grandes co­no­ci­mie­n­tos
✓ Acceso a elementos internos más profundos de Windows como los registros y WMI ✗ Dirigido pri­n­ci­pa­l­me­n­te a pro­fe­sio­na­les de TI y ad­mi­ni­s­tra­do­res de sistemas
✓ Fu­n­cio­na­mie­n­to más eficiente gracias a una es­tru­c­tu­ra de comandos y una sintaxis cohe­re­n­tes ✗ Ningún beneficio in­cre­me­n­ta­do para los usuarios aco­s­tu­m­bra­dos a una GUI y que raramente usan la línea de comandos
✓ La orie­n­ta­ción completa a objetos permite la ejecución de tareas más complejas mediante pi­pe­li­ni­ng ✗ Aco­s­tu­m­brar­se cuesta un poco
✓ Un completo entorno de scripting permite una au­to­ma­ti­za­ción eficiente de los procesos  
✓ Ad­mi­ni­s­tra­ción in­de­pe­n­die­n­te de la ubicación de varios sistemas por control remoto  

¿Cómo funciona Windows Po­we­r­She­ll?

Po­we­r­She­ll consta bá­si­ca­me­n­te de dos co­m­po­ne­n­tes, a saber, el motor Po­we­r­She­ll y el lenguaje de scripts Po­we­r­She­ll. Ambos pueden uti­li­zar­se por separado o en co­m­bi­na­ción para obtener la máxima fu­n­cio­na­li­dad del programa.

El fu­n­cio­na­mie­n­to de Po­we­r­She­ll

El in­té­r­pre­te de línea de comandos (en inglés, command-line in­te­r­pre­ter o CLI) de Po­we­r­She­ll pro­po­r­cio­na al usuario acceso a las funciones internas del sistema operativo mediante entradas de teclado. Los comandos del programa se denominan "cmdlets" (pro­nu­n­cia­dos "co­m­ma­n­d­lets", que co­rre­s­po­n­den apro­xi­ma­da­me­n­te a la palabra "pequeños comandos"). Según una sintaxis co­n­si­s­te­n­te, siempre se componen de un verbo y un su­s­ta­n­ti­vo en singular, por ejemplo, Stop-Process o Sort-Object. Los pa­rá­me­tros se es­pe­ci­fi­can en un cmdlet según la fórmula -Parámetro [Valor], por ejemplo:

Get-EventLog System Newest 3 (para llamar a las tres entradas más recientes en el registro de eventos del sistema)
Consejo

En Po­we­r­She­ll se suelen in­tro­du­cir comandos con ma­yú­s­cu­las, pero las mi­nú­s­cu­las también funcionan.

Los más de 100 cmdlets de núcleo también incluyen comandos estándar de uso frecuente desde la línea de comandos, di­s­po­ni­bles entre otros “alias” entre otros para ayudar a los usuarios a comenzar con el nuevo in­té­r­pre­te de comandos. Por ejemplo, el comando cd, destinado a cambiar un di­re­c­to­rio, tiene el equi­va­le­n­te Set-Location, que realiza exac­ta­me­n­te la misma función. Para ver todos los alias pre­de­te­r­mi­na­dos, utiliza el cmdlet Get-Alias. También puedes utilizar el cmdlet Set-Alias para crear tus propios alias. Por ejemplo, puedes utilizar la siguiente secuencia para asignar el alias "ed" al comando "notepad" (para el programa Notepad), de modo que se necesiten menos pu­l­sa­cio­nes de teclas para ejecutar el programa:

Set-Alias ed notepad (para abrir Notepad con el comando ed)
Set-Alias scr1 C:\Users\IEUser\Desktop\script1.ps1 (para iniciar un script con la abreviatura scr1)

La siguiente tabla muestra algunos ejemplos de cmdlets de uso más frecuente y sus alias co­rre­s­po­n­die­n­tes:

Alias Cmdlet Función
cd Set-Location Cambiar el di­re­c­to­rio actual
dir Get-ChildItem Enumerar todos los elementos de una carpeta
gi Get-Item Llamada a un elemento es­pe­cí­fi­co
ps Get-Process Listar todos los procesos
gsv Get-Service Listar todos los servicios in­s­ta­la­dos
gm Get-Member Vi­sua­li­zar todas las pro­pie­da­des y los métodos de un objeto
clear Clear-Host Vaciar el host Po­we­r­She­ll

La es­tru­c­tu­ra de comandos sencilla y fácil de entender de Po­we­r­She­ll te permite trabajar de forma más eficiente que en la línea de comandos. Para ahorrar aún más tiempo, puedes utilizar la tecla [Tab] para completar au­to­má­ti­ca­me­n­te cmdlets escritos pa­r­cia­l­me­n­te. En muchos casos, el programa incluso reconoce comandos escritos de forma in­co­m­ple­ta.

Los cmdlets pueden eje­cu­tar­se de forma in­di­vi­dual o en conjunto para que el siguiente objeto pueda leer y re­uti­li­zar la llamada a un objeto. Para añadir dos cmdlets al mismo conjunto, si­m­ple­me­n­te utiliza el icono |. De esta manera, por ejemplo, puedes listar todos los procesos di­s­po­ni­bles y al mismo tiempo cla­si­fi­car­los por su ID:

Get-Process | Sort-Object ID

Las variables se definen con el símbolo $. Como de costumbre, se pueden utilizar para almacenar funciones de modo que se pueda acceder a ellas de nuevo en un momento posterior durante el proceso. Po­we­r­She­ll es incluso capaz de almacenar los re­su­l­ta­dos de múltiples comandos a la vez, por ejemplo:

$a = (Get-Process | Sort-Object ID)

El lenguaje de scripts Po­we­r­She­ll

Gran parte del lenguaje de pro­gra­ma­ción de Po­we­r­She­ll puede parecerse a algunos lenguajes de pro­gra­ma­ción, como C# y otros. No solo puedes usarlo para escribir tus propios cmdlets (y co­m­pa­r­ti­r­los con otros usuarios si es necesario), sino que también puedes juntar múltiples comandos de secuencia en un archivo de script con el formato .ps1 para ampliar la fu­n­cio­na­li­dad del shell. Se pueden concebir numerosos ejemplos de apli­ca­ción: desde la ejecución de tareas ru­ti­na­rias sencillas hasta la au­to­ma­ti­za­ción casi completa de procesos de su­pe­r­vi­sión y control. Los scripts siempre contienen una de­s­cri­p­ción de la apli­ca­ción y se ejecutan con el prefijo ".". Un ejemplo:

.C:\Users\IEUser\Desktop\script1.ps1

¿Cuáles son las apli­ca­cio­nes típicas de Po­we­r­She­ll?

Con su­fi­cie­n­te práctica y ex­pe­rie­n­cia, Windows Po­we­r­She­ll puede hacer que muchas tareas de ad­mi­ni­s­tra­ción de sistemas sean mucho más efi­cie­n­tes. A co­n­ti­nua­ción, te ex­pli­ca­re­mos cuatro ejemplos típicos de su apli­ca­ción.

Or­ga­ni­za­ción de di­re­c­to­rios: renombrar varios archivos a la vez

Imagina que necesitas renombrar alrededor de 1 000 do­cu­me­n­tos con el esquema texto (1).docx, texto (2).docx, etc., de tal manera que los espacios vacíos en el nombre del archivo se re­em­pla­cen por guiones bajos. En ese caso, no sería aco­n­se­ja­ble ca­m­biar­los uno a uno, sino que pro­ba­ble­me­n­te usarías cmd.exe o –aún mejor– una he­rra­mie­n­ta externa. Po­we­r­She­ll permite aún más fle­xi­bi­li­dad a la hora de renombrar grandes ca­n­ti­da­des de datos.

Para ello, dirígete primero al di­re­c­to­rio en el que se en­cue­n­tran los do­cu­me­n­tos. Esto se puede hacer fá­ci­l­me­n­te usando el cmdlet Set-Location en co­m­bi­na­ción con la ruta completa del archivo. He aquí un ejemplo:

Set-Location C:\Users\IEUser\Desktop\Text folder

También puedes usar el Ex­plo­ra­dor de Windows para navegar al di­re­c­to­rio apropiado, hacer clic en la barra de ruta y entrar en "po­we­r­she­ll" para abrir una ventana del di­re­c­to­rio. Utiliza el siguiente cmdlet para renombrar los do­cu­me­n­tos se­le­c­cio­na­dos:

Get-ChildItem *docx | Rename-Item -NewName {$_.name -replace " ","_"}

Ex­pli­ca­ción: Get-ChildItem lista todos los archivos del di­re­c­to­rio. La adición *docx solo filtra los do­cu­me­n­tos de Word con el formato co­rre­s­po­n­die­n­te –los do­cu­me­n­tos PDF en la carpeta tampoco se tendrán en cuenta. Utiliza el icono | para añadir otro comando al conjunto, Rename-Item, indica que algo debe ser re­no­m­bra­do. -NewName es­pe­ci­fi­ca el nuevo nombre usando un bloque de script que funciona con la variable $_.name que re­pre­se­n­ta el objeto actual. Y .name es la propiedad con el nombre del archivo. Por último, utiliza el parámetro -replace para es­pe­ci­fi­car que todos los espacios deben co­n­ve­r­ti­r­se en guiones bajos.

Ad­qui­si­ción de datos: co­m­pro­ba­ción de los servicios en ejecución en un PC

Antes de im­ple­me­n­tar una nueva solución de seguridad en la red, debes comprobar qué servicios ya están in­s­ta­la­dos en un PC de­te­r­mi­na­do. La he­rra­mie­n­ta básica es el cmdlet Get-Service, que enumera todos los servicios. También puedes utilizar las funciones de filtro de Po­we­r­She­ll para mostrar solo un su­b­co­n­ju­n­to de los re­su­l­ta­dos, por ejemplo, todos los servicios en ejecución. Esto funciona con el siguiente cmdlet:

Get-Service | Where-Object {$_.status -eq "running"}

La salida de Get-Service dirige al cmdlet Where-Object, que filtra todos los servicios por su estado (re­pre­se­n­ta­do por la variable $_.status y el parámetro -eq "running") y lista los servicios en ejecución. Si es necesario, también puedes cla­si­fi­car la lista pre­fi­l­tra­da por nombre de vi­sua­li­za­ción añadiendo otro cmdlet al conjunto:

Get-Service | Where-Object {$_.status -eq "running"} | Sort-Object DisplayName
Consejo

Con la adición de more al conjunto también puedes re­es­tru­c­tu­rar la larga lista de servicio para que puedas navegar a través de ella página por página.

Solución de problemas: buscar errores del sistema en el registro de eventos

Los registros de eventos pro­po­r­cio­nan a los ad­mi­ni­s­tra­do­res del sistema in­fo­r­ma­ción sobre los mensajes de error en las apli­ca­cio­nes, el sistema operativo o las funciones de seguridad de un di­s­po­si­ti­vo. Utiliza el comando Get-EventLog para ver y ad­mi­ni­s­trar estos registros. Por ejemplo, si deseas ver los mensajes de error en la pantalla de eventos "Sistema", introduce lo siguiente:

Get-EventLog System | Where-Object {$_.entryType -Match "Error"}

Si Po­we­r­She­ll devuelve de­ma­sia­dos re­su­l­ta­dos, puedes utilizar el parámetro -Newest 100 para re­s­tri­n­gir la lista a las 100 entradas de registro de sistema más recientes, que luego se filtran para detectar errores:

Get-EventLog System -Newest 100 | Where-Object {$_.entryType -Match "Error"}

Para obtener in­fo­r­ma­ción detallada sobre los mensajes de error in­di­vi­dua­les, reenvía la salida de este conducto a Cmdlet Format-List:

Get-EventLog System -Newest 100 | Where-Object {$_.entryType -Match "Error"} | Format-List

Te­le­ma­n­te­ni­mie­n­to: servicios de control en or­de­na­do­res remotos

Windows Ma­na­ge­me­nt In­s­tru­me­n­ta­tion (WMI) pro­po­r­cio­na acceso a casi todos los ajustes y funciones de los or­de­na­do­res con Windows y es, por lo tanto, la he­rra­mie­n­ta más im­po­r­ta­n­te para la au­to­ma­ti­za­ción de procesos y para el ma­n­te­ni­mie­n­to remoto de es­ta­cio­nes de trabajo digitales. También puedes aplicar el cmdlet Get-WmiObject asociado a equipos remotos, de modo que puedas usar Windows Po­we­r­She­ll como he­rra­mie­n­ta de ad­mi­ni­s­tra­ción del sistema. Por ejemplo, si necesitas in­fo­r­ma­ción de la clase Win32_BIOS sobre un ordenador de la red (re­pre­se­n­ta­do por el parámetro -Co­m­pu­te­r­Na­me), el siguiente comando te ayudará:

Get-WmiObject Win32_Bios -Computername

Al­te­r­na­ti­va­me­n­te, puedes trabajar con el parámetro -Class seguido de la ruta completa de la clase:

Get-WmiObject -Rechnername -Class Win32_Service

Ahora puedes acceder de forma remota a la co­n­fi­gu­ra­ción interna del sistema del ordenador de terceros. El siguiente ejemplo muestra cómo obtener los métodos del servicio de Cliente de Windows Update para averiguar qué cmdlets se pueden usar para iniciarlo, detenerlo y re­ini­ciar­lo:

Get-WmiObject -Computername -Class Win32_Service -Filter "Name='wuauserv'"

Como puedes ver, el nombre de host Get-WmiObject primero localiza el host deseado y luego se­le­c­cio­na la clase Win32_Service usando el parámetro -Class. El Cliente de Windows Update con la abre­via­tu­ra wuauserv se filtra de los servicios exi­s­te­n­tes. El conocido cmdlet Get-Member y el parámetro -Type Method te pro­po­r­cio­nan una visión general de todos los métodos de wuauserv que te permiten controlar el cliente de forma remota:

Get-WmiObject -Computername -Class Win32_Service -Filter "Name='wuauserv'" | Get-Member -Type Method
Ir al menú principal