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:

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:

Para obtener ayuda con los errores de comunicación remota, consulte about_Remote_Troubleshooting.

Consulte también