Compartir a través de


Disconnect-PSSession

Se desconecta de una sesión.

Syntax

Disconnect-PSSession
          [-Session] <PSSession[]>
          [-IdleTimeoutSec <Int32>]
          [-OutputBufferingMode <OutputBufferingMode>]
          [-ThrottleLimit <Int32>]
          [-WhatIf]
          [-Confirm]
          [<CommonParameters>]
Disconnect-PSSession
          [-IdleTimeoutSec <Int32>]
          [-OutputBufferingMode <OutputBufferingMode>]
          [-ThrottleLimit <Int32>]
          -Name <String[]>
          [-WhatIf]
          [-Confirm]
          [<CommonParameters>]
Disconnect-PSSession
          [-IdleTimeoutSec <Int32>]
          [-OutputBufferingMode <OutputBufferingMode>]
          [-ThrottleLimit <Int32>]
          -InstanceId <Guid[]>
          [-WhatIf]
          [-Confirm]
          [<CommonParameters>]
Disconnect-PSSession
          [-IdleTimeoutSec <Int32>]
          [-OutputBufferingMode <OutputBufferingMode>]
          [-ThrottleLimit <Int32>]
          [-Id] <Int32[]>
          [-WhatIf]
          [-Confirm]
          [<CommonParameters>]

Description

El Disconnect-PSSession cmdlet desconecta una sesión de PowerShell ("PSSession"), como una iniciada mediante el New-PSSession cmdlet , de la sesión actual. Como resultado, la PSSession está en estado desconectado. Puede conectarse a la PSSession desconectada desde la sesión actual o desde otra sesión en el equipo local o en un equipo diferente.

El Disconnect-PSSession cmdlet solo desconecta las PSSession abiertas que están conectadas a la sesión actual. Disconnect-PSSession no puede desconectar PSSessions rotas o cerradas, ni PSSessions interactivas iniciadas mediante el Enter-PSSession cmdlet y no puede desconectar PSSessions conectadas a otras sesiones.

Para volver a conectarse a una PSSession desconectada, use los Connect-PSSession cmdlets o Receive-PSSession .

Cuando se desconecta una PSSession, los comandos de la PSSession seguirán ejecutándose hasta que se completen, a menos que se agote el tiempo de espera de la PSSession o que los comandos de la PSSession se bloqueen porque el búfer de salida está lleno. Para cambiar el tiempo de espera de inactividad, use el parámetro IdleTimeoutSec. Para cambiar el modo de almacenamiento en búfer de salida, use el parámetro OutputBufferingMode . También puede usar el parámetro InDisconnectedSession del Invoke-Command cmdlet para ejecutar un comando en una sesión desconectada.

Para más información sobre la característica de sesiones desconectadas, consulte about_Remote_Disconnected_Sessions.

Este cmdlet se incorporó en Windows PowerShell 3.0.

Ejemplos

Ejemplo 1: Desconectar una sesión por nombre

Este comando desconecta de la sesión actual la PSSession UpdateSession en el equipo Server01. El comando usa el parámetro Name para identificar la PSSession.

PS> Disconnect-PSSession -Name UpdateSession
Id Name            ComputerName    State         ConfigurationName     Availability
-- ----            ------------    -----         -----------------     ------------
1  UpdateSession   Server01        Disconnected  Microsoft.PowerShell          None

El resultado muestra que el intento de desconexión fue correcto. El estado de la sesión es Disconnected y la disponibilidad es None, que indica que la sesión no está ocupada y puede volver a conectarse.

Ejemplo 2: Desconectar una sesión de un equipo específico

Este comando desconecta de la sesión actual la PSSession ITTask en el equipo Server12. La sesión ITTask se creó en la sesión actual y se conecta al equipo Server12. El comando usa el Get-PSSession cmdlet para obtener la sesión y el Disconnect-PSSession cmdlet para desconectarla.

PS> Get-PSSession -ComputerName Server12 -Name ITTask |
  Disconnect-PSSession -OutputBufferingMode Drop -IdleTimeoutSec 86400
Id Name            ComputerName    State         ConfigurationName     Availability
-- ----            ------------    -----         -----------------     ------------
1  ITTask          Server12        Disconnected  ITTasks               None

El Disconnect-PSSession comando usa el parámetro OutputBufferingMode para establecer el modo de salida en Drop. Esta configuración garantiza que el script que se ejecuta en la sesión puede seguir ejecutándose aunque el búfer de salida de la sesión esté lleno. Como el script escribe su resultado en un informe en un recurso compartido de archivos, los demás resultados se pueden perder sin consecuencias.

