about_PSSession_Details

Se aplica a: Windows PowerShell 2.0, Windows PowerShell 3.0, Windows PowerShell 4.0

TEMA

about_PSSession_Details

DESCRIPCIÓN BREVE

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

DESCRIPCIÓN LARGA

Una sesión es un entorno en el que se ejecuta Windows PowerShell. Cada vez que inicia Windows PowerShell se crea una sesión. Puede crear sesiones adicionales, llamadas "sesiones de Windows PowerShell" o "PSSessions", en el equipo o en otro equipo.

A diferencia de las sesiones que Windows PowerShell crea por usted, puede controlar y administrar las PSSessions que cree.

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

En este tema se proporciona información detallada sobre las sesiones y las PSSessions de Windows PowerShell. Para obtener información básica sobre las tareas que puede llevar a cabo 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 Windows PowerShell. Cada sesión incluye una instancia del motor System.Management.Automation y un programa host en el que se ejecuta Windows PowerShell. El host puede ser la consola de Windows PowerShell que ya conoce u otro programa que ejecute comandos, como Cmd.exe, o un programa diseñado para hospedar Windows PowerShell, como el Entorno de scripting integrado (ISE) de Windows PowerShell. Desde la 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 al crear la sesión persiste durante su vigencia, aunque se cambie el entorno en el equipo. Todas las sesiones se crean en un ámbito global, incluidas las sesiones que cree en un script.

Solo puede ejecutar un único comando (o una canalización de comandos) en una sesión al mismo tiempo. Una segunda ejecución de comandos espera de forma sincrónica (uno por uno) hasta cuatro minutos a que se complete el primer comando. Una segunda ejecución de comandos falla de forma asincrónica (simultáneamente).

ACERCA DE LAS PSSESSIONS

Cada vez que inicia Windows PowerShell se crea una sesión, y Windows PowerShell crea sesiones temporales para ejecutar comandos individuales. Sin embargo, también puede crear sesiones (llamadas "sesiones de Windows PowerShell" o "PSSessions") que puede controlar y administrar.

Las PSSessions son fundamentales para los comandos remotos. Si usa el parámetro ComputerName de los cmdlets Invoke-Command o Enter-PSSession, Windows PowerShell establece una sesión temporal para ejecutar el comando y cierra la sesión en cuanto se completa el comando o la sesión interactiva.

Sin embargo, si usa el cmdlet New-PSSession para crear una PSSession, Windows PowerShell establece una sesión persistente en el equipo remoto, en la 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 hasta el proceso del equipo remoto. Al crear una PSSession en el equipo local, tanto el proceso nuevo como las conexiones se crean en el equipo local.

¿CUÁNDO ES NECESARIA UNA PSSESSION?

Los cmdlets Invoke-Command y Enter-PSSession tienen los parámetros ComputerName y Session; puede usar cualquiera de ellos para ejecutar un comando remoto.

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

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

Hay muchos cmdlets más que obtienen datos de equipos remotos (por ejemplo, Get-Process, Get-Service, Get-EventLog y Get-WmiObject) que solo tienen un parámetro ComputerName. Usan tecnologías distintas de la comunicación remota de Windows PowerShell para recopilar datos de forma remota. Estos cmdlets no tienen ningún parámetro Session, pero puede usar el cmdlet Invoke-Command para ejecutar estos comandos en una PSSession.

¿CÓMO SE CREA UNA PSSESSION?

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

¿SE PUEDE CREAR UNA PSSESSION EN CUALQUIER EQUIPO?

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

¿SE PUEDEN VER LAS PSSESSIONS EN OTRAS SESIONES?

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

Las PSSessions activas se mantienen en el equipo remoto (el "servidor" de una conexión) y puede obtenerlas de cualquier sesión de cualquier equipo.

Por ejemplo, si crea una PSSession desde el equipo Server01 al equipo Server02 y luego 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, esta se mantiene en el equipo remoto hasta que la elimine o se agote el tiempo de espera.

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

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

¿SE PUEDEN VER EN EL EQUIPO LAS PSSESSIONS CREADAS POR OTROS USUARIOS?

