Los comandos de Po­we­r­She­ll son ese­n­cia­les para un uso efectivo del shell. Estos cmdlets están es­tru­c­tu­ra­dos ló­gi­ca­me­n­te y se pueden pe­r­so­na­li­zar con pa­rá­me­tros adi­cio­na­les. En esta guía, te mostramos los 40 po­we­r­she­ll commands más im­po­r­ta­n­tes para que puedas trabajar de forma óptima en tu sistema o red.

¿Qué son los comandos de Po­we­r­She­ll?

La Po­we­r­She­ll que viene prei­n­s­ta­la­da en los sistemas de Windows 7 en adelante permite in­tro­du­cir comandos de Po­we­r­She­ll para ser eje­cu­ta­dos por el sistema. A di­fe­re­n­cia de los comandos cmd en la línea de comandos, Po­we­r­She­ll cuenta con su propio conjunto de cmdlets, que se componen de un verbo y un su­s­ta­n­ti­vo separados por un guion. Además, los comandos de Po­we­r­She­ll se pueden detallar más uti­li­za­n­do pa­rá­me­tros op­cio­na­les, separados mediante un espacio. En la ac­tua­li­dad, no solo los ad­mi­ni­s­tra­do­res utilizan Po­we­r­She­ll, ya que la he­rra­mie­n­ta ofrece servicios muy valiosos para el ámbito del de­sa­rro­llo. Aunque existen cientos de comandos de Po­we­r­She­ll prei­n­s­ta­la­dos, aquí te pre­se­n­ta­mos los más im­po­r­ta­n­tes.

Los comandos de Po­we­r­She­ll más im­po­r­ta­n­tes

Los comandos de Po­we­r­She­ll te permiten llevar a cabo extensas tareas de ad­mi­ni­s­tra­ción con unas pocas entradas. A co­n­ti­nua­ción, se en­cue­n­tran los cmdlets que te serán más útiles. Los comandos que te vamos a mostrar pro­po­r­cio­nan una visión general de la es­tru­c­tu­ra completa de una red, hacen una lista de otros comandos de Po­we­r­She­ll, ayudan con las co­n­fi­gu­ra­cio­nes de seguridad ne­ce­sa­rias y generan análisis útiles. Aquí tienes algunos de los comandos de Po­we­r­She­ll más im­po­r­ta­n­tes:

1. Get-Module -All

Utiliza el comando Get-Module -All para obtener una visión general completa de todos los módulos de Po­we­r­She­ll que han sido im­po­r­ta­dos a tu sistema.

Get-Module -All
shell

2. Get-Command

El comando Get-Command te pro­po­r­cio­na una lista completa de todos los comandos de Po­we­r­She­ll pre­de­fi­ni­dos di­s­po­ni­bles. Utiliza Get-Command para conseguir una lista de todas las acciones posibles de manera ordenada y con una breve ex­pli­ca­ción de cada cmdlet. Esto se aplica tanto a los comandos pre­de­fi­ni­dos como a los que pueden estar di­s­po­ni­bles tras la in­s­ta­la­ción de módulos adi­cio­na­les.

Get-Command
shell

3. Get-Help

La lista que pro­po­r­cio­na Get-Command te ofrece una visión general, pero el cmdlet Get-Help te pro­po­r­cio­na in­fo­r­ma­ción más detallada sobre un comando es­pe­cí­fi­co y sus opciones. Get-Help accede a los archivos de ayuda que hay en tu PC y te pro­po­r­cio­na toda la in­fo­r­ma­ción di­s­po­ni­ble. Para hacer uso de esta función de ayuda, si­m­ple­me­n­te combina Get-Help con el comando cuya sintaxis quieras consultar.

Get-Help [[-Name] <String>] [-Path <String>] [-Category <String[]>] [-Component <String[]>] [-Functionality <String[]>] [-Role <String[]>] [-Examples] [<CommonParameters>]
shell

4. Get-Process

En diversas si­tua­cio­nes, resulta be­ne­fi­cio­so obtener rá­pi­da­me­n­te una visión general de todas las apli­ca­cio­nes, programas y procesos ac­tua­l­me­n­te en ejecución en tu sistema. Puedes obtener una visión general uti­li­za­n­do el comando Get-Process. Si lo in­tro­du­ces junto a una apli­ca­ción es­pe­cí­fi­ca, obtendrás in­fo­r­ma­ción detallada sobre la misma.