El comando también utiliza el parámetro IdleTimeoutSec para extender el tiempo de espera de inactividad de la sesión a 24 horas. Esta configuración da tiempo a este u otros administradores para volver a conectarse a la sesión, comprobar que el script se ha ejecutado y solucionar los problemas si es necesario.

Ejemplo 3: Uso de varias PSSession en varios equipos

Esta serie de comandos muestra cómo se puede usar el Disconnect-PSSession cmdlet en un escenario empresarial. En este caso, un técnico nuevo inicia un script en una sesión de un equipo remoto y se encuentra con un problema. El técnico se desconecta de la sesión para que un administrador con más experiencia pueda conectarse a la sesión y resolver el problema.

PS> $s = New-PSSession -ComputerName Srv1, Srv2, Srv30 -Name ITTask
PS> Invoke-Command $s -FilePath \\Server01\Scripts\Get-PatchStatus.ps1
PS> Get-PSSession -Name ITTask -ComputerName Srv1 | Disconnect-PSSession
Id Name            ComputerName    State         ConfigurationName     Availability
-- ----            ------------    -----         -----------------     ------------
1 ITTask           Srv1            Disconnected  Microsoft.PowerShell          None

PS> Get-PSSession -ComputerName Srv1, Srv2, Srv30 -Name ITTask
Id Name            ComputerName    State         ConfigurationName     Availability
-- ----            ------------    -----         -----------------     ------------
 1 ITTask          Srv1            Disconnected  Microsoft.PowerShell          None
 2 ITTask          Srv2            Opened        Microsoft.PowerShell     Available
 3 ITTask          Srv30           Opened        Microsoft.PowerShell     Available

PS> Get-PSSession -ComputerName Srv1 -Name ITTask -Credential Domain01\User01
Id Name            ComputerName    State         ConfigurationName     Availability
-- ----            ------------    -----         -----------------     ------------
 1 ITTask          Srv1            Disconnected  Microsoft.PowerShell          None

PS> $s = Connect-PSSession -ComputerName Srv1 -Name ITTask -Credential Domain01\User01
PS> Invoke-Command -Session $s {dir $home\Scripts\PatchStatusOutput.ps1}
PS> Invoke-Command -Session $s {mkdir $home\Scripts\PatchStatusOutput}
PS> Invoke-Command -Session $s -FilePath \\Server01\Scripts\Get-PatchStatus.ps1
PS> Disconnect-PSSession -Session $s

El técnico comienza por crear sesiones en varios equipos remotos y ejecutar un script en cada sesión. El primer comando usa el New-PSSession cmdlet para crear la sesión de ITTask en tres equipos remotos. El comando guarda las sesiones en la variable $s. El segundo comando usa el parámetro FilePath del Invoke-Command cmdlet para ejecutar un script en las sesiones de la variable $s.

El script que se ejecuta en el equipo Srv1 genera errores inesperados. El técnico se pone en contacto con su administrador y solicita asistencia. El gerente dirige al técnico a desconectar de la sesión para que pueda investigar. El segundo comando usa el Get-PSSession cmdlet para obtener la sesión itTask en el equipo Srv1 y el Disconnect-PSSession cmdlet para desconectarla. Este comando no afecta a las sesiones itTask en los demás equipos.

El tercer comando usa el Get-PSSession cmdlet para obtener las sesiones itTask. El resultado muestra que las sesiones ITTask en los equipos Srv2 y Srv30 no resultaron afectadas por el comando de desconexión.

El administrador inicia sesión en su equipo doméstico, se conecta a su red corporativa, inicia Windows PowerShell y usa el Get-PSSession cmdlet para obtener la sesión itTask en el equipo Srv1. Utiliza las credenciales del técnico para acceder a la sesión.

A continuación, el administrador usa el Connect-PSSession cmdlet para conectarse a la sesión de ITTask en el equipo Srv1. El comando guarda la sesión en la variable $s.

El administrador usa el Invoke-Command cmdlet para ejecutar algunos comandos de diagnóstico en la sesión de la $s variable . Identifica que el script produjo un error porque no encontró un directorio necesario. El administrador usa la MkDir función para crear el directorio y, a continuación, reinicia el Get-PatchStatus.ps1 script y se desconecta de la sesión. El administrador informa de sus hallazgos al técnico, sugiere que se vuelve a conectar a la sesión para completar las tareas y le pide que agregue un comando al Get-PatchStatus.ps1 script que crea el directorio necesario si no existe.

Ejemplo 4: Cambio del valor de tiempo de espera de una PSSession

