about_PSSession_Details

Descripción breve

Proporciona información detallada sobre las sesiones de PowerShell y el rol que desempeñan en los comandos remotos.

Descripción larga

Una sesión es un entorno en el que se ejecuta PowerShell. Se crea una sesión automáticamente cada vez que se inicia PowerShell. Puede crear sesiones adicionales, denominadas "sesiones de PowerShell" o "PSSessions" en el equipo u otro equipo.

A diferencia de las sesiones que PowerShell crea automáticamente, puede controlar y administrar las PSSessions que cree.

PSSessions desempeña un papel importante en la informática remota. Al crear una PSSession conectada a un equipo remoto, PowerShell establece una conexión persistente al equipo remoto para admitir psSession. Puede usar PSSession para ejecutar una serie de comandos, funciones y scripts que comparten datos.

En este tema se proporciona información detallada sobre sesiones y PSSessions en PowerShell. Para obtener información básica sobre las tareas que puede realizar con sesiones, consulte about_PSSessions.

Acerca de las sesiones

Técnicamente, una sesión es un entorno de ejecución en el que se ejecuta PowerShell. Cada sesión incluye una instancia del motor System.Management.Automation y un programa host en el que se ejecuta PowerShell. El host puede ser la consola de PowerShell conocida u otro programa que ejecuta comandos, como Cmd.exe, o un programa compilado para hospedar PowerShell, como Windows PowerShell Integrated Scripting Environment (ISE). Desde una perspectiva de Windows, una sesión es un proceso de Windows en el equipo de destino.

Cada sesión se configura de forma independiente. Incluye sus propias propiedades, su propia directiva de ejecución y sus propios perfiles. El entorno que existe cuando se crea la sesión persiste durante su vigencia incluso si cambia el entorno en el equipo. Todas las sesiones se crean en un ámbito global, incluso las sesiones que se crean en un script.

Solo puede ejecutar un comando (o canalización de comandos) en una sesión a la vez. Un segundo comando se ejecuta de forma sincrónica (una a la vez) espera hasta cuatro minutos para que se complete el primer comando. Se produce un error en la ejecución de un segundo comando de forma asincrónica (simultánea).

Acerca de PSSessions

Se crea una sesión cada vez que se inicia PowerShell. Además, PowerShell crea sesiones temporales para ejecutar comandos individuales. Sin embargo, también puede crear sesiones (denominadas "sesiones de PowerShell" o "PSSessions") que controle y administre.

PsSessions es fundamental para los comandos remotos. Si usa el parámetro ComputerName de los Invoke-Command cmdlets o Enter-PSSession , PowerShell establece una sesión temporal para ejecutar el comando y, a continuación, cierra la sesión en cuanto se completa el comando o la sesión interactiva.

Sin embargo, si usa el New-PSSession cmdlet para crear una PSSession, PowerShell establece una sesión persistente en el equipo remoto en el que puede ejecutar varios comandos o sesiones interactivas. Las PSSessions que cree permanecen abiertas y disponibles para su uso hasta que las elimine o hasta que cierre la sesión en la que se crearon.

Al crear una PSSession en un equipo remoto, el sistema crea un proceso de PowerShell en el equipo remoto y establece una conexión desde el equipo local al proceso en el equipo remoto. Al crear una PSSession en el equipo local, tanto el nuevo proceso como las conexiones se crean en el equipo local.

¿Cuándo necesito una PSSession?

Los Invoke-Command cmdlets y Enter-PSSession tienen parámetros ComputerName y Session . Puede usar cualquiera de las opciones para ejecutar un comando remoto.

Use el parámetro ComputerName para ejecutar un único comando o una serie de comandos no relacionados en uno o varios equipos.

Para ejecutar comandos que comparten datos, necesita una conexión persistente al equipo remoto. En ese caso, cree una PSSession y, a continuación, use el parámetro Session para ejecutar comandos en PSSession.

Muchos otros cmdlets que obtienen datos de equipos remotos, como Get-Process, Get-Service, Get-EventLogy Get-WmiObject solo tienen un parámetro ComputerName . Usan tecnologías distintas de la comunicación remota de PowerShell para recopilar datos de forma remota. Estos cmdlets no tienen un parámetro Session , pero puede usar el Invoke-Command cmdlet para ejecutar estos comandos en una PSSession.

¿Cómo puedo crear una PSSession?

Para crear una PSSession, use el New-PSSession cmdlet . Puede usar New-PSSession para crear una PSSession en un equipo local o remoto.

¿Puedo crear una PSSession en cualquier equipo?

Para crear una PSSession conectada a un equipo remoto, el equipo debe configurarse para la comunicación remota en PowerShell. El usuario actual debe ser miembro del grupo Administración istrators en el equipo remoto o el usuario actual debe poder proporcionar las credenciales de un miembro del grupo Administración istrators. Para obtener más información, consulte about_Remote_Requirements.

¿Puedo ver mis PSSessions en otras sesiones?

A partir de Windows PowerShell 3.0, el parámetro ComputerName del Get-PSSession cmdlet obtiene PSSessions que creó en los equipos remotos especificados.

Las PSSession activas se mantienen en el equipo remoto (el "lado servidor" de una conexión) y se pueden obtener de cualquier sesión en cualquier equipo.

Por ejemplo, si crea una PSSession desde el equipo Server01 al equipo Server02 y, a continuación, cambia al equipo Server03, puede usar un comando como el siguiente para obtener la sesión.

Get-PSSession -ComputerName Server02

Incluso si se desconecta de la sesión, la sesión se mantiene en el equipo remoto hasta que se elimina o se agota el tiempo de espera.

