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
, с текущего сеанса. В результате
Командлет Disconnect-PSSession
отключает только открытые PSSessions, подключенные к текущему сеансу.
Disconnect-PSSession
не удается отключить или закрыть PSSessions или интерактивных PSSessions, запущенных с помощью командлета Enter-PSSession
, и он не может отключить PSSessions, подключенных к другим сеансам.
Чтобы повторно подключиться к отключенной PSSession, используйте командлеты Connect-PSSession
или Receive-PSSession
.
При отключении Invoke-Command
для выполнения команды в отключенном сеансе.
Дополнительные сведения о функции отключенных сеансов см. в about_Remote_Disconnected_Sessions.
Этот командлет представлен в Windows PowerShell 3.0.
Примеры
Пример 1. Отключение сеанса по имени
Эта команда отключает UpdateSession
PSSession на компьютере Server01 с текущего сеанса. Команда использует параметр имени
PS> Disconnect-PSSession -Name UpdateSession
Id Name ComputerName State ConfigurationName Availability
-- ---- ------------ ----- ----------------- ------------
1 UpdateSession Server01 Disconnected Microsoft.PowerShell 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. Команда использует командлет
Пятая команда получает значения параметра сеанса в переменной $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 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 |
Входные данные
Сеанс можно передать в этот командлет.
Выходные данные
Этот командлет возвращает объект, представляющий сеанс, который он отключен.
Примечания
PowerShell включает следующие псевдонимы для Disconnect-PSSession
:
- Виндоус:
dnsn
Этот командлет доступен только на платформах Windows.
Командлет
Disconnect-PSSession
работает только в том случае, если локальные и удаленные компьютеры работают под управлением PowerShell 3.0 или более поздней версии.Если вы используете командлет
Disconnect-PSSession
в отключенном сеансе, команда не влияет на сеанс и не создает ошибок.Отключенные сеансы цикла с интерактивными маркерами безопасности (созданные с помощью параметра EnableNetworkAccess) можно повторно подключить только с компьютера, на котором был создан сеанс. Это ограничение защищает компьютер от вредоносного доступа.
При отключении
PSSession состояние сеанса , а доступность Нет .Значение свойства состояния
относительно текущего сеанса. Таким образом, значение доступностиDisconnected
означает, что PSSession не подключен к текущему сеансу. Однако это не означает, что PSSession отключен от всех сеансов. Он может быть подключен к другому сеансу. Чтобы определить, можно ли подключить или повторно подключиться к сеансу, используйте свойство. Значение доступности
None
указывает, что можно подключиться к сеансу. ЗначениеBusy
указывает, что подключение к PSSession невозможно, так как оно подключено к другому сеансу.Дополнительные сведения о значениях свойства состояния
сеансов см. в перечисления RunspaceState. Дополнительные сведения о значениях свойства доступности
сеансов см. в перечисления RunspaceAvailability.