Disconnect-PSSession

Отключает от сеанса.

Синтаксис

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>]

Описание

Этот командлет доступен только на платформе Windows.

Командлет Disconnect-PSSession отключает сеанс PowerShell (PSSession), например запущенный с помощью командлета New-PSSession , от текущего сеанса. В результате PSSession находится в отключенном состоянии. Вы можете подключиться к отключенному psSession из текущего сеанса или из другого сеанса на локальном компьютере или другом компьютере.

Командлет Disconnect-PSSession отключает только открытые psSessions , подключенные к текущему сеансу. Disconnect-PSSession не может отключать неработающие или закрытые сеансы PSSession или интерактивные psSessions , запущенные с помощью Enter-PSSession командлета, и не могут отключать psSession , подключенные к другим сеансам.

Чтобы повторно подключиться к отключенной psSession, используйте Connect-PSSession командлеты или Receive-PSSession .

При отключении PSSession команды в PSSession продолжают выполняться до их завершения, если только не истекло время ожидания PSSession или команды в PSSession не блокируются полным буфером вывода. Чтобы изменить время ожидания простоя, используйте параметр IdleTimeoutSec. Чтобы изменить режим буферизации выходных данных, используйте параметр OutputBufferingMode . Вы также можете использовать параметр InDisconnectedSession командлета Invoke-Command для выполнения команды в отключенном сеансе.

Дополнительные сведения о функции отключенных сеансов см. в разделе about_Remote_Disconnected_Sessions.

Этот командлет впервые появился в Windows PowerShell 3.0.

Примеры

Пример 1. Отключение сеанса по имени

Эта команда отключает UpdateSessionPSSession на компьютере Server01 от текущего сеанса. Команда использует параметр Name для идентификации PSSession.

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

Выходные данные показывают, что попытка отключения оказалась успешной. Состояние сеанса — , Disconnected а значение ДоступностиNone, что означает, что сеанс не занят и его можно повторно подключить.

Пример 2. Отключение сеанса от определенного компьютера

Эта команда отключает ITTaskPSSession на компьютере Server12 от текущего сеанса. Сеанс ITTask был создан в текущем сеансе и подключается к компьютеру Server12. Команда использует командлет для Get-PSSession получения сеанса, а командлет — Disconnect-PSSession для отключения сеанса.

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

Команда Disconnect-PSSession использует параметр OutputBufferingMode , чтобы задать для режима вывода значение Drop. Это гарантирует, что выполнения скрипта, запущенного в данном сеансе, будет продолжено, даже если выходной буфер сеанса заполнен. Поскольку скрипт записывает выходные данные в отчет, находящийся в общей папке, другие выходные данные могут быть потеряны без последствий.

Кроме того, команда включает параметр IdleTimeoutSec, увеличивающий время ожидания простоя сеанса до 24 часов. Это позволит данному или другим администраторам восстановить подключение к сеансу, убедиться, что скрипт был выполнен, и устранить неполадки, если потребуется.

Пример 3. Использование нескольких psSessions на нескольких компьютерах

В этой серии команд показано, как Disconnect-PSSession командлет может использоваться в корпоративном сценарии. В данном случае новый специалист запускает скрипт в сеансе на удаленном компьютере и сталкивается с проблемой. Специалист отключается от сеанса, чтобы более опытный менеджер смогу подключиться к сеансу и устранить проблему.

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

Для начала специалист создает сеансы на нескольких удаленных компьютерах и запускает скрипт в каждом из этих сеансов. Первая команда использует командлет для New-PSSession создания сеанса ITTask на трех удаленных компьютерах. Команда сохраняет сеансы в переменной $s . Вторая команда использует параметр FilePath командлета Invoke-Command для запуска скрипта в сеансах в переменной $s .

Скрипт, запущенный на компьютере Srv1, вызывает непредвиденные ошибки. Специалист обращается за помощью к менеджеру. Руководитель предписывает техническому специалисту отключиться от сеанса, чтобы он смог провести расследование. Вторая команда использует командлет , Get-PSSession чтобы получить ITTask сеанс на компьютере Srv1, а Disconnect-PSSession командлет — для отключения. Эта команда не влияет на сеансы ITTask на других компьютерах.

Третья команда использует Get-PSSession командлет для получения сеансов ITTask . Выходные данные показывают, что ITTask на сеансы на компьютерах Srv2 и Srv30 не повлияла команда отключения.

Руководитель входит на домашний компьютер, подключается к корпоративной сети, запускает PowerShell и использует Get-PSSession командлет для получения сеанса ITTask на компьютере Srv1. Для доступа к сеансу он использует учетные данные специалиста.

Затем диспетчер использует Connect-PSSession командлет для подключения к сеансу ITTask на компьютере Srv1. Сеанс сохраняется в переменную $s.