Get-Process
shell

5. Get-Service

El comando Get-Service funciona de forma similar al cmdlet Get-Process. No obstante, se distingue en que Get-Service te ofrece in­fo­r­ma­ción acerca de todos los servicios activos en tu sistema. Si solo quieres recibir in­fo­r­ma­ción sobre un servicio pa­r­ti­cu­lar o un tipo es­pe­cí­fi­co de servicio, basta con que es­pe­ci­fi­ques tu solicitud.

Get-Service
shell

6. Stop-Process

Puedes recurrir a diversos comandos de Po­we­r­She­ll para detener procesos di­re­c­ta­me­n­te desde la línea de comandos. Una opción para ello es utilizar el comando Stop-Process. Introduce el nombre, ID u otros atributos del proceso que quieras detener, como se muestra a co­n­ti­nua­ción:

Stop-Process -Name "nombredelproceso"
shell
Stop-Process -Id 3582 -Confirm -PassThru
shell

Puedes solicitar co­n­fi­r­ma­ción de la ejecución del comando uti­li­za­n­do la opción –Confirm. A su vez, la opción -PassThru te permite solicitar la co­n­fi­r­ma­ción de que el proceso se ha detenido. Si no utilizas alguna de las dos opciones, no recibirás ninguna co­n­fi­r­ma­ción au­to­má­ti­ca­me­n­te.

7. ConvertTo-HTML

Obtener una re­pre­se­n­ta­ción clara y rápida es esencial, permite ide­n­ti­fi­car posibles problemas o co­m­pli­ca­cio­nes lo antes posible. El comando ConvertTo-HTML convierte los re­su­l­ta­dos de los comandos de Po­we­r­She­ll en un archivo HTML y presenta toda la in­fo­r­ma­ción de forma or­ga­ni­za­da, en un formato de columnas fácil de leer. Aquí tienes un ejemplo práctico que demuestra su eficacia:

Get-Command | ConvertTo-Html > c:\temp\AllCommands.html
shell

8. ConvertTo-Xml

Si te surge la necesidad de re­pre­se­n­tar un objeto es­pe­cí­fi­co en formato XML, puedes hacerlo con el comando ConvertTo-Xml. En el siguiente ejemplo, se muestra cómo el comando convierte la fecha actual en un formato XML:

Get-Date | ConvertTo-Xml
shell

9. Where-Object

El comando Where-Object se emplea para filtrar los re­su­l­ta­dos de un cmdlet. Al ejecutar un comando, es común recibir una cantidad co­n­si­de­ra­ble de objetos, pero es probable que no se necesiten todos. Por ejemplo, si solo quieres ver los servicios creados o ac­tua­li­za­dos durante el año en curso, puedes ejecutar el siguiente comando:

Get-Service | Where-Object { $_.LastWriteTime -gt "01.01.2023" }
shell

10. Get-History

Si quieres vi­sua­li­zar todos los comandos de Po­we­r­She­ll que has ejecutado durante una sesión, Get-History es el cmdlet que estás buscando. Get-History te permite obtener una lista completa de todos los comandos de Po­we­r­She­ll que has ejecutado:

Get-History
shell

Con el siguiente comando solo recibirás los diez últimos comandos de Po­we­r­She­ll que has ejecutado:

Get-History -Count 10
shell

11. Clear-History

Por supuesto, también tienes la opción de eliminar el historial de los comandos de Po­we­r­She­ll que has utilizado. Utiliza el cmdlet Clear-History si quieres eliminar todas las entradas:

Clear-History
shell

Si solamente quieres eliminar de­te­r­mi­na­dos comandos de Po­we­r­She­ll, si­m­ple­me­n­te añade los pa­rá­me­tros co­rre­s­po­n­die­n­tes. El comando que se muestra a co­n­ti­nua­ción elimina todos los comandos de Po­we­r­She­ll que contienen el término “Help” o terminan con el término “Syntax”.

