about_Remote
Descripción breve
Describe cómo ejecutar comandos remotos en PowerShell.
Descripción larga
Puede ejecutar comandos remotos en uno o varios equipos remotos mediante una conexión temporal o persistente. También puede iniciar una sesión interactiva con un solo equipo remoto.
Nota:
Para usar la comunicación remota de PowerShell, debe configurar los equipos locales y remotos para la comunicación remota. Para obtener más información, consulte about_Remote_Requirements.
Inicio de una sesión interactiva
La manera más fácil de ejecutar comandos remotos es iniciar una sesión interactiva con un equipo remoto.
Cuando se inicia la sesión, los comandos que escriba se ejecutan en el equipo remoto, como si se escriben directamente en el equipo remoto. Solo puede conectarse a un equipo en cada sesión interactiva.
Para iniciar una sesión interactiva, use el Enter-PSSession
cmdlet . El comando siguiente inicia una sesión interactiva con el equipo Server01:
Enter-PSSession Server01
PowerShell cambia el símbolo del sistema para incluir el nombre del equipo remoto.
Server01\PS>
Ahora, puede escribir comandos en el equipo Server01.
Para finalizar la sesión interactiva, escriba:
Exit-PSSession
Para obtener más información, vea Enter-PSSession.
Uso de cmdlets que tienen un parámetro ComputerName
Varios cmdlets tienen un parámetro ComputerName que permite obtener objetos de equipos remotos.
Dado que estos cmdlets no usan la comunicación remota de PowerShell basada en WS Management, puede usar el parámetro ComputerName de estos cmdlets en cualquier equipo que ejecute PowerShell. Los equipos no tienen que configurarse para la comunicación remota de PowerShell y los equipos no tienen que cumplir los requisitos del sistema para la comunicación remota.
Los cmdlets siguientes tienen un parámetro ComputerName:
Clear-EventLog Limit-EventLog
Get-Counter New-EventLog
Get-EventLog Remove-EventLog
Get-HotFix Restart-Computer
Get-Process Show-EventLog
Get-Service Stop-Computer
Get-WinEvent Test-Connection
Get-WmiObject Write-EventLog
Por ejemplo, el siguiente comando obtiene los servicios en el equipo remoto Server01:
Get-Service -ComputerName Server01
Normalmente, los cmdlets que admiten la comunicación remota sin configuración especial tienen un parámetro ComputerName y no tienen un 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'
}
Ejecución de un comando remoto
Para ejecutar otros comandos en equipos remotos, use el Invoke-Command
cmdlet .
Para ejecutar un solo comando o algunos comandos no relacionados, use el parámetro ComputerName de Invoke-Command
para especificar los equipos remotos. Use el parámetro ScriptBlock para especificar el comando .
Por ejemplo, el siguiente comando ejecuta un Get-Culture
comando en el equipo Server01.
Invoke-Command -ComputerName Server01 -ScriptBlock {Get-Culture}
Creación de una conexión persistente
Cuando se usa el parámetro ComputerName del Invoke-Command
cmdlet, PowerShell establece una conexión temporal al equipo remoto. Cierra la conexión cuando se completa el comando. Se pierden las variables o funciones definidas en esta sesión temporal.
Para crear una conexión persistente a un equipo remoto, use el New-PSSession
cmdlet . Por ejemplo, el siguiente comando crea PSSessions en los equipos Server01 y Server02 y, a continuación, guarda las PSSessions en la $s
variable .
$s = New-PSSession -ComputerName Server01, Server02
Ejecución de comandos en una PSSession
Con psSession, puede ejecutar una serie de comandos remotos que comparten datos, como funciones, alias y los valores de las variables. Para ejecutar comandos en una PSSession, use el parámetro Session del Invoke-Command
cmdlet .
Por ejemplo, el siguiente comando usa el Invoke-Command
cmdlet para ejecutar un Get-Process
comando en psSessions en los equipos Server01 y Server02.
El comando guarda los procesos en una $p
variable en cada PSSession.
Invoke-Command -Session $s -ScriptBlock {$p = Get-Process}
Dado que PSSession usa una conexión persistente, puede ejecutar otro comando en la misma PSSession que usa la $p
variable . El comando siguiente cuenta el número de procesos guardados en $p
.
Invoke-Command -Session $s -ScriptBlock {$p.count}
Ejecución de un comando remoto en varios equipos
Para ejecutar un comando remoto en varios equipos, escriba todos los nombres de equipo en el valor del parámetro ComputerName de Invoke-Command
. Separe los nombres con comas.
Por ejemplo, el siguiente comando ejecuta un Get-Culture
comando en tres equipos:
Invoke-Command -ComputerName S1, S2, S3 -ScriptBlock {Get-Culture}
También puede ejecutar un comando en varias PSSessions. Los comandos siguientes crean PSSessions en los equipos Server01, Server02 y Server03 y, a continuación, ejecutan un Get-Culture
comando en cada una de las PSSessions.
$s = New-PSSession -ComputerName S1, S2, S3
Invoke-Command -Session $s -ScriptBlock {Get-Culture}
Para incluir la lista de equipos locales de equipos, escriba el nombre del equipo local, escriba un punto (.
) o escriba localhost
.
Invoke-Command -ComputerName S1, S2, S3, localhost -ScriptBlock {Get-Culture}
Ejecución de un script en equipos remotos
Para ejecutar un script local en equipos remotos, use el parámetro FilePath de Invoke-Command
. No es necesario copiar ningún archivo. Por ejemplo, el siguiente comando ejecuta el Sample.ps1
script en los equipos S1 y S2:
Invoke-Command -ComputerName S1, S2 -FilePath C:\Test\Sample.ps1
PowerShell devuelve los resultados del script en el equipo local.
Cómo detener un comando remoto
Para interrumpir un comando, presione Ctrl+c. PowerShell pasa la solicitud de interrupción al equipo remoto donde finaliza el comando remoto.
Para más información
Para obtener información sobre los requisitos del sistema para la comunicación remota, consulte about_Remote_Requirements.
Para obtener ayuda sobre el formato de salida remota, consulte about_Remote_Output.
Para obtener información sobre cómo funciona la comunicación remota, cómo administrar datos remotos, configuraciones especiales, problemas de seguridad y otras preguntas más frecuentes, consulte Preguntas más frecuentes sobre comunicación remota de PowerShell.
Para obtener ayuda para resolver errores de comunicación remota, consulte about_Remote_Troubleshooting.
Para obtener información sobre PSSessions y conexiones persistentes, consulte about_PSSessions.
Para obtener información sobre los trabajos en segundo plano de PowerShell, consulte about_Jobs.