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

Описание

Командлет 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 либо блокируются полным выходным буфером. Чтобы изменить время ожидания простоя, используйте параметр IdleTimeoutSec. Чтобы изменить режим буферизации выходных данных, используйте параметр OutputBufferingMode . Вы также можете использовать параметр InDisconnectedSession командлета Invoke-Command для выполнения команды в отключенном сеансе.

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

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

Примеры

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

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

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

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

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

Эта команда отключает сеанс ITTask на компьютере 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                   : 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

Первая команда использует командлет для New-PSSessionOption создания объекта параметра сеанса. Она включает параметр IdleTimeout, определяющий время ожидания простоя, равное 48 часам (172 800 000 миллисекундам). Объект параметров сеанса сохраняется в переменную $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 будет удален.

Время простоя отключенных сеансов PSSession отсчитывается с момента их отключения, даже если в отключенном сеансе выполняются команды.

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

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

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

-Session

Отключается от указанных сеансов PSSession. Введите объекты 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

Сеанс можно передать по конвейеру в Disconnect-PSSession.

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

PSSession

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

Примечания

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

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

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

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

  • Отключенный сеанс PSSession переходит в состояние Disconnected и получает доступность None.

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

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

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

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