Clear-History -Command *Help*, *Syntax
shell

12. Add-History

También puedes añadir comandos de Po­we­r­She­ll a una sesión, lo que te permite volver a uti­li­zar­los di­re­c­ta­me­n­te en la próxima ocasión. El cmdlet que debes utilizar es Add-History.

Add-History
shell

13. Out-File

Si quieres guardar en tu ordenador el resultado que obtienes de los comandos de Po­we­r­She­ll, utiliza el cmdlet Out-File. Out-File almacena los comandos de Po­we­r­She­ll en un archivo de texto sin formato en la ruta que de­te­r­mi­nes.

Get-Process | Out-File -FilePath .\Process.txt
shell

14. Copy-Item

En Po­we­r­She­ll, cuentas con la po­si­bi­li­dad de duplicar elementos y guardar la copia en otra ubicación. Para lograrlo, utiliza el comando Copy-Item y es­pe­ci­fi­ca también el di­re­c­to­rio donde quieras guardar la copia. Funciona de la siguiente manera:

Copy-Item "C:\Carpeta1\Archivo.txt" -Destination "C:\Carpeta 2"
shell

15. Get-ChildItem

Utiliza el comando Get-ChildItem para tener acceso a elementos de una o varias ubi­ca­cio­nes de al­ma­ce­na­mie­n­to. Get-ChildItem también muestra los elementos su­bo­r­di­na­dos. De manera pre­de­te­r­mi­na­da, el comando muestra los atributos, la hora de la última mo­di­fi­ca­ción, el tamaño del archivo y el nombre del elemento. Si una ubicación de al­ma­ce­na­mie­n­to está vacía, no se vi­sua­li­za­rá nada.

Get-ChildItem -Path C:\Ejemplo
shell

Los atributos se muestran bajo la categoría “Modo”. Aquí tienes las pro­pie­da­des más comunes:

  • a (archivo)
  • d (di­re­c­to­rio)
  • h (oculto)
  • l (enlace)
  • r (solo lectura)
  • s (sistema)

16. Set-Au­the­n­ti­co­de­Si­g­na­tu­re

Utiliza el comando Set-Au­the­n­ti­co­de­Si­g­na­tu­re para dotar de una firma Au­the­n­ti­co­de a tus archivos y así pro­te­ge­r­los. Sin embargo, ten en cuenta que Set-Au­the­n­ti­co­de­Si­g­na­tu­re solo es efectivo en archivos co­m­pa­ti­bles con el Subject Interface Package (SIP).

$cert=Get-ChildItem -Path Cert:\CurrentUser\My -CodeSigningCert
Set-AuthenticodeSignature -FilePath PsTestInternet2.ps1 -Certificate $cert
shell

17. Invoke-Item

Utiliza el comando Invoke-Item si quieres realizar una acción pre­de­te­r­mi­na­da en un archivo es­pe­cí­fi­co. El comando garantiza que, por ejemplo, un archivo eje­cu­ta­ble se ejecute di­re­c­ta­me­n­te o que un archivo se abra en la apli­ca­ción co­rre­s­po­n­die­n­te. En el ejemplo que tienes a co­n­ti­nua­ción, el archivo se abriría en Microsoft Word por defecto:

Invoke-Item "C:\Test\Ejemplo.doc"
shell

18. Start-Job

Existe un comando diseñado para iniciar tareas en segundo plano en tu ordenador local. Start-Job te permite ejecutar un comando es­pe­cí­fi­co en segundo plano, sin afectar a tu sesión actual.

Start-Job -ScriptBlock { Get-Process -Name pwsh }
shell
Se­r­vi­do­res dedicados
Re­n­di­mie­n­to e in­no­va­ción
  • Pro­ce­sa­do­res de última ge­ne­ra­ción
  • Hardware dedicado de alto re­n­di­mie­n­to
  • Centros de datos con ce­r­ti­fi­ca­ción ISO

Ejecutar acciones con comandos de Po­we­r­She­ll

Mientras que los comandos de Po­we­r­She­ll an­te­rio­res se centraban en ofrecer una visión general, también puedes realizar muchas acciones con los cmdlets adecuados, pe­r­mi­tié­n­do­te utilizar tu sistema de forma más pro­du­c­ti­va. Los si­guie­n­tes comandos de Po­we­r­She­ll te serán útiles en tus tareas.

