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
  • Conectar-PSSession: Conectar 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-PSSessioncmdlets , Disconnect-PSSessiony 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.

Consulte también