# Comandos de PowerShell: los 40 cmdlets más importantes

Los comandos de PowerShell son esenciales para un uso efectivo del shell. Estos cmdlets están estructurados lógicamente y se pueden personalizar con parámetros adicionales. En esta guía, te mostramos los 40 powershell commands más importantes para que puedas trabajar de forma óptima en tu sistema o red.

## ¿Qué son los comandos de PowerShell?

La [PowerShell](https://www.ionos.es/digitalguide/servidores/know-how/windows-powershell/) que viene preinstalada en los sistemas de Windows 7 en adelante permite introducir comandos de PowerShell para ser ejecutados por el sistema. A diferencia de los [comandos cmd](https://www.ionos.es/digitalguide/servidores/know-how/comandos-cmd/) en la línea de comandos, PowerShell cuenta con su propio conjunto de cmdlets, que **se componen de un verbo y un sustantivo** separados por un guion. Además, los comandos de PowerShell se pueden detallar más utilizando **parámetros opcionales**, separados mediante un espacio. En la actualidad, no solo los administradores utilizan PowerShell, ya que la herramienta ofrece servicios muy valiosos para el ámbito del desarrollo. Aunque existen cientos de comandos de PowerShell preinstalados, aquí te presentamos los más importantes.

## Los comandos de PowerShell más importantes

Los comandos de PowerShell te permiten llevar a cabo extensas tareas de administración con unas pocas entradas. A continuación, se encuentran los cmdlets que te serán más útiles. Los comandos que te vamos a mostrar proporcionan una visión general de la estructura completa de una red, hacen una lista de otros comandos de PowerShell, ayudan con las configuraciones de seguridad necesarias y generan análisis útiles. Aquí tienes algunos de los comandos de PowerShell más importantes:

### 1. Get-Module -All

Utiliza el comando **Get-Module -All** para obtener una visión general completa de todos los módulos de PowerShell que han sido importados a tu sistema.

```shell
Get-Module -All
```

### 2. Get-Command

El comando **Get-Command** te proporciona una lista completa de todos los comandos de PowerShell predefinidos disponibles. Utiliza Get-Command para conseguir una lista de todas las acciones posibles de manera ordenada y con una breve explicación de cada cmdlet. Esto se aplica tanto a los comandos predefinidos como a los que pueden estar disponibles tras la instalación de módulos adicionales.

```shell
Get-Command
```

### 3. Get-Help

La lista que proporciona Get-Command te ofrece una visión general, pero el cmdlet **Get-Help** te proporciona información más detallada sobre un comando específico y sus opciones. Get-Help accede a los archivos de ayuda que hay en tu PC y te proporciona toda la información disponible. Para hacer uso de esta función de ayuda, simplemente combina Get-Help con el comando cuya sintaxis quieras consultar.

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

### 4. Get-Process

En diversas situaciones, resulta beneficioso obtener rápidamente una visión general de todas las aplicaciones, programas y procesos actualmente en ejecución en tu sistema. Puedes obtener una visión general utilizando el comando **Get-Process**. Si lo introduces junto a una aplicación específica, obtendrás información detallada sobre la misma.

```shell
Get-Process
```

### 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 información acerca de todos los servicios activos en tu sistema. Si solo quieres recibir información sobre un servicio particular o un tipo específico de servicio, basta con que especifiques tu solicitud.

```shell
Get-Service
```

### 6. Stop-Process

Puedes recurrir a diversos comandos de PowerShell para detener procesos directamente 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 continuación:

```shell
Stop-Process -Name "nombredelproceso"
```

```shell
Stop-Process -Id 3582 -Confirm -PassThru
```

Puedes solicitar confirmación de la ejecución del comando utilizando la opción –Confirm. A su vez, la opción -PassThru te permite solicitar la confirmación de que el proceso se ha detenido. Si no utilizas alguna de las dos opciones, no recibirás ninguna confirmación automáticamente.

### 7. ConvertTo-HTML

Obtener una representación clara y rápida es esencial, permite identificar posibles problemas o complicaciones lo antes posible. El comando **ConvertTo-HTML** convierte los resultados de los comandos de PowerShell en un archivo HTML y presenta toda la información de forma organizada, en un formato de columnas fácil de leer. Aquí tienes un ejemplo práctico que demuestra su eficacia:

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

### 8. ConvertTo-Xml

Si te surge la necesidad de representar un objeto específico 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:

```shell
Get-Date | ConvertTo-Xml
```

### 9. Where-Object

El comando **Where-Object** se emplea para filtrar los resultados de un cmdlet. Al ejecutar un comando, es común recibir una cantidad considerable de objetos, pero es probable que no se necesiten todos. Por ejemplo, si solo quieres ver los servicios creados o actualizados durante el año en curso, puedes ejecutar el siguiente comando:

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

### 10. Get-History

Si quieres visualizar todos los comandos de PowerShell 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 PowerShell que has ejecutado:

```shell
Get-History
```

Con el siguiente comando solo recibirás los diez últimos comandos de PowerShell que has ejecutado:

```shell
Get-History -Count 10
```

### 11. Clear-History

Por supuesto, también tienes la opción de eliminar el historial de los comandos de PowerShell que has utilizado. Utiliza el cmdlet **Clear-History** si quieres eliminar todas las entradas:

```shell
Clear-History
```

Si solamente quieres eliminar determinados comandos de PowerShell, simplemente añade los parámetros correspondientes. El comando que se muestra a continuación elimina todos los comandos de PowerShell que contienen el término “Help” o terminan con el término “Syntax”.

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

### 12. Add-History

También puedes añadir comandos de PowerShell a una sesión, lo que te permite volver a utilizarlos directamente en la próxima ocasión. El cmdlet que debes utilizar es **Add-History**.

```shell
Add-History
```

### 13. Out-File

Si quieres guardar en tu ordenador el resultado que obtienes de los comandos de PowerShell, utiliza el cmdlet **Out-File**. Out-File almacena los comandos de PowerShell en un archivo de texto sin formato en la ruta que determines.

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

### 14. Copy-Item

En PowerShell, cuentas con la posibilidad de duplicar elementos y guardar la copia en otra ubicación. Para lograrlo, utiliza el comando **Copy-Item** y especifica también el directorio donde quieras guardar la copia. Funciona de la siguiente manera:

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

### 15. Get-ChildItem

Utiliza el comando **Get-ChildItem** para tener acceso a elementos de una o varias ubicaciones de almacenamiento. Get-ChildItem también muestra los elementos subordinados. De manera predeterminada, el comando muestra los atributos, la hora de la última modificación, el tamaño del archivo y el nombre del elemento. Si una ubicación de almacenamiento está vacía, no se visualizará nada.

```shell
Get-ChildItem -Path C:\Ejemplo
```

Los atributos se muestran bajo la categoría “Modo”. Aquí tienes las propiedades más comunes:

- a (archivo)
- d (directorio)
- h (oculto)
- l (enlace)
- r (solo lectura)
- s (sistema)

### 16. Set-AuthenticodeSignature

Utiliza el comando **Set-AuthenticodeSignature** para dotar de una firma Authenticode a tus archivos y así protegerlos. Sin embargo, ten en cuenta que Set-AuthenticodeSignature solo es efectivo en archivos compatibles con el Subject Interface Package (SIP).

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

### 17. Invoke-Item

Utiliza el comando **Invoke-Item** si quieres realizar una acción predeterminada en un archivo específico. El comando garantiza que, por ejemplo, un archivo ejecutable se ejecute directamente o que un archivo se abra en la aplicación correspondiente. En el ejemplo que tienes a continuación, el archivo se abriría en Microsoft Word por defecto:

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

### 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 específico en segundo plano, sin afectar a tu sesión actual.

```shell
Start-Job -ScriptBlock { Get-Process -Name pwsh }
```

## Ejecutar acciones con comandos de PowerShell

Mientras que los comandos de PowerShell anteriores se centraban en ofrecer una visión general, también puedes realizar muchas acciones con los cmdlets adecuados, permitiéndote utilizar tu sistema de forma más productiva. Los siguientes comandos de PowerShell 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 aplicación sería un documento cuyo texto quieras eliminar, mientras conservas el archivo en sí de forma intacta. El comando sería el siguiente:

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

### 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:

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

### 21. Compare-Object

Puedes utilizar el cmdlet **Compare-Object** para evitar tener que comparar diferentes conjuntos de objetos manualmente. El comando genera un informe que resalta las diferencias entre los conjuntos de objetos. El primer conjunto se considera el objeto de referencia, mientras que el segundo actúa como el objeto de comparación. Puedes especificar los criterios que quieres comparar. Si omites esta información, solo se compararán los resultados de las cadenas de caracteres. El resultado se presenta como elementos que solo están en el objeto de referencia (&lt;==) y elementos que solo están en el objeto de comparación (==&gt;).

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.

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

Los elementos contenidos en ambos documentos (en este caso, “Berlin”) no se visualizan automáticamente de manera predeterminada.

### 22. New-Object

**New-Object** es uno de los comandos de PowerShell más útiles, te permite crear instancias de un framework .NET o de un Component Object Model (COM). Por ejemplo, si quieres crear un objeto System.Version en el constructor con la cadena “1.2.3.4”, el comando funciona de la siguiente manera:

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

### 23. Select-Object

Utiliza el comando **Select-Object** para seleccionar un objeto o un grupo de objetos que cumplan determinados parámetros, las cuales puedes definir tú mismo. Los parámetros que puedes especificar para este propósito son los siguientes:

- First
- Last
- Unique
- Skip
- Index

En el siguiente ejemplo, utilizamos los comandos Get-Process y Sort-Object de PowerShell para mostrar los tres procesos con mayor consumo de memoria en el momento que son ejecutados.

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

### 24. Set-Alias

Los [atajos de teclado de Windows](https://www.ionos.es/digitalguide/servidores/configuracion/atajos-de-teclado-de-windows/) ofrecen una forma más rápida de ejecutar determinadas acciones. Asimismo, PowerShell también ofrece esta opción. El cmdlet **Set-Alias** te permite definir un atajo de teclado para diversos comandos de PowerShell. En el siguiente ejemplo, creamos el alias “ci” para ejecutar el comando Get-ChildItem durante la sesión actual.

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

### 25. Set-Location

Utiliza el comando **Set-Location** para cambiar la ubicación de almacenamiento predeterminada para tu trabajo. Las nuevas ubicaciones pueden ser directorios, subdirectorios, ubicaciones del registro o rutas de proveedores. En el siguiente ejemplo, definimos la unidad C: como la ubicación de almacenamiento actual:

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

### 26. Set-Service

Utiliza el cmdlet **Set-Service** para gestionar un servicio, ya sea para iniciarlo, detenerlo, pausarlo o cambiar sus propiedades. En el siguiente ejemplo, cambiamos el nombre de visualización de un servicio de “Nueva Workstation” a “Vieja Workstation”.

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

### 27. Set-TimeZone

Utiliza el comando **Set-TimeZone** para cambiar la zona horaria de tu sistema. Si quieres configurar la Hora Universal Coordinada (UTC, por sus siglas en inglés) como la nueva zona horaria de tu sistema, utiliza el siguiente comando:

```shell
Set-TimeZone -Id "UTC"
```

### 28. Restart-Computer

Puedes reiniciar el sistema operativo de tu computadora local o de una computadora remota utilizando los comandos de PowerShell apropiados, como **Restart-Computer**. Aquí tienes la estructura del comando.

Para tu ordenador local:

```shell
Restart-Computer
```

Para otros ordenadores específicos en tu red:

```shell
Restart-Computer -ComputerName Server01, Server03
```

### 29. Restart-Service

Puedes utilizar el comando **Restart-Service** de PowerShell para detener y reiniciar un servicio. Por ejemplo, ejecuta el siguiente comando para reiniciar todos los servicios que empiecen por “Net”:

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

### 30. Clear-RecycleBin

Es recomendable vaciar la papelera de reciclaje de forma periódica. Puedes vaciarla desde el PowerShell utilizando el comando **Clear-RecycleBin**.

```shell
Clear-RecycleBin
```

### 31. Get-ComputerInfo

El comando **Get-ComputerInfo** se utiliza para consultar información detallada sobre las propiedades del sistema y del sistema operativo.

```shell
Get-ComputerInfo
```

### 32. Move-Item

Existen varios comandos en PowerShell 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 directorio D:\\Temp, al mismo tiempo que lo renombramos como “nuevo.txt”.

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

## Monitorización y depuración con los comandos de PowerShell adecuados

Los comandos de PowerShell destinados a la monitorización y depuración del sistema son herramientas útiles, especialmente cuando se busca evaluar el rendimiento de una nueva red en condiciones realistas. A continuación, te mostramos los comandos de PowerShell que te pueden resultar útiles en estas situaciones.

### 33. Debug-Process

La depuración es un proceso importante para garantizar el correcto funcionamiento de todas las configuraciones y procesos. Para llevar a cabo este proceso, primero debes descargar y configurar los depuradores pertinentes. Luego puedes utilizar el comando **Debug-Process**. En el siguiente ejemplo, utilizamos un depurador para el proceso Explorer:

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

Si quieres depurar varios procesos simultáneamente, simplemente sepáralos mediante comas.

### 34. Enable-PSBreakpoint

El comando **Enable-PSBreakpoint** te permite activar puntos de interrupción (breakpoints) específicos. Técnicamente, al cmdlet Enable-PSBreakpoint se le asigna el valor “true”. Utiliza el siguiente comando de PowerShell para activar todos los puntos de interrupción de tu sesión actual:

```shell
Get-PSBreakpoint | Enable-PSBreakpoint
```

También puedes activar puedes activar puntos de interrupción utilizando sus ID específicos de la siguiente forma:

```shell
Enable-PSBreakpoint -ID 0, 3, 4
```

### 35. Disable-PSBreakpoint

El comando **Disable-PSBreakpoint** te permite desactivar los puntos de interrupción de PowerShell. Técnicamente, al comando Enable-PSBreakpoint se le asigna el valor “false”. Introduce el siguiente comando para desactivar un breakpoint con el ID 0:

```shell
Disable-PSBreakpoint -Id 0
```

### 36. Get-Counter

Cuando trabajas con dispositivos que ejecutan sistemas operativos Windows, puedes utilizar el comando **Get-Counter** para consultar tus datos de rendimiento desde el PowerShell. Puedes utilizar el comando tanto para tu ordenador local como para un ordenador remoto. En el siguiente ejemplo, consultamos los datos de rendimiento del ordenador local:

```shell
Get-Counter -ListSet *
```

### 37. Start-Sleep

En ciertas ocasiones, puede ser necesario pausar la ejecución de un script o una sesión, especialmente cuando el sistema está experimentando una sobrecarga. PowerShell dispone del comando **Start-Sleep** para este propósito, que te permite especificar el periodo de tiempo durante el cual las actividades se deben detener. En el siguiente ejemplo, la ejecución se detiene durante dos segundos.

```shell
Start-Sleep -Seconds 2
```

### 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 resultados que puedes obtener son “True” o “False”.

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

### 39. Test-Connection

Puedes evaluar las conexiones en tu red mediante PowerShell utilizando el comando **Test-Connection**, el cual envía un paquete de solicitud de eco ICMP a los destinatarios que especifiques 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](https://www.ionos.es/digitalguide/servidores/know-how/ipv6-los-beneficios-del-nuevo-protocolo-de-internet/).

```shell
Test-Connection -TargetName Server02 -IPv6
```

### 40. Get-WinEvent

Para visualizar uno o varios registros de eventos en PowerShell, 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:

```shell
Get-WinEvent -ListLog *
```


This is a markdown version of: [https://www.ionos.es/digitalguide/servidores/configuracion/comandos-de-powershell/](https://www.ionos.es/digitalguide/servidores/configuracion/comandos-de-powershell/) for AI/LLM consumption.