En Windows PowerShell 2.0, solo puede obtener las PSSession que ha creado en la sesión actual. No puede obtener PSSessions que creó en otras sesiones.

Para obtener más información, consulte Get-PSSession.

¿Puedo ver las PSSessions que otros han creado en mi equipo?

Solo puede obtener y administrar las PSSession que otros usuarios han creado si puede proporcionar las credenciales del usuario que creó la PSSession o la configuración de sesión que usa PSSession incluye credenciales de RunAs. De lo contrario, puede obtener, conectarse, usar y administrar solo las PSSessions que ha creado.

¿Puedo Conectar a una PSSession desde un equipo diferente?

A partir de Windows PowerShell 3.0, PSSessions en equipos Windows son independientes de las sesiones en las que se crearon. Las PSSession activas se mantienen en el equipo en el lado remoto o "servidor" de una conexión.

En un equipo Windows, puede usar el Disconnect-PSSession cmdlet para desconectar de una PSSession. PsSession está desconectado de la sesión local, pero se mantiene en el equipo remoto. Los comandos continúan ejecutándose en la PSSession desconectada. Puede cerrar PowerShell y apagar el equipo de origen sin interrumpir la PSSession.

A continuación, incluso horas después, puede usar el Get-PSSession cmdlet para obtener psSession y el Connect-PSSession cmdlet para conectarse a PSSession desde una nueva sesión en otro equipo Windows.

Para obtener más información, consulte about_Remote_Disconnected_Sessions.

¿Qué ocurre con mi PSSession si mi computadora se detiene?

Las PSSession desconectadas son independientes de las sesiones en las que se crearon. Si desconecta una PSSession y cierra el equipo de origen, la PSSession se mantiene en el equipo remoto.

Además, PowerShell intenta recuperar PSSessions activas que se desconectan involuntariamente, como por un reinicio del equipo, una interrupción temporal de la alimentación o una interrupción de la red. PowerShell intenta mantener o recuperar la PSSession en un estado Abierto, si la sesión de origen sigue estando disponible o en un estado desconectado si no lo está.

Una PSSession "activa" es una que ejecuta comandos. Si una PSSession está conectada (no desconectada) y los comandos se ejecutan en PSSession cuando se cierra la sesión conectada, PowerShell intenta mantener la PSSession en el equipo remoto. Sin embargo, si no se ejecutan comandos en PSSession, PowerShell cierra la PSSession cuando se cierra la sesión conectada.

Para obtener más información, consulte about_Remote_Disconnected_Sessions.

¿Puedo ejecutar un trabajo en segundo plano en una PSSession?

Sí. Un trabajo en segundo plano es un comando que se ejecuta de forma asincrónica en segundo plano sin interactuar con la sesión actual. Al enviar un comando para iniciar un trabajo, el comando devuelve un objeto de trabajo, pero el trabajo continúa ejecutándose en segundo plano hasta que se complete.

Para iniciar un trabajo en segundo plano en un equipo local, use el Start-Job comando . Puede ejecutar el trabajo en segundo plano en una conexión temporal (mediante el parámetro ComputerName ) o en una PSSession (mediante el parámetro Session ).

Para iniciar un trabajo en segundo plano en un equipo remoto, use el Invoke-Command cmdlet con su parámetro AsJob o use el Invoke-Command cmdlet para ejecutar un Start-Job comando en un equipo remoto. Al usar el parámetro AsJob , puede usar los parámetros ComputerName o Session .

Al usar Invoke-Command para ejecutar un Start-Job comando, debe ejecutar el comando en una PSSession. Si usa el parámetro ComputerName , PowerShell finaliza la conexión cuando devuelve el objeto de trabajo y se interrumpe el trabajo.

Para más información, consulte about_Jobs (Acerca de los trabajos).

¿Puedo ejecutar una sesión interactiva?

Sí. Para iniciar una sesión interactiva con un equipo remoto, use el Enter-PSSession cmdlet . En una sesión interactiva, los comandos que escriba se ejecutan en el equipo remoto, igual que si los ha escrito directamente en el equipo remoto.

Puede ejecutar una sesión interactiva en una sesión temporal (mediante el parámetro ComputerName ) o en una PSSession (mediante el parámetro Session ). Si usa una PSSession, PSSession conserva los datos de los comandos anteriores y PSSession conserva los datos generados durante la sesión interactiva para su uso en comandos posteriores.

Al finalizar la sesión interactiva, PSSession permanece abierto y disponible para su uso.

Para obtener más información, consulte Enter-PSSession y Exit-PSSession.

¿Debo eliminar las PSSessions?

Sí. Una PSSession es un proceso, que es un entorno independiente que usa memoria y otros recursos incluso cuando no se usa. Cuando haya terminado con una PSSession, elimínela. Si crea varias PSSessions, cierre las que no use y mantenga solo las que están en uso actualmente.

Para eliminar PSSessions, use el Remove-PSSession cmdlet . Elimina las PSSessions y libera todos los recursos que estaban usando.

También puede usar el parámetro IdleTimeOut de New-PSSessionOption para cerrar una PSSession inactiva después de un intervalo que especifique. Para obtener más información, consulte New-PSSessionOption.

Si guarda un objeto PSSession en una variable y, a continuación, elimina la PSSession o deja que se agote el tiempo de espera, la variable todavía contiene el objeto PSSession, pero la PSSession no está activa y no se puede usar ni reparar.

¿Todas las sesiones y PSSessions son iguales?

No. Los desarrolladores pueden crear sesiones personalizadas que incluyan solo proveedores y cmdlets seleccionados. Si un comando funciona en una sesión pero no en otra, puede deberse a que la sesión está restringida.

Consulte también