Leer en inglés

Compartir a través de


Disconnect-PSSession

Se desconecta de una sesión.

Sintaxis

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

Description

Este cmdlet solo está disponible en la plataforma Windows.

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

El cmdlet Disconnect-PSSession solo se desconecta PSSessions que están conectados a la sesión actual. Disconnect-PSSession no se puede desconectar PSSessionso psSessions interactivas psSessions iniciadas mediante el cmdlet Enter-PSSession y no se puede desconectar PSSessions que están conectados a otras sesiones.

Para volver a conectarse a un PSSession desconectado, use los cmdlets Connect-PSSession o Receive-PSSession.

Cuando se desconecta un de PSSession de, los comandos del PSSession continúan ejecutándose hasta que se completen, a menos que el psSession de agote el tiempo de espera o los comandos del PSSession de estén bloqueados por un búfer de salida completo. 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 cmdlet Invoke-Command para ejecutar un comando en una sesión desconectada.

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

Este cmdlet se presenta en Windows PowerShell 3.0.

Ejemplos

Ejemplo 1: Desconectar una sesión por nombre

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

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

La salida muestra que el intento de desconexión se realizó correctamente. El estado de sesión es Disconnected y el de disponibilidad de es None, lo que indica que la sesión no está ocupada y se puede volver a conectar.

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

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

PowerShell
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 comando Disconnect-PSSession 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 incluso si el búfer de salida de la sesión está lleno. Dado que el script escribe su salida en un informe en un recurso compartido de archivos, se puede perder otra salida sin consecuencias.

El comando también usa el parámetro IdleTimeoutSec para ampliar el tiempo de espera de inactividad de la sesión a 24 horas. Esta configuración permite que este administrador u otros administradores se vuelvan a conectar a la sesión para comprobar que el script se ejecutó y solucionar problemas si es necesario.

Ejemplo 3: Uso de varias PSSessions en varios equipos

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

PowerShell
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 creando sesiones en varios equipos remotos y ejecutando un script en cada sesión. El primer comando usa el cmdlet New-PSSession 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 cmdlet Invoke-Command 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 gerente y pide ayuda. El gerente dirige al técnico para que se desconecte de la sesión para que pueda investigar. El segundo comando usa el cmdlet Get-PSSession para obtener la sesión de ITTask en el equipo Srv1 y el cmdlet Disconnect-PSSession para desconectarlo. Este comando no afecta a las sesiones de ITTask en los demás equipos.

El tercer comando usa el cmdlet Get-PSSession para obtener las sesiones de ITTask. La salida muestra que las sesiones de ITTask en los equipos Srv2 y Srv30 no se vieron afectadas por el comando para desconectar.

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

A continuación, el administrador usa el cmdlet Connect-PSSession 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 cmdlet Invoke-Command para ejecutar algunos comandos de diagnóstico en la sesión en la variable $s. Reconoce que se produjo un error en el script porque no encontró un directorio necesario. El administrador usa la función MkDir para crear el directorio y, a continuación, reinicia el script de Get-PatchStatus.ps1 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 script de Get-PatchStatus.ps1 que crea el directorio necesario si no existe.

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

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

La propiedad de tiempo de espera de inactividad de una sesión es fundamental para las sesiones desconectadas, ya que determina cuánto tiempo se mantiene una sesión desconectada antes de eliminarla. Puede establecer la opción de tiempo de espera de inactividad al crear una sesión y al desconectarla. Los valores predeterminados para el tiempo de espera de inactividad de una sesión se establecen en la variable de preferencia $PSSessionOption en el equipo local y en la configuración de sesión del 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 superar las cuotas establecidas en la configuración de sesión, como el valor de MaxIdleTimeoutMs.

PowerShell
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                   : http://schemas.microsoft.com/powershell/microsoft.powershell
MaxConcurrentCommandsPerShell : 1000
UseSharedProcess              : false
ProcessIdleTimeoutSec         : 0
xmlns                         : http://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                           : http://schemas.microsoft.com/powershell/microsoft.powershell
SDKVersion                    : 2
Name                          : microsoft.powershell
XmlRenderingType              : text
Capability                    : {Shell}
RunAsPassword                 :
MaxProcessesPerShell          : 15
ParentResourceUri             : http://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                          : http://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 cmdlet New-PSSessionOption para crear un objeto de opción de sesión. Usa el parámetro IdleTimeout para establecer un tiempo de espera de inactividad de 48 horas (172800000 milisegundos). El comando guarda el objeto de opción de sesión en la variable $Timeout.

El segundo comando usa el cmdlet New-PSSession para crear la sesión de 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 en la variable $Timeout.

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

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

El quinto comando obtiene los valores de opción de sesión de la sesión en 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 172800000 milisegundos (48 horas), lo que infringe el MaxIdleTimeoutMs cuota 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 idleTimeout propiedad de la sesión desconectada, que se mide en milisegundos. La salida confirma que el comando se realizó correctamente.

Parámetros

-Confirm

Le pide confirmación antes de ejecutar el cmdlet.

Tipo:SwitchParameter
Alias:cf
Posición:Named
Valor predeterminado:False
Requerido:False
Aceptar entrada de canalización:False
Aceptar caracteres comodín:False

