Поделиться через


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 не удается отключить или закрыть PSSessions или интерактивных PSSessions, запущенных с помощью командлета Enter-PSSession, и он не может отключить PSSessions, подключенных к другим сеансам.

Чтобы повторно подключиться к отключенной 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 с текущего сеанса. Команда использует параметр имени для идентификации PSSession.

PS> Disconnect-PSSession -Name UpdateSession
Id Name            ComputerName    State         ConfigurationName     Availability
-- ----            ------------    -----         -----------------     ------------
1  UpdateSession   Server01        Disconnected  Microsoft.PowerShell          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. Команда использует командлет для отображения всех свойств конфигурации сеанса в списке. В выходных данных показано, что свойство MaxIdleTimeoutMS , которое устанавливает максимально допустимое значение IdleTimeout для сеансов, использующих конфигурацию сеанса, миллисекундами (12 часов).

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

Шестая команда отключает сеанс. В нем используется параметр IdleTimeoutSec, чтобы задать время ожидания простоя до 12-часового максимума.

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

Параметры

-Confirm

Запрашивает подтверждение перед запуском командлета.

Тип:SwitchParameter
Aliases:cf
Position:Named
Default value:False
Обязательно:False
Принять входные данные конвейера:False
Принять подстановочные знаки:False

-Id

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

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

Тип:Int32[]
Position:1
Default value:None
Обязательно:True
Принять входные данные конвейера:True
Принять подстановочные знаки:False

-IdleTimeoutSec

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

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

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

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

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

Тип:Int32
Position:Named
Default value:60
Обязательно:False
Принять входные данные конвейера:False
Принять подстановочные знаки:False

-InstanceId

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

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

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

Тип:Guid[]
Position:Named
Default value:None
Обязательно:True
Принять входные данные конвейера:True
Принять подстановочные знаки:False

-Name

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

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

Тип:String[]
Position:Named
Default value:None
Обязательно:True
Принять входные данные конвейера:True
Принять подстановочные знаки:True

-OutputBufferingMode

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

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

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

  • Block. Если выходной буфер заполнен, выполнение приостанавливается до очистки буфера.
  • Drop: если выходной буфер заполнен, выполнение продолжается. При сохранении новых выходных данных старые выходные данные удаляются.
  • None: режим буферизации выходных данных не указан. Значение свойства OutputBufferingMode конфигурации сеанса используется для отключенного сеанса.
Тип:OutputBufferingMode
Position:Named
Default value:Block
Обязательно:False
Принять входные данные конвейера:False
Принять подстановочные знаки:False

-Session

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

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

Тип:PSSession[]
Position:1
Default value:None
Обязательно:True
Принять входные данные конвейера:True
Принять подстановочные знаки:False

-ThrottleLimit

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

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

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

Тип:Int32
Position:Named
Default value:32
Обязательно:False
Принять входные данные конвейера:False
Принять подстановочные знаки:False

-WhatIf

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

Тип:SwitchParameter
Aliases:wi
Position:Named
Default value:False
Обязательно:False
Принять входные данные конвейера:False
Принять подстановочные знаки:False

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

PSSession

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

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

PSSession

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

Примечания

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

  • Виндоус:
    • dnsn

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

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

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

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

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

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

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

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

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