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


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. Отключение сеанса по имени

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

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

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

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

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

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

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

-Id

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

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

Тип: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 командлет. Идентификатор экземпляра хранится в свойстве InstanceID сеанса.

Тип: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 , например возвращаемые командлетом New-PSSession . Вы также можете передать объект Disconnect-PSSessionPSSession в .

Командлет 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:

  • Windows:
    • dnsn

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

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

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

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

  • При отключении PSSession состояние сеанса Disconnected нет.

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

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

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

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