Ejecutar comandos remotos
Puede ejecutar comandos en un equipo o en cientos de ellos usando un solo comando de PowerShell. Windows PowerShell admite la informática remota mediante varias tecnologías, como WMI; RPC y WS-Management.
PowerShell Core admite WMI, WS-Management y la comunicación remota mediante SSH. En PowerShell 7 y versiones posteriores, RPC solo se admite en Windows.
Para más información sobre la comunicación remota de PowerShell Core, consulte los artículos siguientes:
Comunicación remota de Windows PowerShell sin configuración
Muchos de los cmdlets de Windows PowerShell tienen el parámetro ComputerName, que le permite recopilar datos y cambiar la configuración de uno o más equipos remotos. Estos cmdlets utilizan diversos protocolos de comunicación y funcionan en todos los sistemas operativos Windows sin ninguna configuración especial.
Estos cmdlets son:
- Restart-Computer
- Test-Connection
- Clear-EventLog
- Get-EventLog
- Get-HotFix
- Get-Process
- Get-Service
- Set-Service
- Get-WinEvent
- Get-WmiObject
Normalmente, los cmdlets que admiten la comunicación remota sin una configuración especial tienen el parámetro ComputerName y carecen del parámetro Session. Para encontrar estos cmdlets en la sesión, escriba:
Get-Command | Where-Object {
$_.Parameters.Keys -contains "ComputerName" -and
$_.Parameters.Keys -notcontains "Session"
}
Comunicación remota de Windows PowerShell
Mediante el protocolo WS-Management, la comunicación remota de Windows PowerShell permite ejecutar cualquier comando de Windows PowerShell en uno o varios equipos remotos. Puede establecer conexiones persistentes, iniciar sesiones interactivas y ejecutar scripts en equipos remotos.
Para usar la comunicación remota de Windows PowerShell, el equipo remoto debe estar configurado para la administración remota. Para más información y ver instrucciones, consulte About Remote Requirements (Acerca de los requisitos remotos).
Cuando haya configurado la comunicación remota de Windows PowerShell, tendrá a su disposición un gran número de estrategias de comunicación remota. En este artículo se enumeran algunos de ellos. Para más información, consulte About Remote (Acerca del acceso remoto).
Inicio de una sesión interactiva
Para iniciar una sesión interactiva con un único equipo remoto, use el cmdlet Enter-PSSession. Por ejemplo, para iniciar una sesión interactiva con el equipo remoto Server01, escriba:
Enter-PSSession Server01
El símbolo del sistema cambia para mostrar el nombre del equipo remoto. Cualquier comando que escriba en el símbolo del sistema se ejecuta en el equipo remoto y los resultados se muestran en el equipo local.
Para finalizar la sesión interactiva, escriba:
Exit-PSSession
Para más información sobre los cmdlets Enter-PSSession
y Exit-PSSession
, consulte:
Ejecutar un comando remoto
Para ejecutar un comando en uno o varios equipos, use el cmdlet Invoke-Command. Por ejemplo, para ejecutar un comando Get-UICulture en los equipos remotos Server01 y Server02, escriba:
Invoke-Command -ComputerName Server01, Server02 -ScriptBlock {Get-UICulture}
El resultado se muestra en su equipo.
LCID Name DisplayName PSComputerName
---- ---- ----------- --------------
1033 en-US English (United States) server01.corp.fabrikam.com
1033 en-US English (United States) server02.corp.fabrikam.com
Ejecutar un script
Para ejecutar un script en uno o varios equipos remotos, use el parámetro FilePath del cmdlet Invoke-Command
. El script debe estar en el equipo local o accesible desde este. Los resultados se devuelven en el equipo local.
Por ejemplo, el siguiente comando ejecuta el script DiskCollect.ps1
en los equipos remotos Server01 y Server02.
Invoke-Command -ComputerName Server01, Server02 -FilePath c:\Scripts\DiskCollect.ps1
Establecer una conexión persistente
Utilice el cmdlet New-PSSession
para crear una sesión persistente en un equipo remoto. En el ejemplo siguiente se crean sesiones remotas en Server01 y Server02. Los objetos de la sesión se almacenan en la variable $s
.
$s = New-PSSession -ComputerName Server01, Server02
Ahora que las sesiones se han establecido, puede ejecutar cualquier comando en ellas. Y, como las sesiones son persistentes, puede recopilar datos en un solo comando y usarlos en un otro comando.
Por ejemplo, el siguiente comando ejecuta un comando Get-HotFix
en las sesiones de la variable $s
y guarda los resultados en la variable $h
. La variable $h
se crea en cada una de las sesiones en $s
, pero no existe en la sesión local.
Invoke-Command -Session $s {$h = Get-HotFix}
Ahora puede usar los datos de la variable $h
con otros comandos en la misma sesión. Los resultados se muestran en el equipo local. Por ejemplo:
Invoke-Command -Session $s {$h | where {$_.InstalledBy -ne "NT AUTHORITY\SYSTEM"}}
Comunicación remota avanzada
PowerShell incluye cmdlets que le permiten:
- Configurar y crear sesiones remotas desde los extremos locales y remotos.
- Crear sesiones personalizadas y restringidas.
- Importar comandos desde una sesión remota que se ejecuta implícitamente en la sesión remota.
- Configurar la seguridad de una sesión remota.
PowerShell en Windows incluye un proveedor WSMan. El proveedor crea una unidad WSMAN:
que le permite desplazarse por una jerarquía de valores de configuración en el equipo local y en los equipos remotos.
Para más información sobre el proveedor de WSMan, consulte Proveedor de WSMan y About WS-Management Cmdlets (Acerca de los cmdlets de WS-Management). También puede escribir Get-Help wsman
en la consola de Windows PowerShell.
Para más información, vea:
- Preguntas frecuentes sobre la comunicación remota de PowerShell
- Register-PSSessionConfiguration
- Import-PSSession
Para obtener ayuda con los errores de comunicación remota, consulte about_Remote_Troubleshooting.