Диспетчер использует Invoke-Command командлет для выполнения некоторых команд диагностики в сеансе в переменной $s . Он понимает, что скрипт не выполняется, так как не может найти необходимый каталог. Руководитель использует функцию MkDir для создания каталога, а затем перезапускает Get-PatchStatus.ps1 скрипт и отключается от сеанса. Руководитель сообщает о своих результатах техническому специалисту, предлагает ему повторно подключиться к сеансу для выполнения задач, и просит его добавить команду в Get-PatchStatus.ps1 скрипт, который создает требуемый каталог, если он не существует.

Пример 4. Изменение значения времени ожидания для PSSession

В этом примере показано, как скорректировать значение свойства IdleTimeout сеанса таким образом, чтобы сеанс можно было отключить.

Свойство времени ожидания простоя имеет важное значение для отключенных сеансов, поскольку определяет, как долго отключенный сеанс будет храниться до удаления. Время ожидания простоя можно настроить при создании сеанса, а также при отключении. Значения по умолчанию для времени ожидания простоя сеанса задаются в переменной $PSSessionOption предпочтения на локальном компьютере и в конфигурации сеанса на удаленном компьютере. Значения, установленные для сеанса, превалируют над значениями, установленными в конфигурации сеанса, но не могут превышать квоты, предусмотренные конфигурацией сеанса, например, значением 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                   : 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

Первая команда использует командлет для New-PSSessionOption создания объекта параметра сеанса. Параметр IdleTimeout используется для установки времени ожидания простоя 48 часов (172800000 миллисекунда). Команда сохраняет объект параметра сеанса в переменной $Timeout .

Вторая команда использует New-PSSession командлет для создания сеанса ITTask на компьютере Server01. Команда сохранит сеанс в переменной $s . Значение параметра SessionOption — это 48-часовое время ожидания простоя в переменной $Timeout .

Третья команда отключает ITTask сеанс в переменной $s . Команда завершается ошибкой, так как превышает квоту MaxIdleTimeoutMs для времени ожидания простоя, указанную в конфигурации сеанса. Поскольку значение времени ожидания простоя не используется, пока сеанс не будет отключен, это нарушение может оставаться незамеченными, пока сеанс еще используется.

Четвертая команда использует Invoke-Command командлет для выполнения Get-PSSessionConfiguration команды для конфигурации Microsoft.PowerShell сеанса на компьютере Server01. Команда использует командлет для Format-List отображения всех свойств конфигурации сеанса в списке. Выходные данные показывают, что свойство MaxIdleTimeoutMS , которое устанавливает максимально допустимое значение IdleTimeout для сеансов, использующих конфигурацию сеанса, составляет 43200000 миллисекунда (12 часов).

Пятая команда получает значения параметров сеанса в переменной $s . Значения многих параметров сеанса являются свойствами свойства ConnectionInfo свойства Runspace сеанса. Выходные данные показывают, что значение свойства IdleTimeout сеанса составляет 172800000 миллисекунда (48 часов), что нарушает квоту MaxIdleTimeoutMs в 12 часов в конфигурации сеанса. Чтобы устранить этот конфликт, можно использовать параметр ConfigurationName , чтобы выбрать другую конфигурацию сеанса, или использовать параметр IdleTimeout , чтобы сократить время ожидания сеанса.

Шестая команда отключает сеанс. С помощью параметра IdleTimeoutSec она устанавливает время ожидания простоя, равное 12 часовому максимуму.

Седьмая команда получает значение свойства IdleTimeout отключенного сеанса, которое измеряется в миллисекундах. Выходные данные подтверждают, что команда выполнена успешно.

Параметры

-Confirm

Запрос подтверждения перед выполнением командлета.

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

-Id

Отключается от сеансов с указанным идентификатором сеанса. Введите один или несколько идентификаторов (разделенных запятыми) или используйте оператор диапазона (..), чтобы указать диапазон идентификаторов.

Чтобы получить идентификатор сеанса, используйте Get-PSSession командлет . Идентификатор экземпляра хранится в свойстве ID сеанса.

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

-IdleTimeoutSec

Изменяет значение времени ожидания простоя для отключенного сеанса PSSession. Введите значение в секундах. Минимальное значение — 60 (1 минута).

Время ожидания простоя определяет, как долго на удаленном компьютере будет поддерживаться отключенный сеанс PSSession . По истечении времени ожидания PSSession удаляется.

Отключенные сеансы PSSessions считаются бездействующими с момента отключения, даже если команды выполняются в отключенном сеансе.

Время ожидания простоя сеанса по умолчанию определяется значением свойства IdleTimeoutMs конфигурации сеанса. Значение по умолчанию — 7200000 миллисекунда (2 часа).

