Compartir a través de


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 admite la comunicación remota de WMI, WS-Management y SSH. En PowerShell 7 y versiones posteriores, RPC solo se admite en Windows.

Para obtener más información sobre la comunicación remota en PowerShell, consulte los siguientes artículos:

Comunicación remota de Windows PowerShell sin configuración

Muchos cmdlets de Windows PowerShell tienen el parámetro ComputerName que permite recopilar datos y cambiar la configuración en uno o varios 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 configuración especial tienen el parámetro ComputerName y no tienen el 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

Con el protocolo WS-Management, la comunicación remota de Windows PowerShell le 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 función de remoting de Windows PowerShell, el equipo remoto debe estar configurado para la gestión remota. Para obtener más información, incluidas las instrucciones, vea Acerca de los requisitos remotos.

Una vez que haya configurado la comunicación remota de Windows PowerShell, hay muchas estrategias de comunicación remota disponibles para usted. En este artículo se enumeran solo algunos de ellos. Para obtener más información, vea Acerca de Remote.

Inicio de una sesión interactiva

Para iniciar una sesión interactiva con un solo 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. Los comandos que usted escriba en el terminal se ejecutan en el equipo remoto y los resultados se muestran en el equipo local.

Para finalizar la sesión interactiva, escriba:

Exit-PSSession

Para obtener 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}

La salida se devuelve a tu computadora.

LCID    Name     DisplayName               PSComputerName
----    ----     -----------               --------------
1033    en-US    English (United States)   server01.corp.fabrikam.com
1033    en-US    English (United States)   server02.corp.fabrikam.com

Ejecución de un script

Para ejecutar un script en uno o varios equipos remotos, use el parámetro FilePath del Invoke-Command cmdlet . El script debe estar activado o accesible para el equipo local. Los resultados son devueltos a tu ordenador local.

Por ejemplo, el siguiente comando ejecuta el DiskCollect.ps1 script en los equipos remotos, Server01 y Server02.

Invoke-Command -ComputerName Server01, Server02 -FilePath C:\Scripts\DiskCollect.ps1

Establecer una conexión persistente

Use el New-PSSession cmdlet 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 sesión se almacenan en la $s variable .

$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 Get-HotFix comando en las sesiones de la $s variable y guarda los resultados en la $h variable. 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 $h variable 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:

  • Configuración y creación de sesiones remotas desde los extremos locales y remotos
  • Creación de sesiones personalizadas y restringidas
  • Importación de comandos desde una sesión remota que se ejecuta implícitamente en la sesión remota
  • Configuración de la seguridad de una sesión remota

PowerShell en Windows incluye un proveedor WSMan. El proveedor crea una WSMan: unidad que le permite navegar por una jerarquía de opciones de configuración en el equipo local y en los equipos remotos.

Para obtener más información sobre el proveedor WSMan, vea Proveedor WSMan y Acerca de los cmdlets de WS-Management, o en la consola de Windows PowerShell, escriba Get-Help WSMan.

Para obtener más información, consulte:

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

Véase también