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 |
Входные данные
Сеанс можно передать по конвейеру в Disconnect-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.