about_PSSessions
Descripción breve
Describe las sesiones de PowerShell (PSSessions) y explica cómo establecer una conexión persistente a un equipo remoto.
Descripción larga
Para ejecutar comandos de PowerShell en un equipo remoto, puede usar el parámetro ComputerName de un cmdlet o puede crear una sesión de PowerShell (PSSession) y ejecutar comandos en PSSession.
Al crear una PSSession, PowerShell establece una conexión persistente al equipo remoto. Use una PSSession para ejecutar una serie de comandos relacionados en un equipo remoto. Los comandos que se ejecutan en la misma PSSession pueden compartir datos, como los valores de variables, alias y funciones.
También puede crear una PSSession en el equipo local y ejecutar comandos en él. Una PSSession local usa la infraestructura de comunicación remota de PowerShell para crear y mantener la PSSession.
A partir de Windows PowerShell 3.0, PSSessions en Windows son independientes de las sesiones en las que se crean. Las PSSession activas se mantienen en el equipo remoto (o el equipo en el extremo remoto o en el "lado servidor" de la conexión). Como resultado, en Windows puede desconectarse de una PSSession en un equipo Windows remoto y volver a conectarse a él más adelante desde el mismo equipo o desde otro equipo Windows.
En este tema se explica cómo crear, usar, obtener y eliminar PSSessions. Para obtener información más avanzada, consulte about_PSSession_Details.
Nota: PSSessions usa la infraestructura de comunicación remota de PowerShell. Para usar PSSessions, los equipos locales y remotos deben configurarse para la comunicación remota. Para obtener más información, consulte about_Remote_Requirements.
En Windows Vista y versiones posteriores de Windows, para crear una PSSession en un equipo local, debe iniciar PowerShell con la opción "Ejecutar como administrador".
¿Qué es una sesión?
Una sesión es un entorno en el que se ejecuta PowerShell.
Cada vez que inicie PowerShell, se crea una sesión automáticamente y puede ejecutar comandos en la sesión. También puede agregar elementos a la sesión, como módulos y complementos, y puede crear elementos, como variables, funciones y alias. Estos elementos solo existen en la sesión y se eliminan cuando finaliza la sesión.
También puede crear sesiones administradas por el usuario, conocidas como "sesiones de PowerShell" o "PSSessions", en el equipo local o en un equipo remoto. Al igual que la sesión predeterminada, puede ejecutar comandos en una PSSession y agregar y crear elementos. Sin embargo, a diferencia de la sesión que se inicia automáticamente, puede controlar las PSSessions que cree. Puede obtener, crear, configurar y quitarlos, desconectarlos y volver a conectarse a ellos y ejecutar varios comandos en la misma PSSession. PsSession permanece disponible hasta que se elimina o se agota el tiempo de espera.
Normalmente, se crea una PSSession para ejecutar una serie de comandos relacionados en un equipo remoto. Al crear una PSSession en un equipo remoto, PowerShell establece una conexión persistente con el equipo remoto para admitir la sesión.
Si usa el parámetro ComputerName del Invoke-Command
cmdlet o Enter-PSSession
para ejecutar un comando remoto o para iniciar una sesión interactiva, PowerShell crea una sesión temporal en el equipo remoto y cierra la sesión tan pronto como finalice el comando o en cuanto finalice la sesión interactiva. No puede controlar estas sesiones temporales y no puede usarlas para más de un solo comando o una sola sesión interactiva.
En PowerShell, la "sesión actual" es la sesión en la que trabaja. La "sesión actual" puede hacer referencia a cualquier sesión, incluida una sesión temporal o una PSSession.
¿Por qué usar una PSSession?
Use una PSSession cuando necesite una conexión persistente a un equipo remoto. Con una PSSession, puede ejecutar una serie de comandos que comparten datos, como el valor de las variables, el contenido de una función o la definición de un alias.
Puede ejecutar comandos remotos sin crear una PSSession. Use el parámetro ComputerName de cmdlets habilitados para remotos para ejecutar un único comando o una serie de comandos no relacionados en uno o varios equipos.
Cuando se usa el parámetro ComputerName de Invoke-Command
o Enter-PSSession
, PowerShell establece una conexión temporal al equipo remoto y, a continuación, cierra la conexión tan pronto como se complete el comando. Los elementos de datos que cree se pierden cuando se cierra la conexión.
Otros cmdlets que tienen un parámetro ComputerName , como Get-Eventlog
y Get-WmiObject
, usan diferentes tecnologías de comunicación remota para recopilar datos. Ninguna crea una conexión persistente como psSession.
Cómo crear una PSSession
Para crear una PSSession, use el New-PSSession
cmdlet . Para crear la PSSession en un equipo remoto, use el parámetro ComputerName del New-PSSession
cmdlet .
Por ejemplo, el comando siguiente crea una nueva PSSession en el equipo Server01.
New-PSSession -ComputerName Server01
Al enviar el comando, New-PSSession
crea la PSSession y devuelve un objeto que representa la PSSession. Puede guardar el objeto en una variable al crear la PSSession o puede usar un Get-PSSession
comando para obtener la PSSession más adelante.
Por ejemplo, el siguiente comando crea una nueva PSSession en el equipo Server01 y guarda el objeto resultante en la variable $ps.
$ps = New-PSSession -ComputerName Server01
Cómo crear PSSessions en varios equipos
Para crear PSSessions en varios equipos, use el parámetro ComputerName del New-PSSession
cmdlet . Escriba los nombres de los equipos remotos en una lista separada por comas.
Por ejemplo, para crear PSSessions en los equipos Server01, Server02 y Server03, escriba:
New-PSSession -ComputerName Server01, Server02, Server03
New-PSSession
crea una PSSession en cada uno de los equipos remotos.
Cómo obtener PSSessions
Para obtener las PSSession que se crearon en la sesión actual, use el Get-PSSession
cmdlet sin el parámetro ComputerName . Get-PSSession
devuelve el mismo tipo de objeto que New-PSSession
devuelve.
El comando siguiente obtiene todas las PSSession que se crearon en la sesión actual.
Get-PSSession
La presentación predeterminada de psSessions muestra su identificador y un nombre para mostrar predeterminado. Puede asignar un nombre para mostrar alternativo al crear la sesión.
Id Name ComputerName State ConfigurationName
--- ---- ------------ ----- ---------------------
1 Session1 Server01 Opened Microsoft.PowerShell
2 Session2 Server02 Opened Microsoft.PowerShell
3 Session3 Server03 Opened Microsoft.PowerShell
También puede guardar las PSSessions en una variable. El siguiente comando obtiene las PSSessions y las guarda en la variable $ps 123.
$ps123 = Get-PSSession
Al usar los cmdlets de PSSession, puede hacer referencia a una PSSession por su identificador, por su nombre o por su identificador de instancia (un GUID). El siguiente comando obtiene una PSSession por su identificador y la guarda en la variable $ps 01.
$ps01 = Get-PSSession -Id 1
A partir de Windows PowerShell 3.0, las PSSessions se mantienen en el equipo remoto. Para obtener PSSessions que creó en equipos remotos concretos, use el parámetro ComputerName del Get-PSSession
cmdlet . El siguiente comando obtiene las PSSessions que creó en el equipo remoto Server01. Esto incluye PSSessions creados en la sesión actual y en otras sesiones del equipo local u otros equipos.
Get-PSSession -ComputerName Server01
En Windows PowerShell 2.0, Get-PSSession
obtiene solo las PSSession que se crearon en la sesión actual. No obtiene PSSessions que se crearon en otras sesiones o en otros equipos, incluso si las sesiones están conectadas a y ejecutan comandos en el equipo local.
Ejecución de comandos en una PSSession
Para ejecutar un comando en una o varias PSSessions, use el Invoke-Command
cmdlet .
Use el parámetro Session para especificar psSessions y el parámetro ScriptBlock para especificar el comando.
Por ejemplo, para ejecutar un Get-ChildItem
comando ("dir") en cada una de las tres PSSessions guardadas en la variable $ps 123, escriba:
Invoke-Command -Session $ps123 -ScriptBlock { Get-ChildItem }
Cómo eliminar PSSessions
Cuando haya terminado con PSSession, use el Remove-PSSession
cmdlet para eliminar PSSession y para liberar los recursos que estaba usando.
Remove-PSSession -Session $ps
o
Remove-PSSession -Id 1
Para quitar una PSSession de un equipo remoto, use el parámetro ComputerName del Remove-PSSession
cmdlet .
Remove-PSSession -ComputerName Server01 -Id 1
Si no elimina la PSSession, la PSSession permanece disponible para su uso hasta que agote el tiempo de espera.
También puede usar el parámetro IdleTimeout del New-PSSessionOption
cmdlet para establecer una hora de expiración para una PSSession inactiva. Para obtener más información, consulte New-PSSessionOption.
Cmdlets de PSSession
Para obtener una lista de cmdlets de PSSession, escriba:
Get-Help *-PSSession
- Connect-PSSession: conecta una PSSession a la sesión actual.
- Disconnect-PSSession: desconecta una PSSession de la sesión actual.
- Enter-PSSession: inicia una sesión interactiva
- Exit-PSSession: finaliza una sesión interactiva
- Get-PSSession: obtiene las PSSessions en la sesión actual.
- New-PSSession: crea una nueva PSSession en un equipo local o remoto
- Receive-PSSession: obtiene los resultados de los comandos que se ejecutaron en una sesión desconectada.
- Remove-PSSession: elimina las PSSessions en la sesión actual.
Nota:
Las sesiones desconectadas solo se admiten en Windows. Los Connect-PSSession
cmdlets , Disconnect-PSSession
y Receive-PSSession
solo están disponibles en Windows. Para obtener más información sobre las sesiones desconectadas, consulte about_Remote_Disconnected_Session
Para obtener más información
Para obtener más información sobre PSSessions, consulte about_PSSession_Details.