Este ejemplo muestra cómo corregir el valor de la propiedad IdleTimeout de una sesión para que se pueda desconectar.

El tiempo de espera de inactividad de una sesión es fundamental para las sesiones desconectadas, porque determina cuánto tiempo se conserva una sesión desconectada antes de eliminarse. Puede establecer la opción de tiempo de espera de inactividad cuando se crea una sesión y cuando se desconecta. Los valores predeterminados para el tiempo de espera de inactividad de una sesión se establecen en la $PSSessionOption variable de preferencia en el equipo local y en la configuración de sesión en el equipo remoto. Los valores establecidos para la sesión tienen prioridad sobre los valores establecidos en la configuración de sesión, pero los valores de sesión no pueden exceder las cuotas establecidas en la configuración de sesión, como el valor de MaxIdleTimeoutMs.

PS> $Timeout = New-PSSessionOption -IdleTimeout 172800000
PS> $s = New-PSSession -Computer Server01 -Name ITTask -SessionOption $Timeout
PS> Disconnect-PSSession -Session $s
Disconnect-PSSession : The session ITTask cannot be disconnected because the specified
idle timeout value 172800(seconds) is either greater than the server maximum allowed
43200 (seconds) or less that the minimum allowed60(seconds).  Choose an idle time out
value that is within the allowed range and try again.

PS> Invoke-Command -ComputerName Server01 {Get-PSSessionConfiguration Microsoft.PowerShell} |
 Format-List -Property *

Architecture                  : 64
Filename                      : %windir%\system32\pwrshplugin.dll
ResourceUri                   : https://schemas.microsoft.com/powershell/microsoft.powershell
MaxConcurrentCommandsPerShell : 1000
UseSharedProcess              : false
ProcessIdleTimeoutSec         : 0
xmlns                         : https://schemas.microsoft.com/wbem/wsman/1/config/PluginConfiguration
MaxConcurrentUsers            : 5
lang                          : en-US
SupportsOptions               : true
ExactMatch                    : true
RunAsUser                     :
IdleTimeoutms                 : 7200000
PSVersion                     : 3.0
OutputBufferingMode           : Block
AutoRestart                   : false
SecurityDescriptorSddl        : O:NSG:BAD:P(A;;GA;;;BA)S:P(AU;FA;GA;;;WD)(AU;SA;GXGW;;;WD)
MaxMemoryPerShellMB           : 1024
MaxIdleTimeoutms              : 2147483647
Uri                           : https://schemas.microsoft.com/powershell/microsoft.powershell
SDKVersion                    : 2
Name                          : microsoft.powershell
XmlRenderingType              : text
Capability                    : {Shell}
RunAsPassword                 :
MaxProcessesPerShell          : 15
ParentResourceUri             : https://schemas.microsoft.com/powershell/microsoft.powershell
Enabled                       : true
MaxShells                     : 25
MaxShellsPerUser              : 25
Permission                    : BUILTIN\Administrators AccessAllowed
PSComputerName                : localhost
RunspaceId                    : aea84310-6dbf-4c21-90ac-13980039925a
PSShowComputerName            : True


PS> $s.Runspace.ConnectionInfo
ConnectionUri                     : http://Server01/wsman
ComputerName                      : Server01
Scheme                            : http
Port                              : 80
AppName                           : /wsman
Credential                        :
ShellUri                          : https://schemas.microsoft.com/powershell/Microsoft.PowerShell
AuthenticationMechanism           : Default
CertificateThumbprint             :
MaximumConnectionRedirectionCount : 5
MaximumReceivedDataSizePerCommand :
MaximumReceivedObjectSize         : 209715200
UseCompression                    : True
NoMachineProfile                  : False
ProxyAccessType                   : None
ProxyAuthentication               : Negotiate
ProxyCredential                   :
SkipCACheck                       : False
SkipCNCheck                       : False
SkipRevocationCheck               : False
NoEncryption                      : False
UseUTF16                          : False
OutputBufferingMode               : Drop
IncludePortInSPN                  : False
Culture                           : en-US
UICulture                         : en-US
OpenTimeout                       : 180000
CancelTimeout                     : 60000
OperationTimeout                  : 180000
IdleTimeout                       : 172800000

PS> Disconnect-PSSession $s -IdleTimeoutSec 43200
Id Name            ComputerName    State         ConfigurationName     Availability
-- ----            ------------    -----         -----------------     ------------
 4 ITTask          Server01        Disconnected  Microsoft.PowerShell          None

PS> $s.Runspace.ConnectionInfo.IdleTimeout
43200000

