about_Remote_Disconnected_Sessions
Краткое описание
Описание отключения и повторного подключения к сеансу PowerShell (PSSession).
Подробное описание
Начиная с PowerShell 3.0, вы можете отключиться от PSSession и повторно подключиться к PSSession с одного компьютера или другого компьютера. Состояние сеанса сохраняется и команды в PSSession продолжают выполняться во время отключения сеанса.
Функция отключенных сеансов позволяет закрыть сеанс, в котором была создана psSession и завершить работу компьютера без нарушения команд, выполняемых в удаленной среде PSSession. Отключенные сеансы полезны для выполнения команд, которые занимают длительное время.
Вы не можете отключиться от интерактивного сеанса, запущенного с помощью командлета Enter-PSSession
.
Вы можете использовать отключенные сеансы для управления psSessions, которые были отключены непреднамеренно в результате сбоя компьютера или сети.
Командлеты сеанса, отключенные
Следующие командлеты поддерживают функцию отключенных сеансов:
Connect-PSSession
: Подключение к отключенной PSSession.Disconnect-PSSession
: отключает PSSession.Get-PSSession
: получает PSSessions на локальном компьютере или на удаленных компьютерах.Receive-PSSession
: получает результаты команд, выполняющихся в отключенных сеансах.Invoke-Command
: параметр InDisconnectedSession создает PSSession и немедленно отключается.
Как работает функция отключенных сеансов
Начиная с PowerShell 3.0, PSSessions не зависят от сеансов, в которых они созданы. Активные операции PSSessions сохраняются на удаленном компьютере или на стороне сервера подключения, даже если клиентский компьютер выключен или отключен от сети.
В PowerShell 2.0 служба PSSession удаляется с удаленного компьютера при отключении от исходного сеанса или сеанса, в котором он был создан.
При отключении PSSession psSession остается активным и сохраняется на удаленном компьютере. Состояние сеанса изменяется с "Запуск " на "Отключено". Вы можете повторно подключиться к отключенной psSession из
- Текущий сеанс на том же компьютере
- Другой сеанс на одном компьютере
- Из сеанса на другом компьютере
Удаленный компьютер, поддерживающий сеанс, должен быть запущен и подключен к сети.
Команды в отключенном psSession продолжают выполняться без прерывания на удаленном компьютере, пока команда не завершит работу или заполнение выходного буфера. Чтобы предотвратить приостановку выполнения команды, используйте параметр Disconnect-PSSession
New-PSSessionOption
OutputBufferingMode для командлетов или New-PSTransportOption
полного выходного буфера.
Отключенные сеансы сохраняются в отключенном состоянии на удаленном компьютере. Они доступны для повторного подключения, пока не удалите PSSession, например с помощью Remove-PSSession
командлета, или до истечения времени ожидания простоя PSSession. Вы можете настроить время ожидания простоя PSSession с помощью параметров IdleTimeoutSec или IdleTimeout для Disconnect-PSSession
New-PSSessionOption
командлетов.New-PSTransportOption
Другой пользователь может подключиться к созданным службам PSSessions, но только если они могут предоставить учетные данные, которые использовались для создания сеанса, или использовать RunAs
учетные данные конфигурации сеанса.
Получение PSSessions
Начиная с PowerShell 3.0 Get-PSSession
командлет получает PSSessions на локальном компьютере и удаленных компьютерах. Он также может получить PSSessions, созданные в текущем сеансе.
Чтобы получить PSSessions на локальном компьютере или удаленных компьютерах, используйте параметры ComputerName или Подключение ionUri. Без параметров Get-PSSession
получает PSSession, созданные в локальном сеансе, независимо от того, где они завершаются.
В следующем примере показано, как использовать Get-PSSession
.
New-PSSession
создает сеанс на компьютере Server01. Сеанс находится на компьютере Server01.
New-PSSession -ComputerName Server01
Id Name ComputerName State ConfigurationName Availability
-- ---- ------------ ----- ----------------- ------------
2 Session2 Server01 Opened Microsoft.PowerShell Available
Чтобы получить сеанс из Server01, используйте параметр ComputerName , чтобы указать целевой объект Get-PSSession
.
Get-PSSession -ComputerName Server01
Id Name ComputerName State ConfigurationName Availability
-- ---- ------------ ----- ----------------- ------------
2 Session2 Server01 Opened Microsoft.PowerShell Available
Если значение параметра ComputerName имеет значение localhost, получает psSessions, Get-PSSession
которые завершаются и сохраняются на Get-PSSession
локальном компьютере. Он не получает PSSessions на компьютере Server01, даже если они были запущены на локальном компьютере.
Get-PSSession -ComputerName localhost
Чтобы получить сеансы, созданные в текущем сеансе, используйте Get-PSSession
командлет без параметров. В этом примере Get-PSSession
получает psSession, созданный в текущем сеансе, и подключается к компьютеру Server01.
Get-PSSession
Id Name ComputerName State ConfigurationName Availability
-- ---- ------------ ----- ----------------- ------------
2 Session2 Server01 Opened Microsoft.PowerShell Available
Отключение сеансов
Disconnect-PSSession
Используйте командлет для отключения сеанса. Чтобы определить psSession, используйте параметр session или переведите объект PSSession из New-PSSession
командлетов Disconnect-PSSession
в Get-PSSession
.
Следующая команда отключает PSSession на компьютер Server01. Обратите внимание, что значение свойства State отключено, а доступность — None.
Get-PSSession -ComputerName Server01 | Disconnect-PSSession
Id Name ComputerName State ConfigurationName Availability
-- ---- ------------ ----- ----------------- ------------
2 Session2 Server01 Disconnected Microsoft.PowerShell None
Чтобы создать отключенный сеанс, используйте параметр InDisconnectedSession командлета Invoke-Command
. Он создает сеанс, запускает команду и отключается немедленно, прежде чем команда сможет вернуть любые выходные данные.
Следующая команда выполняет Get-WinEvent
команду в отключенном сеансе на удаленном компьютере Server02.
Invoke-Command -ComputerName Server02 -InDisconnectedSession -ScriptBlock {
Get-WinEvent -LogName "*PowerShell*" }
Id Name ComputerName State ConfigurationName Availability
-- ---- ------------ ----- ----------------- ------------
4 Session3 Server02 Disconnected Microsoft.PowerShell None
Подключение к отключенным сеансам
Чтобы подключить отключенный сеанс, используйте Connect-PSSession
командлет с параметрами ComputerName или Подключение ionUri. Кроме того, можно передать выходные данные Get-PSSession
Connect-PSSession
в .
В следующем примере получаются сеансы на компьютере Server02. Выходные данные включают два отключенных сеанса.
Get-PSSession -ComputerName Server02
Id Name ComputerName State ConfigurationName Availability
-- ---- ------------ ----- ----------------- ------------
2 Session2 juneb-srv8320 Disconnected Microsoft.PowerShell None
4 Session3 juneb-srv8320 Disconnected Microsoft.PowerShell None
Следующая команда подключается к Session2. PsSession теперь открыт и доступен.
Connect-PSSession -ComputerName Server02 -Name Session2
Id Name ComputerName State ConfigurationName Availability
-- ---- ------------ ----- ----------------- ------------
2 Session2 juneb-srv8320 Opened Microsoft.PowerShell Available
Получение результатов
Чтобы получить результаты команд, которые выполнялись в отключенной среде PSSession, используйте Receive-PSSession
командлет.
Вместо командлета Connect-PSSession
можно использоватьReceive-PSSession
. Если сеанс уже подключен, Receive-PSSession
получает результаты команд, которые выполнялись при отключении сеанса. Если PSSession по-прежнему отключен, подключается к нему, Receive-PSSession
а затем получает результаты команд, выполняющихся во время отключения.
Receive-PSSession
может возвращать результаты задания (асинхронно) или в хост-программу (синхронно). Используйте параметр OutTarget для выбора задания или узла. Значением по умолчанию является Host. Однако если полученная команда была запущена в текущем сеансе в качестве задания, она возвращается в качестве задания по умолчанию.
В следующем примере командлет используется Receive-PSSession
для повторного подключения к сеансу на Server02 и получения результатов Get-WinEvent
команды. Параметр OutTarget используется для получения результатов задания.
Receive-PSSession -ComputerName Server02 -Name Session3 -OutTarget Job
Id Name PSJobTypeName State HasMoreData Location
-- ---- ------------- ----- ----------- --------
3 Job3 RemoteJob Running True Server02
Чтобы получить результаты задания, используйте Receive-Job
командлет.
Get-Job | Receive-Job -Keep
ProviderName: PowerShell
TimeCreated Id LevelDisplayName Message PSComputerName
----------- -- ---------------- ------- --------------
5/14/2012 7:26:04 PM 400 Information Engine stat Server02
5/14/2012 7:26:03 PM 600 Information Provider "W Server02
5/14/2012 7:26:03 PM 600 Information Provider "C Server02
5/14/2012 7:26:03 PM 600 Information Provider "V Server02
Свойства состояния и доступности
Свойства состояния и доступности отключенной службы PSSession сообщают, доступен ли сеанс для повторного подключения к нему.
При подключении PSSession к текущему сеансу его состояние открыто, а его доступность доступна. При отключении от PSSession состояние PSSession отключено, а его доступность — None.
Значение свойства State относительно текущего сеанса. Значение "Отключено " означает, что PSSession не подключен к текущему сеансу. Но это не означает, что PSSession отключен от всех сеансов. Он может быть подключен к другому сеансу.
Чтобы определить, можно ли подключить или повторно подключиться к PSSession, используйте свойство Availability . Значение None указывает, что вы можете подключиться к сеансу. Значение "Занято " указывает, что вы не можете подключиться к PSSession, так как он подключен к другому сеансу.
Следующий пример выполняется в двух сеансах PowerShell на одном компьютере. Обратите внимание на изменение значений свойств состояния и доступности в каждом сеансе, так как PSSession отключен и повторно подключен.
# Session 1
New-PSSession -ComputerName Server30 -Name Test
Id Name ComputerName State ConfigurationName Availability
-- ---- ------------ ----- ----------------- ------------
1 Test Server30 Opened Microsoft.PowerShell Available
# Session 2
Get-PSSession -ComputerName Server30 -Name Test
Id Name ComputerName State ConfigurationName Availability
-- ---- ------------ ----- ----------------- ------------
1 Test Server30 Disconnected Microsoft.PowerShell Busy
# Session 1
Get-PSSession -ComputerName Server30 -Name Test | Disconnect-PSSession
Id Name ComputerName State ConfigurationName Availability
-- ---- ------------ ----- ----------------- ------------
1 Test Server30 Disconnected Microsoft.PowerShell None
# Session 2
Get-PSSession -ComputerName Server30
Id Name ComputerName State ConfigurationName Availability
-- ---- ------------ ----- ----------------- ------------
1 Test Server30 Disconnected Microsoft.PowerShell None
# Session 2
Connect-PSSession -ComputerName Server30 -Name Test
Id Name ComputerName State ConfigurationName Availability
-- ---- ------------ ----- ----------------- ------------
3 Test Server30 Opened Microsoft.PowerShell Available
# Session 1
Get-PSSession -ComputerName Server30
Id Name ComputerName State ConfigurationName Availability
-- ---- ------------ ----- ----------------- ------------
1 Test Server30 Disconnected Microsoft.PowerShell Busy
Отключенные сеансы сохраняются на удаленном компьютере, пока не удалите их, например с помощью командлета Remove-PSSession
или истекает время ожидания. Свойство IdleTimeout psSession определяет, сколько времени сохраняется отключенный сеанс перед удалением.
Значения времени ожидания простоя
PSSessions неактивны, когда поток пульса не получает ответа. Отключение сеанса делает его бездействующим и запускает часы IdleTimeout , даже если команды по-прежнему выполняются в отключенном сеансе. PowerShell считает, что отключенные сеансы будут активными, но неактивными.
При создании и отключении сеансов убедитесь, что время ожидания простоя в PSSession достаточно долго, чтобы поддерживать сеанс для ваших потребностей, но не так долго, чтобы он потреблял ненужные ресурсы на удаленном компьютере.
Свойство IdleTimeoutMs конфигурации сеанса определяет время ожидания простоя сеансов по умолчанию, использующих конфигурацию сеанса. Можно переопределить значение по умолчанию, но это значение не может превышать свойство MaxIdleTimeoutMs конфигурации сеанса.
Используйте следующую команду, чтобы получить значения idleTimeoutMs и MaxIdleTimeoutMs для конфигурации сеанса.
Get-PSSessionConfiguration |
Format-Table Name, IdleTimeoutMs, MaxIdleTimeoutMs
Если вы являетесь членом группы Администратор istrator на удаленном компьютере, эти значения можно задать при создании конфигурации сеанса. Кроме того, можно изменить значения при отключении.
Значение времени ожидания простоя конфигураций сеансов и параметров сеанса находится в миллисекундах. Значение времени ожидания простоя сеансов и параметров конфигурации сеансов составляет в секундах.
Вы можете задать время ожидания простоя PSSession при создании psSession (New-PSSession
, Invoke-Command
), а также при отключении от него (Disconnect-PSSession
). Однако нельзя изменить значение IdleTimeout при подключении к PSSession (Connect-PSSession
) или получить результаты (Receive-PSSession
).
Командлеты имеют параметр SessionOption, который принимает объект PSSessionOption, например один, возвращаемый командлетомNew-PSSessionOption
.Connect-PSSession
Receive-PSSession
Значение IdleTimeout в объекте SessionOption и значение IdleTimeout в $PSSessionOption
переменной предпочтения не изменяют значение IdleTimeout в или команде Connect-PSSession
Receive-PSSession
.
Чтобы создать PSSession с определенным значением времени ожидания простоя, создайте $PSSessionOption
переменную предпочтения. Задайте для свойства IdleTimeout требуемое значение (в миллисекундах).
При создании PSSessions значения в $PSSessionOption
переменной имеют приоритет над значениями в конфигурации сеанса.
Например, следующая команда задает время ожидания простоя в 48 часов:
$PSSessionOption = New-PSSessionOption -IdleTimeoutMSec 172800000
Чтобы создать PSSession с определенным значением времени ожидания простоя, используйте параметр IdleTimeoutMSec командлета New-PSSessionOption
. Затем используйте параметр сеанса в значении параметра SessionOption для New-PSSession
командлетов или Invoke-Command
командлетов.
Значения, заданные при создании сеанса, имеют приоритет над значениями, заданными в переменной $PSSessionOption
предпочтения и конфигурации сеанса.
Например:
$o = New-PSSessionOption -IdleTimeoutMSec 172800000
New-PSSession -SessionOption $o
Чтобы изменить время ожидания простоя psSession при отключении, используйте параметр IdleTimeoutSec командлета Disconnect-PSSession
.
Например:
Disconnect-PSSession -IdleTimeoutSec 172800
Чтобы создать конфигурацию сеанса с определенным временем ожидания простоя и максимальным временем ожидания простоя, используйте параметры IdleTimeoutSec и MaxIdleTimeoutSec командлетаNew-PSTransportOption
. Затем используйте параметр транспорта в значении параметра Register-PSSessionConfiguration
TransportOption.
Например:
$o = New-PSTransportOption -IdleTimeoutSec 172800 -MaxIdleTimeoutSec 259200
Register-PSSessionConfiguration -Name Test -TransportOption $o
Чтобы изменить время ожидания простоя по умолчанию и максимальное время ожидания простоя конфигурации сеанса, используйте параметры IdleTimeoutSec и MaxIdleTimeoutSec командлетаNew-PSTransportOption
. Затем используйте параметр транспорта в значении параметра Set-PSSessionConfiguration
TransportOption.
Например:
$o = New-PSTransportOption -IdleTimeoutSec 172800 -MaxIdleTimeoutSec 259200
Set-PSSessionConfiguration -Name Test -TransportOption $o
Режим буферизации выходных данных
Режим буферизации выходных данных PSSession определяет способ управления выходными данными команд при заполнении выходного буфера PSSession.
В отключенном сеансе режим буферизации выходных данных фактически определяет, продолжает ли команда выполняться во время отключения сеанса.
Допустимые значения, как показано ниже.
Block
(по умолчанию) — если выходной буфер заполнен, выполнение приостанавливается до тех пор, пока буфер не будет снят.Block
сохраняет данные, но может прервать команду.Drop
— При заполнении выходного буфера выполнение продолжается. По мере создания новых выходных данных самые старые выходные данные не карта. При использовании значения перенаправьте выходныеDrop
данные в файл. Это значение рекомендуется для отключенных сеансов.
Свойство OutputBufferingMode конфигурации сеанса определяет режим буферизации по умолчанию сеансов, использующих конфигурацию сеанса.
Чтобы найти значение конфигурации сеанса outputBufferingMode, можно использовать любой из следующих форматов команд:
(Get-PSSessionConfiguration <ConfigurationName>).OutputBufferingMode
Get-PSSessionConfiguration | Format-Table Name, OutputBufferingMode
Можно переопределить значение по умолчанию в конфигурации сеанса и задать выходной режим буферизации PSSession при создании PSSession, при отключении и повторном подключении.
Если вы являетесь членом группы Администратор istrator на удаленном компьютере, можно создать и изменить режим буферизации выходных данных конфигураций сеансов.
Чтобы создать PSSession с режимом Drop
буферизации выходных данных, создайте $PSSessionOption
переменную предпочтения, в которой имеется Drop
значение свойства OutputBufferingMode.
При создании PSSessions значения в $PSSessionOption
переменной имеют приоритет над значениями в конфигурации сеанса.
Например:
$PSSessionOption = New-PSSessionOption -OutputBufferingMode Drop
Используйте параметр OutputBufferingMode командлетаNew-PSSessionOption
, чтобы создать параметр сеанса со значениемDrop
. Затем используйте объект PSSessionOption в качестве значения параметра SessionOption для New-PSSession
командлетов или Invoke-Command
командлетов.
Значения, заданные при создании сеанса, имеют приоритет над значениями, заданными в переменной $PSSessionOption
предпочтения и конфигурации сеанса.
Например:
$o = New-PSSessionOption -OutputBufferingMode Drop
New-PSSession -SessionOption $o
Чтобы изменить режим буферизации выходных данных для PSSession при отключении, используйте параметр OutputBufferingMode командлета Disconnect-PSSession
.
Например:
Disconnect-PSSession -OutputBufferingMode Drop
Чтобы изменить режим буферизации выходных данных для PSSession при повторном подключении, используйте параметр OutputBufferingMode командлета New-PSSessionOption
. Затем используйте параметр сеанса в значении параметра Connect-PSSession
SessionOption или Receive-PSSession
.
Например:
$o = New-PSSessionOption -OutputBufferingMode Drop
Connect-PSSession -ComputerName Server01 -Name Test -SessionOption $o
Чтобы создать конфигурацию сеанса с режимом Drop
буферизации выходных данных по умолчанию, используйте параметр New-PSTransportOption
OutputBufferingMode командлета для создания объекта параметра транспорта со значениемDrop
. Затем используйте параметр транспорта в значении параметра Register-PSSessionConfiguration
TransportOption.
Например:
$o = New-PSTransportOption -OutputBufferingMode Drop
Register-PSSessionConfiguration -Name Test -TransportOption $o
Чтобы изменить режим буферизации выходных данных по умолчанию конфигурации сеанса, используйте параметр New-PSTransportOption
OutputBufferingMode командлета, чтобы создать параметр транспорта со значениемDrop
. Затем используйте параметр транспорта в значении параметра Set-PSSessionConfiguration
SessionOption .
Например:
$o = New-PSTransportOption -OutputBufferingMode Drop
Set-PSSessionConfiguration -Name Test -TransportOption $o
Отключение сеансов обратного цикла
Сеансы обратного цикла или локальные сеансы — это psSessions, которые создаются и завершаются на одном компьютере. Как и другие сеансы PSSessions, активные сеансы обратного цикла сохраняются на компьютере на удаленном конце подключения (локальном компьютере), поэтому вы можете отключиться от сеансов обратного цикла и повторно подключиться к ней.
По умолчанию сеансы обратного цикла создаются с маркером безопасности сети, который не позволяет выполнять команды в сеансе для доступа к другим компьютерам. Вы можете повторно подключиться к сеансам обратного цикла с маркером безопасности сети из любого сеанса на локальном компьютере или удаленном компьютере.
Однако если вы используете параметр EnableNetworkAccess для командлета или Invoke-Command
командлета, сеанс обратной New-PSSession
Enter-PSSession
передачи цикла создается с интерактивным маркером безопасности. Интерактивный маркер позволяет командам, выполняемым в сеансе обратного цикла, получать данные с других компьютеров.
Сеансы обратного цикла можно отключить с помощью интерактивных маркеров, а затем повторно подключиться к ним из одного сеанса или другого сеанса на одном компьютере. Однако, чтобы запретить вредоносный доступ, можно повторно подключиться к сеансам обратного цикла с интерактивными маркерами только с компьютера, на котором они были созданы.
Ожидание заданий в отключенных сеансах
Командлет Wait-Job
ожидает завершения задания, а затем возвращается в командную строку или следующую команду. По умолчанию возвращается, Wait-Job
если сеанс, в котором выполняется задание, отключается. Чтобы направить Wait-Job
командлет, чтобы дождаться повторного подключения сеанса, в открытом состоянии используйте параметр Force . Дополнительные сведения см. в разделе "Ожидание задания".
Надежные сеансы и непреднамеренное отключение
PsSession может быть непреднамеренно отключен из-за сбоя компьютера или сбоя сети. PowerShell пытается восстановить PSSession, но его успех зависит от серьезности и длительности причины.
Состояние непреднамеренно отключенного PSSession может быть нарушено или закрыто, но оно также может быть отключено. Если значение состоянияотключено, можно использовать те же методы для управления PSSession, что и если сеанс был отключен намеренно. Например, можно использовать Connect-PSSession
командлет для повторного подключения к сеансу и Receive-PSSession
командлета, чтобы получить результаты команд, запущенных во время отключения сеанса.
При закрытии (выходе) сеанса, в котором была создана служба PSSession во время выполнения команд в PSSession, PowerShell поддерживает psSession в отключенном состоянии на удаленном компьютере. При закрытии (выходе) сеанса, в котором была создана служба PSSession, но в PSSession не выполняется никаких команд, PowerShell не пытается сохранить PSSession.
См. также
PowerShell
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделе:Отправить и просмотреть отзыв по