Solo puede obtener y administrar las PSSessions creadas por otros usuarios únicamente si puede suministrar las credenciales del usuario que creó la PSSession o si la configuración de sesión que usa la PSSession incluye credenciales de RunAs. De lo contrario, puede obtener, usar, administrar y conectarse únicamente a las PSSessions que haya creado.

¿ES POSIBLE CONECTARSE A UNA PSSESSION DESDE OTRO EQUIPO?

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

Puede usar el cmdlet Disconnect-PSSession para desconectarse de una PSSession. La PSSession se desconecta de la sesión local, pero se mantiene en el equipo remoto. Los comandos siguen ejecutándose en la PSSession desconectada. Puede cerrar Windows PowerShell y apagar el equipo de origen sin interrumpir la PSSession.

Después, incluso horas más tarde, puede usar el cmdlet Get-PSSession para obtener la PSSession y el cmdlet Connect-PSSession para conectarse a la PSSession desde una nueva sesión de otro equipo.

Para más información, consulte about_Remote_Disconnected_Sessions (https://go.microsoft.com/fwlink/?LinkID=252847).

¿QUÉ OCURRE CON LA PSSESSION SI SE DETIENE EL EQUIPO?

Las PSSessions 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, Windows PowerShell trata de recuperar las PSSessions activas que se desconectan involuntariamente (por ejemplo, al reiniciar el equipo, durante un corte temporal de la alimentación o una interrupción de red). Windows PowerShell trata de mantener o recuperar la PSSession con el estado Abierto, en el caso de que la sesión de origen siga estando disponible, o con el estado desconectado si no lo está.

Una PSSession "activa" es una sesión que ejecuta comandos. Si una PSSession está conectada (no desconectada) y hay comandos ejecutándose en la PSSession en el momento en que se cierra la sesión conectada, Windows PowerShell trata de mantener la PSSession en el equipo remoto. Sin embargo, si no hay ningún comando en ejecución en la PSSession, Windows PowerShell cierra la PSSession en el momento en que se cierra la sesión conectada.

Para obtener más información, consulte about_Remote_Disconnected_Sessions (https://go.microsoft.com/fwlink/?LinkID=252847).

¿SE PUEDE 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 sigue ejecutándose en segundo plano hasta que se completa.

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

Para iniciar un trabajo en segundo plano en un equipo remoto, use el cmdlet Invoke-Command con su parámetro AsJob, o bien el cmdlet Invoke-Command para ejecutar un comando Start-Job 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 comando Start-Job, debe ejecutar el comando en una PSSession. Si usa el parámetro ComputerName, Windows PowerShell finaliza la conexión cuando se devuelve el objeto de trabajo y se interrumpe el trabajo.

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

¿SE PUEDE EJECUTAR UNA SESIÓN INTERACTIVA?

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

Puede ejecutar una sesión interactiva en una sesión temporal (con el parámetro ComputerName) o en una PSSession (con el parámetro Session). Si usa una PSSession, esta conserva los datos de los comandos anteriores, así como todos los datos generados durante la sesión interactiva para usarlos en los comandos posteriores.

Al finalizar la sesión interactiva, la PSSession sigue abierta y disponible para su uso.

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

¿SE DEBEN ELIMINAR LAS PSSESSIONS?

Sí. Una PSSession es un proceso, que es un entorno autocontenido que consume memoria y otros recursos, incluso cuando no lo usa. Cuando haya terminado de usar una PSSession, elimínela. Si crea varias PSSessions, cierre las que no use y mantenga únicamente las que esté usando actualmente.

Para eliminar PSSessions, use el cmdlet Remove-PSSession. 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 determinado intervalo. Para más información, consulte New-PSSessionOption.

Si guarda un objeto PSSession en una variable y elimina la PSSession o deja que el tiempo de espera se agote, la variable sigue conteniendo el objeto PSSession, pero esta no está activa y no se puede usar ni reparar.

¿SON IGUALES TODAS LAS SESIONES Y PSSESSIONS?

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

VEA TAMBIÉN

about_Jobs

about_PSSessions

about_Remote

about_Remote_Disconnected_Sessions

about_Remote_Requirements

Invoke-Command

New-PSSession

Get-PSSession

Remove-PSSession

Enter-PSSession

Exit-PSSession