El primer comando usa el New-PSSessionOption cmdlet para crear un objeto de opción de sesión. Usa el parámetro IdleTimeout para establecer un tiempo de inactividad de 48 horas (172.800.000 milisegundos). El comando guarda el objeto de opción de sesión en la variable $Timeout.

El segundo comando usa el New-PSSession cmdlet para crear la sesión itTask en el equipo Server01. El comando guarda la sesión en la variable $s. El valor del parámetro SessionOption es el tiempo de espera de inactividad de 48 horas que hay en la variable $Timeout.

El tercer comando desconecta la sesión ITTask de la variable $s. El comando produce un error porque el valor de tiempo de espera de inactividad de la sesión supera la cuota de MaxIdleTimeoutMs de la configuración de sesión. Como el tiempo de espera de inactividad no se utiliza hasta que la sesión se desconecta, esta infracción puede pasar desapercibida mientras la sesión está en uso.

El cuarto comando usa el Invoke-Command cmdlet para ejecutar un Get-PSSessionConfiguration comando para la configuración de sesión de Microsoft.PowerShell en el equipo Server01. El comando usa el Format-List cmdlet para mostrar todas las propiedades de la configuración de sesión en una lista. La salida muestra que la propiedad MaxIdleTimeoutMS , que establece el valor máximo permitido idleTimeout para las sesiones que usan la configuración de sesión, es de 43200000 milisegundos (12 horas).

El quinto comando obtiene los valores de las opciones de sesión de la sesión de la variable $s. Los valores de muchas opciones de sesión son propiedades de la propiedad ConnectionInfo de la propiedad Runspace de la sesión. La salida muestra que el valor de la propiedad IdleTimeout de la sesión es de 1728000000 milisegundos (48 horas), lo que infringe la cuota de MaxIdleTimeoutMs de 12 horas en la configuración de sesión. Para resolver este conflicto, puede usar el parámetro ConfigurationName para seleccionar una configuración de sesión diferente o usar el parámetro IdleTimeout para reducir el tiempo de espera de inactividad de la sesión.

El sexto comando desconecta la sesión. Usa el parámetro IdleTimeoutSec para establecer el tiempo de espera de inactividad en el máximo de 12 horas.

El séptimo comando obtiene el valor de la propiedad IdleTimeout de la sesión desconectada, que se mide en milisegundos. El resultado muestra que el comando se ejecutó correctamente.

Parámetros

-Confirm

Le solicita su confirmación antes de ejecutar el cmdlet.

Type:SwitchParameter
Aliases:cf
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Id

Desconecta las sesiones con el identificador de sesión especificado. Escriba uno o más identificadores (separados por coma) o utilice el operador de intervalo (..) para especificar un intervalo de identificadores.

Para obtener el identificador de una sesión, use el Get-PSSession cmdlet . El identificador de instancia se almacena en la propiedad ID de la sesión.

Type:Int32[]
Position:1
Default value:None
Required:True
Accept pipeline input:True
Accept wildcard characters:False

-IdleTimeoutSec

Cambia el valor del tiempo de espera de inactividad de la PSSession desconectada. Especifique un valor en segundos. El valor mínimo es 60 (1 minuto).

El tiempo de espera de inactividad determina cuánto tiempo se conserva la PSSession desconectada en el equipo remoto. Cuando expira el tiempo de espera, se elimina la PSSession.

Las PSSessions desconectadas se consideran inactivas desde el momento en que se desconectan, aunque se estén ejecutando comandos en la sesión desconectada.

El valor predeterminado del tiempo de espera de inactividad de una sesión se establece con el valor de la propiedad IdleTimeoutMs de la configuración de sesión. El valor predeterminado es 7200000 segundos (2 horas).

El valor de este parámetro tiene prioridad sobre el valor de la propiedad IdleTimeout de la variable de preferencia $PSSessionOption y sobre el valor de tiempo de espera de inactividad predeterminado en la configuración de sesión. Sin embargo, este valor no puede superar el valor de la propiedad MaxIdleTimeoutMs de la configuración de sesión. El valor predeterminado de MaxIdleTimeoutMs es de 12 horas (43200000 milisegundos).

Type:Int32
Position:Named
Default value:60
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-InstanceId

Desconecta las sesiones que tienen los identificadores de instancia especificados.

El identificador de instancia es un GUID que identifica de forma única una sesión en un equipo local o remoto. El identificador de instancia es único, incluso en varias sesiones en varios equipos.

Para obtener el identificador de instancia de una sesión, use el Get-PSSession cmdlet . El identificador de instancia se almacena en la propiedad InstanceID de la sesión.