-Id

Se desconecta de las sesiones con el identificador de sesión especificado. Escriba uno o varios identificadores (separados por comas) o use el operador de intervalo (..) para especificar un intervalo de identificadores.

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

Tipo:Int32[]
Posición:1
Valor predeterminado:None
Requerido:True
Aceptar entrada de canalización:True
Aceptar caracteres comodín:False

-IdleTimeoutSec

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

El tiempo de espera de inactividad determina cuánto tiempo se mantiene el de PSSession desconectado en el equipo remoto. Cuando expire el tiempo de espera, se elimina el de psSession de.

Los PSSessions desconectados se consideran inactivos desde el momento en que se desconectan, incluso si los comandos se ejecutan en la sesión desconectada.

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

El valor de este parámetro tiene prioridad sobre el valor de la propiedad IdleTimeout de la variable de preferencia $PSSessionOption y 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 del MaxIdleTimeoutMs propiedad de la configuración de sesión. El valor predeterminado de MaxIdleTimeoutMs es de 12 horas (43200000 milisegundos).

Tipo:Int32
Posición:Named
Valor predeterminado:60
Requerido:False
Aceptar entrada de canalización:False
Aceptar caracteres comodín:False

-InstanceId

Se desconecta de las sesiones con 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 de varios equipos.

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

Tipo:Guid[]
Posición:Named
Valor predeterminado:None
Requerido:True
Aceptar entrada de canalización:True
Aceptar caracteres comodín:False

-Name

Se desconecta de las sesiones con los nombres descriptivos especificados. Se permiten caracteres comodín.

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

Tipo:String[]
Posición:Named
Valor predeterminado:None
Requerido:True
Aceptar entrada de canalización:True
Aceptar caracteres comodín:True

-OutputBufferingMode

Determina cómo se administra la salida del comando en 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 la salida y el búfer de salida se rellena, el valor de este parámetro determina eficazmente si el comando continúa ejecutándose mientras la sesión está desconectada. Un valor de Block suspende el comando hasta que se vuelva a conectar la sesión. Un valor de Drop permite que el comando se complete, aunque es posible que se pierdan los datos. Al usar el valor de Drop, redirija la salida del comando a un archivo en el disco.

Los valores válidos son:

  • Block: cuando el búfer de salida está lleno, la ejecución se suspende hasta que el búfer está claro.
  • Drop: cuando el búfer de salida está lleno, la ejecución continúa. A medida que se guarda la nueva salida, se descarta la salida más antigua.
  • None: 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.
Tipo:OutputBufferingMode
Posición:Named
Valor predeterminado:Block
Requerido:False
Aceptar entrada de canalización:False
Aceptar caracteres comodín:False

-Session

Desconecta del PSSessions especificado. Escriba objetos de PSSession, como los que devuelve el cmdlet New-PSSession. También puede canalizar un objeto de PSSession para Disconnect-PSSession.

El cmdlet Get-PSSession puede obtener todos los PSSessions que finalizan en un equipo remoto, incluidos PSSessions que están desconectados y PSSessions que están conectados 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 comando Disconnect-PSSession.

Tipo:PSSession[]
Posición:1
Valor predeterminado:None
Requerido:True
Aceptar entrada de canalización:True
Aceptar caracteres comodín:False

-ThrottleLimit

Establece el límite de limitación para el comando Disconnect-PSSession.

El límite de limitación es el número máximo de conexiones simultáneas que se pueden establecer para ejecutar este comando. Si omite este parámetro o especifica un valor de 0, se usa el valor predeterminado, 32, .

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

Tipo:Int32
Posición:Named
Valor predeterminado:32
Requerido:False
Aceptar entrada de canalización:False
Aceptar caracteres comodín:False

-WhatIf

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

Tipo:SwitchParameter
Alias:wi
Posición:Named
Valor predeterminado:False
Requerido:False
Aceptar entrada de canalización:False
Aceptar caracteres comodín:False

Entradas

PSSession

Puede canalizar una sesión a este cmdlet.

Salidas

PSSession

Este cmdlet devuelve un objeto que representa la sesión que desconecta.

Notas

PowerShell incluye los siguientes alias para Disconnect-PSSession:

  • Windows:
    • dnsn

Este cmdlet solo está disponible en plataformas Windows.

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

  • Si usa el cmdlet Disconnect-PSSession 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 (los creados con el parámetro EnableNetworkAccess) solo se pueden volver a conectar desde el equipo en el que se creó la sesión. Esta restricción protege el equipo contra el acceso malintencionado.

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

    El valor de la propiedad state es relativa a la sesión actual. Por lo tanto, un valor de Disconnected significa que el de PSSession de no está conectado a la sesión actual. Sin embargo, no significa que el psSession se desconecta de todas las sesiones. Puede estar conectado a otra sesión. Para determinar si puede conectarse o volver a conectarse a la sesión, use la propiedad availability .

    Un valor Availability de None indica que puede conectarse a la sesión. Un valor de Busy indica que no se puede conectar al PSSession porque está conectado a otra sesión.

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

    Para obtener más información sobre los valores de la propiedad availability de sesiones, vea RunspaceAvailability Enumeration.