19. Clear-Content

El comando Clear-Content te permite eliminar el contenido de un elemento sin que el propio elemento se vea afectado. Un ejemplo de su apli­ca­ción sería un documento cuyo texto quieras eliminar, mientras conservas el archivo en sí de forma intacta. El comando sería el siguiente:

Clear-Content C:\Temp\Ejemplo.txt
shell

20. ForEach-Object

El comando ForEach-Object te permite ejecutar una acción sobre cada elemento de una colección de objetos de entrada al mismo tiempo. En el siguiente ejemplo, dividimos tres números enteros de una matriz por 10:

10000, 1000, 100 | ForEach-Object -Process {$_/10}
1000
100
10
shell

21. Compare-Object

Puedes utilizar el cmdlet Compare-Object para evitar tener que comparar di­fe­re­n­tes conjuntos de objetos ma­nua­l­me­n­te. El comando genera un informe que resalta las di­fe­re­n­cias entre los conjuntos de objetos. El primer conjunto se considera el objeto de re­fe­re­n­cia, mientras que el segundo actúa como el objeto de co­m­pa­ra­ción. Puedes es­pe­ci­fi­car los criterios que quieres comparar. Si omites esta in­fo­r­ma­ción, solo se co­m­pa­ra­rán los re­su­l­ta­dos de las cadenas de ca­ra­c­te­res. El resultado se presenta como elementos que solo están en el objeto de re­fe­re­n­cia (<==) y elementos que solo están en el objeto de co­m­pa­ra­ción (==>).

En el siguiente ejemplo, el Documento1.txt contiene los valores Berlin, London y Paris, mientras que el Documento2.txt contiene los valores Berlin, Vienna y Amsterdam.

Compare-Object -ReferenceObject (Get-Content -Path C:\Test\Documento1.txt) -DifferenceObject (Get-Content -Path C:\Test\Documento2.txt)
InputObject	SideIndicator
---------------	-----------------
Vienna		==>
Amsterdam	==>
London		<==
Paris		<==
shell

Los elementos co­n­te­ni­dos en ambos do­cu­me­n­tos (en este caso, “Berlin”) no se vi­sua­li­zan au­to­má­ti­ca­me­n­te de manera pre­de­te­r­mi­na­da.

22. New-Object

New-Object es uno de los comandos de Po­we­r­She­ll más útiles, te permite crear in­s­ta­n­cias de un framework .NET o de un Component Object Model (COM). Por ejemplo, si quieres crear un objeto System.Version en el co­n­s­tru­c­tor con la cadena “1.2.3.4”, el comando funciona de la siguiente manera:

New-Object -TypeName System.Version -ArgumentList "1.2.3.4"
shell

23. Select-Object

Utiliza el comando Select-Object para se­le­c­cio­nar un objeto o un grupo de objetos que cumplan de­te­r­mi­na­dos pa­rá­me­tros, las cuales puedes definir tú mismo. Los pa­rá­me­tros que puedes es­pe­ci­fi­car para este propósito son los si­guie­n­tes:

  • First
  • Last
  • Unique
  • Skip
  • Index

En el siguiente ejemplo, uti­li­za­mos los comandos Get-Process y Sort-Object de Po­we­r­She­ll para mostrar los tres procesos con mayor consumo de memoria en el momento que son eje­cu­ta­dos.

Get-Process | Sort-Object -Property WS | Select-Object -Last 3
shell

24. Set-Alias

Los atajos de teclado de Windows ofrecen una forma más rápida de ejecutar de­te­r­mi­na­das acciones. Asimismo, Po­we­r­She­ll también ofrece esta opción. El cmdlet Set-Alias te permite definir un atajo de teclado para diversos comandos de Po­we­r­She­ll. En el siguiente ejemplo, creamos el alias “ci” para ejecutar el comando Get-ChildItem durante la sesión actual.

PS> Set-Alias -Name ci -Value Get-ChildItem
PS> Get-Alias -Name ci
shell

25. Set-Location