Type:Guid[]
Position:Named
Default value:None
Required:True
Accept pipeline input:True
Accept wildcard characters:False

-Name

Desconecta las sesiones que tienen los nombres descriptivos especificados. Se permiten los caracteres comodín.

Para obtener el nombre descriptivo de una sesión, use el Get-PSSession cmdlet . El nombre descriptivo se almacena en la propiedad Name de la sesión.

Type:String[]
Position:Named
Default value:None
Required:True
Accept pipeline input:True
Accept wildcard characters:True

-OutputBufferingMode

Determina cómo se administran los resultados del comando de la sesión desconectada cuando el búfer de salida está lleno. El valor predeterminado es Block.

Si el comando de la sesión desconectada devuelve resultados y el búfer de salida se llena, el valor de este parámetro determina si el comando continúa ejecutándose mientras la sesión está desconectada. El valor Block suspende el comando hasta que la sesión se vuelva a conectar. El valor Drop permite que el comando se complete, aunque se podrían perder datos. Cuando use el valor Drop, redirija el resultado del comando a un archivo en disco.

Los valores válidos son:

  • Bloquear: cuando el búfer de salida está lleno, la ejecución se suspende hasta que se borra el búfer.
  • Drop: cuando el búfer de salida está lleno, la ejecución continúa. Conforme se guarda el nuevo resultado, se descarta el resultado más antiguo.
  • Ninguno: no se especifica ningún modo de almacenamiento en búfer de salida. El valor de la propiedad OutputBufferingMode de la configuración de sesión se usa para la sesión desconectada.
Type:OutputBufferingMode
Position:Named
Default value:Block
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Session

Desconecta las PSSessions especificadas. Escriba los objetos PSSession, como los que devuelve el New-PSSession cmdlet. También puede canalizar un objeto PSSession a Disconnect-PSSession.

El Get-PSSession cmdlet puede obtener todas las PSSessions que finalizan en un equipo remoto, incluidas psSessions que están desconectadas y PSSession que están conectadas a otras sesiones en otros equipos. Disconnect-PSSession desconecta solo PSSession que están conectados a la sesión actual. Si canaliza otras PSSessions a Disconnect-PSSession, se produce un error en el Disconnect-PSSession comando .

Type:PSSession[]
Position:1
Default value:None
Required:True
Accept pipeline input:True
Accept wildcard characters:False

-ThrottleLimit

Establece el límite del Disconnect-PSSession comando.

La limitación es el número máximo de conexiones simultáneas que pueden establecerse para ejecutar este comando. Si omite este parámetro o escribe un valor 0, se usa el valor predeterminado, 32.

El límite solo se aplica al comando actual, no a la sesión ni al equipo.

Type:Int32
Position:Named
Default value:32
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-WhatIf

Muestra lo que sucedería si se ejecutara el cmdlet. El cmdlet no se ejecuta.

Type:SwitchParameter
Aliases:wi
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

Entradas

PSSession

Puede canalizar una sesión a Disconnect-PSSession.

Salidas

PSSession

Disconnect-PSSession devuelve un objeto que representa la sesión desconectada.

Notas

  • El Disconnect-PSSession cmdlet solo funciona cuando los equipos locales y remotos ejecutan PowerShell 3.0 o posterior.

  • Si usa el Disconnect-PSSession cmdlet en una sesión desconectada, el comando no tiene ningún efecto en la sesión y no genera errores.

  • Las sesiones de bucle invertido desconectadas con tokens de seguridad interactivos (creados con el parámetro EnableNetworkAccess) pueden volver a conectarse solo desde el equipo donde se creó la sesión. Esta restricción protege el equipo contra accesos malintencionados.

  • Cuando se desconecta una PSSession, el estado de sesión es Disconnected y la disponibilidad es None.

    El valor de la propiedad State es relativa a la sesión actual. Por lo tanto, un valor de Disconnected significa que la PSSession no está conectada a la sesión actual, pero no significa que la PSSession esté desconectada de todas las sesiones. Podría estar conectada a una sesión diferente. Para saber si se puede conectar o volver a conectar a la sesión, use la propiedad Availability.

    Un valor de Availability establecido en None indica que se puede conectar a la sesión. Un valor Busy indica que no se puede conectar a la PSSession porque está conectada a otra sesión.

    Para obtener más información sobre los valores de la propiedad State de las sesiones, vea RunspaceState (enumeración).

    Para obtener más información sobre los valores de la propiedad Availability de las sesiones, vea RunspaceAvailability (enumeración).