Значение этого параметра имеет приоритет над значением свойства IdleTimeout переменной $PSSessionOption предпочтения и значением времени ожидания простоя по умолчанию в конфигурации сеанса. Тем не менее, это значение не может превышать значение свойства MaxIdleTimeoutMs конфигурации сеанса. Значение maxIdleTimeoutMs по умолчанию равно 12 часам (43200000 миллисекундам).

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

-InstanceId

Отключается от сеансов с указанными идентификаторами экземпляров.

Идентификатор экземпляра — это GUID, однозначно определяющий сеанс на локальном или удаленном компьютере. Идентификатор экземпляра уникален даже для нескольких сеансов на различных компьютерах.

Чтобы получить идентификатор экземпляра сеанса, используйте Get-PSSession командлет . Идентификатор экземпляра хранится в свойстве InstanceID сеанса.

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

-Name

Отключается от сеансов с указанными понятными именами. Разрешено использовать подстановочные знаки.

Чтобы получить понятное имя сеанса, используйте Get-PSSession командлет . Понятное имя хранится в свойстве Name сеанса.

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

-OutputBufferingMode

Определяет порядок управления выходным потоком команды в отключенном сеансе при заполнении . Значение по умолчанию — Block.

Если команда в отключенном сеансе возвращает данные и заполняет выходной буфер, значение этого параметра определяет, продолжится ли выполнение этой команды в отключенном сеансе. Значение Block приостанавливает выполнение команды до повторного подключения сеанса. Значение Drop позволяет выполнить команду, хотя данные могут быть потеряны. При использовании Drop значения перенаправьте выходные данные команды в файл на диске.

Допустимые значения:

  • Block: когда выходной буфер заполнен, выполнение приостанавливается до тех пор, пока буфер не будет очищен.
  • Drop: когда выходной буфер заполнен, выполнение продолжается. Новые выходные данные сохраняются вместо наиболее старых.
  • None: режим буферизации выходных данных не указан. Значение свойства OutputBufferingMode конфигурации сеанса используется для отключенного сеанса.
Type:OutputBufferingMode
Position:Named
Default value:Block
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Session

Отключается от указанного сеанса PSSessions. Введите объекты PSSession , например объекты, возвращаемые командлетом New-PSSession . Вы также можете передать объект PSSession в Disconnect-PSSession.

Командлет Get-PSSession может получить все сеансы PSSession , которые завершаются на удаленном компьютере, включая сеансы PSSession , которые отключены, и сеансы PSSession , подключенные к другим сеансам на других компьютерах. Disconnect-PSSession отключает только PSSession, подключенные к текущему сеансу. Если передать другие сеансы PSSession в , команда завершается Disconnect-PSSessionошибкой Disconnect-PSSession .

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

-ThrottleLimit

Задает ограничение регулирования для Disconnect-PSSession команды.

Предел регулирования — это максимальное количество одновременных подключений, которые могут быть установлены для выполнения этой команды. Если опустить этот параметр или ввести значение 0, используется значение 32по умолчанию , .

Предел регулирования применяется только к текущему командлету, а не к сеансу или компьютеру.

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

-WhatIf

Показывает, что произойдет при запуске командлета. Командлет не выполняется.

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

Входные данные

PSSession

Вы можете передать сеанс в этот командлет.

Выходные данные

PSSession

Этот командлет возвращает объект , представляющий отключенный сеанс.

Примечания

PowerShell включает следующие псевдонимы для Disconnect-PSSession:

  • Windows:
    • dnsn

Этот командлет доступен только на платформах Windows.

  • Командлет Disconnect-PSSession работает только в том случае, если на локальных и удаленных компьютерах используется PowerShell 3.0 или более поздней версии.

  • Если вы используете Disconnect-PSSession командлет в отключенном сеансе, команда не влияет на сеанс и не создает ошибок.

  • Повторно подключиться к отключенному сеансу замыкания на себя с интерактивным маркером безопасности, созданным с помощью параметра EnableNetworkAccess, можно только с компьютера, на котором этот сеанс был создан. Это ограничение защищает компьютер от вредоносного доступа.

  • При отключении PSSession состояние сеанса — , Disconnected а доступность — Нет.

    Значение свойства State определяется текущим сеансом. Таким образом, значение Disconnected означает, что PSSession не подключен к текущему сеансу. Однако это не означает, что PSSession отключен от всех сеансов. Он может быть подключен к другому сеансу. Определить возможность подключения или повторного подключения к сеансу позволяет свойство Availability.

    Значение NoneДоступности указывает, что вы можете подключиться к сеансу. Значение Busy указывает, что невозможно подключиться к PSSession , так как он подключен к другому сеансу.

    Дополнительные сведения о значениях свойства State сеансов см. в разделе Перечисление RunspaceState.

    Дополнительные сведения о значениях свойства Availability сеансов см. в разделе Перечисление RunspaceAvailability.