Utiliza el comando Set-Location para cambiar la ubicación de al­ma­ce­na­mie­n­to pre­de­te­r­mi­na­da para tu trabajo. Las nuevas ubi­ca­cio­nes pueden ser di­re­c­to­rios, su­b­di­re­c­to­rios, ubi­ca­cio­nes del registro o rutas de pro­vee­do­res. En el siguiente ejemplo, definimos la unidad C: como la ubicación de al­ma­ce­na­mie­n­to actual:

PS C:\Windows\> Set-Location HKLM:\
PS HKLM:\> Set-Location C:
PS C:\Windows\>
shell

26. Set-Service

Utiliza el cmdlet Set-Service para gestionar un servicio, ya sea para iniciarlo, detenerlo, pausarlo o cambiar sus pro­pie­da­des. En el siguiente ejemplo, cambiamos el nombre de vi­sua­li­za­ción de un servicio de “Nueva Wo­r­k­s­ta­tion” a “Vieja Wo­r­k­s­ta­tion”.

Set-Service -Name Nueva Workstation -DisplayName "Vieja Workstation"
shell

27. Set-TimeZone

Utiliza el comando Set-TimeZone para cambiar la zona horaria de tu sistema. Si quieres co­n­fi­gu­rar la Hora Universal Coor­di­na­da (UTC, por sus siglas en inglés) como la nueva zona horaria de tu sistema, utiliza el siguiente comando:

Set-TimeZone -Id "UTC"
shell

28. Restart-Computer

Puedes reiniciar el sistema operativo de tu co­mpu­tado­ra local o de una co­mpu­tado­ra remota uti­li­za­n­do los comandos de Po­we­r­She­ll apro­pia­dos, como Restart-Computer. Aquí tienes la es­tru­c­tu­ra del comando.

Para tu ordenador local:

Restart-Computer
shell

Para otros or­de­na­do­res es­pe­cí­fi­cos en tu red:

Restart-Computer -ComputerName Server01, Server03
shell

29. Restart-Service

Puedes utilizar el comando Restart-Service de Po­we­r­She­ll para detener y reiniciar un servicio. Por ejemplo, ejecuta el siguiente comando para reiniciar todos los servicios que empiecen por “Net”:

PS C:\> Restart-Service -DisplayName "net*"
shell

30. Clear-Re­c­y­cle­Bin

Es re­co­me­n­da­ble vaciar la papelera de reciclaje de forma periódica. Puedes vaciarla desde el Po­we­r­She­ll uti­li­za­n­do el comando Clear-Re­c­y­cle­Bin.

Clear-RecycleBin
shell

31. Get-Co­m­pute­rI­n­fo

El comando Get-Co­m­pute­rI­n­fo se utiliza para consultar in­fo­r­ma­ción detallada sobre las pro­pie­da­des del sistema y del sistema operativo.

Get-ComputerInfo
shell

32. Move-Item

Existen varios comandos en Po­we­r­She­ll que te permiten mover un elemento de una ubicación a otra. Sin embargo, el comando más utilizado para ello es Move-Item. En el siguiente ejemplo, movemos el archivo “viejo.txt” de la unidad C: al di­re­c­to­rio D:\Temp, al mismo tiempo que lo re­no­m­bra­mos como “nuevo.txt”.

Move-Item -Path C:\viejo.txt -Destination D:\Temp\nuevo.txt
shell

Mo­ni­to­ri­za­ción y de­pu­ra­ción con los comandos de Po­we­r­She­ll adecuados

Los comandos de Po­we­r­She­ll de­s­ti­na­dos a la mo­ni­to­ri­za­ción y de­pu­ra­ción del sistema son he­rra­mie­n­tas útiles, es­pe­cia­l­me­n­te cuando se busca evaluar el re­n­di­mie­n­to de una nueva red en co­n­di­cio­nes realistas. A co­n­ti­nua­ción, te mostramos los comandos de Po­we­r­She­ll que te pueden resultar útiles en estas si­tua­cio­nes.

33. Debug-Process

