Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
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 sesiones activas de PSSession se mantienen en el equipo remoto (o en el equipo en el extremo remoto o en el "lado del 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 detallada, consulte about_PSSession_Details.
Nota: PSSessions usa la infraestructura de comunicación remota de PowerShell. Para utilizar PSSessions, los equipos locales y remotos deben estar configurados para el acceso remoto. 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. La sesión de PS permanece disponible hasta que la elimines o se agote 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 cmdlet Invoke-Command 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 en cuanto se complete 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 ejecución remota para ejecutar un solo 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 con el 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, utilizan diferentes tecnologías de remoción para recopilar datos. Ninguna crea una conexión persistente como psSession.
Cómo crear una PSSession
Para crear una PSSession, use el cmdlet New-PSSession. Para crear la PSSession en un equipo remoto, use el parámetro ComputerName del cmdlet New-PSSession.
Por ejemplo, el comando siguiente crea una nueva PSSession en el equipo Server01.
New-PSSession -ComputerName Server01
Al enviar el comando, New-PSSession crea psSession y devuelve un objeto que representa la PSSession. Puede guardar el objeto en una variable al crear la PSSession o puede usar un comando Get-PSSession 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 cmdlet New-PSSession. 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 PSSessions que se crearon en su sesión actual, use el cmdlet Get-PSSession 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 visualización predeterminada de los PSSessions muestra su identificador y un nombre de visualización predeterminado. Puede asignar un nombre para mostrar alternativo cuando cree 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 las PSSessions que creó en equipos remotos específicos, use el parámetro ComputerName del cmdlet Get-PSSession. El siguiente comando obtiene las PSSessions que creó en el equipo remoto Server01. Esto incluye las PSSessions creadas en la sesión actual y en otras sesiones en el equipo local o en 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 aunque las sesiones estén conectadas y ejecuten comandos en el equipo local.
Ejecución de comandos en una PSSession
Para ejecutar un comando en una o varias PSSessions, use el cmdlet Invoke-Command.
Use el parámetro Session para especificar psSessions y el parámetro ScriptBlock para especificar el comando.
Por ejemplo, para ejecutar un comando Get-ChildItem ("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 cmdlet Remove-PSSession 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 cmdlet Remove-PSSession.
Remove-PSSession -ComputerName Server01 -Id 1
Si no elimina la PSSession, esta permanece disponible para su uso hasta que agote el tiempo de espera.
También puede usar el parámetro IdleTimeout del cmdlet New-PSSessionOption 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 de 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 cmdlets Connect-PSSession, 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, vea about_PSSession_Details.