Puede ejecutar comandos en uno o en centenares de equipos con un único comando de Windows PowerShell. Windows PowerShell admite la computación remota mediante el uso de diversas tecnologías, incluidos WMI, RPC y WS-Management.
Comunicación remota sin configuración
Muchos cmdlets de Windows PowerShell tienen un parámetro ComputerName que permite recopilar datos y cambiar la configuración de uno o más equipos remotos. Utilizan una gran diversidad de tecnologías de comunicación y numerosos elementos de trabajo en todos los sistemas operativos Windows que Windows PowerShell admite sin ninguna configuración especial.
Estos cmdlets son los siguientes:
- Restart-Computer
- Test-Connection
- Clear-EventLog
- Get-EventLog
- Get-HotFix
- Get-Process
- Get-Service
- Set-Service
- Get-HotFix
- Get-WmiObject
Normalmente, los cmdlets que admiten la comunicación remota sin una configuración especial tienen un parámetro ComputerName y no tienen un parámetro Session. Para buscar estos cmdlets en una sesión, escriba:
get-command | where { $_.parameters.keys -contains "ComputerName" -and $_.parameters.keys -notcontains "Session"}
Comunicación remota de Windows PowerShell
La comunicación remota de Windows PowerShell, que utiliza el protocolo WS-Management, permite ejecutar cualquier comando de Windows PowerShell en uno o muchos equipos remotos. Permite establece conexiones persistentes, iniciar sesiones interactivas 1:1 y ejecutar scripts en varios equipos.
Para utilizar la comunicación remota de Windows PowerShell, el equipo remoto debe estar configurado para la administración remota. Para obtener más información e incluso instrucciones, vea about_Remote_Requirements.
Después de haber configurado la comunicación remota de Windows PowerShell, podrá disponer de muchas estrategias de comunicación remota. En lo que resta de documento sólo se enumeran algunas de ellas. Para obtener más información, vea about_Remote y about_Remote_FAQ.
Iniciar 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 con el que se va establecer conexión. A partir de ese momento, los comandos que escriba en el símbolo del sistema se ejecutarán en el equipo remoto y los resultados se mostrarán en el equipo local.
Para finalizar la sesión interactiva, escriba:
exit-pssession
Para obtener más información acerca de los cmdlets Enter-PSSession y Exit-PSSession, vea Enter-PSSession y Exit-PSSession.
Ejecutar un comando en remoto
Para ejecutar un comando en uno o muchos equipos remotos, 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 {get-UICulture}
Los resultados se devuelven 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
Para obtener más información acerca del cmdlet Invoke-Command, vea Invoke-Command.
Ejecutar un script
Para ejecutar un script en uno o muchos equipos remotos, utilice el parámetro FilePath del cmdlet Invoke-Command. El script debe estar en el equipo local o accesible en el citado equipo. Los resultados se devuelven en el equipo local.
Por ejemplo, el comando siguiente ejecuta el script DiskCollect.ps1 en los equipos remotos Server01 y Server02.
invoke-command -computername Server01, Server02 -filepath c:\Scripts\DiskCollect.ps1
Para obtener más información acerca del cmdlet Invoke-Command, vea Invoke-Command.
Establecer una conexión persistente
Para ejecutar una serie de comandos relacionados que comparten datos, cree una sesión en el equipo remoto y, a continuación, utilice el cmdlet Invoke-Command para ejecutar comandos en la sesión creada. Para crear una sesión remota, utilice el cmdlet New-PSSession.
Por ejemplo, el comando siguiente crea una sesión remota en el equipo Server01 y otra sesión remota en el equipo Server02. Guarda los objetos de sesión en la variable $s.
$s = new-pssession -computername Server01, Server02
Una vez establecidas las sesiones, puede ejecutar cualquier comando en ellas. Además, como las sesiones son persistentes, puede recopilar datos en un comando y utilizarlos en un comando subsiguiente.
Por ejemplo, el comando siguiente ejecuta un comando Get-Hotfix en las sesiones en 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 utilizar los datos de la variable $h en comandos subsiguientes, como el siguiente. Los resultados se muestran en el equipo local.
invoke-command -session $s {$h | where {$_.installedby -ne "NTAUTHORITY\SYSTEM"
Comunicación remota avanzada
La administración remota de Windows PowerShell empieza aquí. Mediante el uso de los cmdlets instalados con Windows PowerShell, puede establecer y configurar sesiones remotas tanto desde extremos locales como remotos, crear sesiones personalizadas y restringidas, permitir a los usuarios importar comandos de una sesión remota que realmente se ejecutan de forma implícita en la sesión remota, configurar la seguridad de una sesión remota, etc.
Para facilitar la configuración remota, Windows PowerShell incluye un proveedor de WS-Management. La unidad WSMAN: que el proveedor crea permite navegar por una jerarquía de valores de configuración en el equipo local y en equipos remotos. Para obtener más información acerca del proveedor de WS-Management, vea WSMan Provider y about_WS-Management_Cmdlets, o bien, en la consola de Windows PowerShell, escriba "get-help wsman".
Para obtener más información, vea about_Remote_FAQ, New-PSSessionConfiguration y Import-PSSession. Para obtener ayuda relacionada con errores de comunicación remota, vea about_Remote_Troubleshooting.
Vea también