La de­pu­ra­ción es un proceso im­po­r­ta­n­te para ga­ra­n­ti­zar el correcto fu­n­cio­na­mie­n­to de todas las co­n­fi­gu­ra­cio­nes y procesos. Para llevar a cabo este proceso, primero debes descargar y co­n­fi­gu­rar los de­pu­ra­do­res pe­r­ti­ne­n­tes. Luego puedes utilizar el comando Debug-Process. En el siguiente ejemplo, uti­li­za­mos un depurador para el proceso Explorer:

PS C:\> Debug-Process -Name "Explorer"
shell

Si quieres depurar varios procesos si­mu­l­tá­nea­me­n­te, si­m­ple­me­n­te sepáralos mediante comas.

34. Enable-PS­Brea­k­poi­nt

El comando Enable-PS­Brea­k­poi­nt te permite activar puntos de in­te­rru­p­ción (brea­k­poi­nts) es­pe­cí­fi­cos. Té­c­ni­ca­me­n­te, al cmdlet Enable-PS­Brea­k­poi­nt se le asigna el valor “true”. Utiliza el siguiente comando de Po­we­r­She­ll para activar todos los puntos de in­te­rru­p­ción de tu sesión actual:

Get-PSBreakpoint | Enable-PSBreakpoint
shell

También puedes activar puedes activar puntos de in­te­rru­p­ción uti­li­za­n­do sus ID es­pe­cí­fi­cos de la siguiente forma:

Enable-PSBreakpoint -ID 0, 3, 4
shell

35. Disable-PS­Brea­k­poi­nt

El comando Disable-PS­Brea­k­poi­nt te permite des­ac­ti­var los puntos de in­te­rru­p­ción de Po­we­r­She­ll. Té­c­ni­ca­me­n­te, al comando Enable-PS­Brea­k­poi­nt se le asigna el valor “false”. Introduce el siguiente comando para des­ac­ti­var un brea­k­poi­nt con el ID 0:

Disable-PSBreakpoint -Id 0
shell

36. Get-Counter

Cuando trabajas con di­s­po­si­ti­vos que ejecutan sistemas ope­ra­ti­vos Windows, puedes utilizar el comando Get-Counter para consultar tus datos de re­n­di­mie­n­to desde el Po­we­r­She­ll. Puedes utilizar el comando tanto para tu ordenador local como para un ordenador remoto. En el siguiente ejemplo, co­n­su­l­ta­mos los datos de re­n­di­mie­n­to del ordenador local:

Get-Counter -ListSet *
shell

37. Start-Sleep

En ciertas ocasiones, puede ser necesario pausar la ejecución de un script o una sesión, es­pe­cia­l­me­n­te cuando el sistema está ex­pe­ri­me­n­ta­n­do una so­bre­ca­r­ga. Po­we­r­She­ll dispone del comando Start-Sleep para este propósito, que te permite es­pe­ci­fi­car el periodo de tiempo durante el cual las ac­ti­vi­da­des se deben detener. En el siguiente ejemplo, la ejecución se detiene durante dos segundos.

Start-Sleep -Seconds 2
shell

38. Test-Path

Utiliza el comando Test-Path para saber si un archivo existe o no. Introduce un archivo junto a su ruta y comprueba si el archivo realmente se encuentra en dicha ruta. Los re­su­l­ta­dos que puedes obtener son “True” o “False”.

Test-Path -Path "C:\Documents and Settings\Usuario"
False
shell

39. Test-Co­n­ne­c­tion

Puedes evaluar las co­ne­xio­nes en tu red mediante Po­we­r­She­ll uti­li­za­n­do el comando Test-Co­n­ne­c­tion, el cual envía un paquete de solicitud de eco ICMP a los de­s­ti­na­ta­rios que es­pe­ci­fi­ques y espera una respuesta a través del Internet Control Message Protocol. En nuestro ejemplo, enviamos una solicitud al Server02 a través del protocolo IPv6.

Test-Connection -TargetName Server02 -IPv6
shell

40. Get-WinEvent

Para vi­sua­li­zar uno o varios registros de eventos en Po­we­r­She­ll, puedes emplear varios comandos. Uno de los más prácticos es el cmdlet Get-WinEvent. Introduce el siguiente comando para ver todos los registros de tu equipo local:

Get-WinEvent -ListLog *
shell
Ir al menú principal