PowerShell. Об отложенных сессиях (about_Remote_Disconnected_Session)

Начиная с Windows PowerShell 3.0, вы можете отключится от PSSession и подключиться к той же PSSession позднее с того же или с другого компьютера. Во время отключения от сеанса сессии поддерживается и команды в PSSession продолжают работать .

Функции отложенных сессий доступны, только если на компьютере к которому подключаются удаленно установлен Windows PowerShell 3.0 или более поздняя версия.

Функции отложенных сессий позволяют закрыть сеанс, в котором была создана PSSession, или закрыть консоль Windows PowerShell, или даже выключить компьютер, не нарушив работу команд запущенных в PSSession. Это особенно полезно для выполнения команд выполнение которых занимает продолжительное время. Это увеличивает запас времени на выполнение команд и предоставляет гибкий механизм для нужд ИТ-специалистов.

ПРИМЕЧАНИЕ: Нельзя отключаться от интерактивной сессии, которая началась с помощью командлета Enter-PSSession.

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

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

 

Командлеты отложенных сессий

Следующие командлеты поддерживают функции отложенных сессий:
Disconnect-PSSession: Отключает от PSSession.
Connect-PSSession: Подключается к отложенной PSSession.
Receive-PSSession: Возвращает результаты команд, которые выполнялись во время отключения от сесси.
Get-PSSession: Возвращает PSSession, на локальном компьютере или на удаленных компьютерах.
Invoke-Command: С использованием параметр InDisconnectedSession этот командлет создает PSSession и сразу отключается от неё.

 

Как работает функция отложенных сессий

Начиная с Windows PowerShell 3.0 сессии PSSession не зависят от сеансов в которых они создаются. Активная PSSession поддерживается на удаленном компьютере или на стороне сервера, даже если сеанс в котором была создана PSSession закрыт, и даже если компьютер был выключен или отключен от сети.

В Windows PowerShell 2.0, PSSession закрывалась на удаленном компьютере, когда сеанс в котором она была создана отключается от PSSession.

При отключении от PSSession, PSSession остается активной и поддерживается на удаленном компьютере. Сессия изменяет состояние из Running в Disconnected. К сессии в состоянии Disconnect можно подключиться из текущего сеанса или с другого сеанса на том же компьютере, или с другого компьютера. Удаленный компьютер, который будет поддерживать сессию должен быть запущен и подключен к сети.

Команды в отключенной PSSession продолжают работать на удаленном компьютере, пока команды не завершатся или пока буфер вывода не переполнится. Чтобы предотвратить приостановку выполнения команд при заполнении буфера вывода необходимо использовать параметр OutputBufferingMode в командлетах Disconnect-PSSession, New-PSSessionOption, или New-PSTransportOption.

Отложенные сессии поддерживаются в отключенном состоянии на удаленном компьютере. Они доступны для восстановления, пока не удалить PSSession, например, с помощью командлета Remove-PSSession, или пока в PSSession не истечёт время ожидания после  отключения. Можно настроить время ожидания в PSSession с помощью параметров IdleTimeoutSec или IdleTimeout в командлетах Disconnect-PSSession, New-PSSessionOption, или New-PSTransportOption.

Пользователь может подключиться к сессии PSSession которую он не создавал, но только если он сможет предоставить учетные данные, которые были использованы для создания сессии, или использовать RunAs с соответствующими полномочиями при создании сеанса.

 

Как получить объект PSSession.

Начиная с Windows PowerShell 3.0, Get-PSSession командлет может получить объекты PSSession, как с локального компьютера так, и с удаленных компьютеров. Командлет может получить объекты сессий PSSession, созданных в текущем сеансе.

Чтобы получить объекты сессий PSSession на локальном компьютере или удаленных компьютерах, используйте параметры ComputerName или ConnectionURI. Без параметров Get-PSSession получает объекты PSSession, созданные в локальном сеансе независимо от того, к какому серверу они подсоединены.

Так же, что бы получить объект PSSession, можно указать компьютер на котором она работает, то есть сервер.

Например, если создать PSSession с компьютером Server01, получится сеанс который будет работать на компьютере Server01. Если вы создаете PSSession с другого компьютера на локальный компьютер, получите сессию работающую на локальном компьютере.

Следующая последовательность команд показывает, как работает командлет Get-PSSession.

Первая команда создает сессию с компьютером Server01. Сессия находится на компьютере Server01.

Чтобы получить сессию, надо использовать параметр ComputerName в командлете Get-PSSession со значением Server01.

Если значение параметра ComputerName в Get-PSSession указывает на локальный компьютер, Get-PSSession получает объекты PSSession которые работают и поддерживаются на локальном компьютере. И не получит сессии PSSession с компьютером Server01, даже если они были запущенны с локального компьютера.

Чтобы получить сессии, которые были созданы в текущем сеансе, надо использовать командлет Get-PSSession без параметров. Эта команда получит сессии PSSession, которые был создан в текущем сеансе, в том числе и подключенную к компьютеру Server01.

 

Как отключиться от сессии

Чтобы отключиться от PSSession надо воспользоваться командлетом Disconnect-PSSession. Чтобы указать конкретную PSSession используется параметр Session или можно передать объекты PSSession по конвейеру из командлетов New-PSSession, Get-PSSession, или Disconnect-PSSession.

Следующая команда отключает PSSession с компьютером Server01. Обратите внимание, что свойство State имеет свойство Disconnected, а свойство Availability имеет статус None.

Для создания сессии в состоянии Disconnected, можно воспользоваться параметром InDisconnectedSession в командлете Invoke-Command. Командлет при этом создаст сеанс, начнёт выполнять команду, и сразу отключиться, до того, как команда вернёт какой либо ответ.

Следующая команда выполняет команду Get-WinEvent в сессии с состоянием Disconnected на удаленном компьютере Server02.

 

Как подключиться к отложенной сессии

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

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

Для подключения к PSSession в состоянии Disconnected используется командлет Connect-PSSession. Для указания PSSession можно воспользоваться параметрами ComputerName или ConnectionURI, или передать объекты PSSession по конвейеру из командлета Get-PSSession.

Следующая команда получает сессии работающие на компьютере Server02. Результом будет две отключенные сессии, обе из которых доступны.

Следующая команда подключается к Session2. PSSession теперь открыта и доступна.

 

Как получить результаты

Чтобы получить результаты команд, которые выводились во время того, как PSSession находилась в состоянии Disconnected, необходимо воспользоваться командлетом Receive-PSSession.

Можно использовать Receive-PSSession в дополнение или вместо командлета Connect-PSSession. Если сессия уже переподсоединилась и находиться в состоянии Opened, Receive-PSSession получает результаты команд, которые выводились, когда сеанс был в состоянии Disconnected. Если PSSession по-прежнему находится в состоянии Disconnected, Receive-PSSession подключается к нему, и получает результаты команд, которые выводились во время дисконнекта.

Receive-PSSession может возвращать результаты команд в виде объекта задания (асинхронно) или непосредственно с хоста на котором выполняется сессия (синхронно). Используя параметр OutTarget можно выбрать job или host. По умолчанию выбирается значение host. Если команда началась в текущем сеансе в качестве job, оно возвращается как job по умолчанию.

Следующая команда использует командлет Receive-PSSession, для подключения к PSSession на компьютере Server02 и получения результатов командлета Get-WinEvent, который выполняется в сессии Session3. Команда использует параметр OutTarget, чтобы получить результаты в виде job.

Чтобы получить результаты задания, можно воспользоваться командлетом Receive-Job.

 

Состояние и доступность

Свойства состояния и доступности в отключенной PSSession показывают доступна ли сессия для подключения к ней.

Когда PSSession подключена к текущему сеансу, её состояние Opened и доступность Available. При отключении от PSSession, состояние PSSession Disconnected, и его доступность имеет значение None.

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

Чтобы определить, можно ли подключиться к PSSession, используется свойство доступности (Availability). Состояние свойства Availability — None означает, что вы можете подключиться к сессии. Значение Busy означает, что вы не можете подключиться к PSSession, потому что она связана с другим сеансом.

В следующем примере запущено две сессии (в разных консолях Windows PowerShell) на одном компьютере. Значение Статуса и доступности в каждом сеансе изменяют значения в зависимости от того подключена сессия или нет.

 

Время простоя

Отложенные сессии поддерживаются на удаленном компьютере, пока вы их не удалите, например, с помощью командлета Remove-PSSession, или после истечения времени простоя. Свойство IdleTimeout в PSSession определяет, как долго отложенная сессия будет простаивать, прежде чем она будет удалена.

Сессии PSSession простаивают, когда «heartbeat thread» не получает никакого ответа. При отключении от сессии создаётся простой и начинает отсчитываться время, даже если команды по-прежнему работают в отложенной сессии. Windows PowerShell считает отложенные сессии активными, но в состоянии простоя.

При создании и отключения сессий, убедитесь, что время на которое планируется отключение от сессии PSSession достаточно долгое, чтобы сохранить сессию для корректной работы. Но не настолько долгое, что бы оно бесполезно использовало ресурсы на удаленном компьютере.

Свойство конфигурации сессий IdleTimeoutMs определяет время простоя по умолчанию, которое используются при конфигурации сессий. Можно переопределить значение по умолчанию, но значение, которое задаётся не может превышать значение свойства MaxIdleTimeoutMs конфигурации сеанса.

Чтобы узнать значение свойств конфигурации сеанса IdleTimeoutMs и MaxIdleTimeoutMs, используется следующий формат команд.

Значение по умолчанию в конфигурации сеанса можно переопределить и установить тайм-аут простоя из PSSession при создании PSSession и когда вы отключаетесь.

Если вы являетесь членом группы администраторов на удаленном компьютере, вы также можете создавать и менять значение свойства конфигурации сессии IdleTimeoutMs и MaxIdleTimeoutMs.

ЗАМЕТКИ:

Значение времени простоя конфигураций сеансов и опций сеансов в миллисекундах. Значение времени простоя сессий и параметры конфигурации сессий в секундах.

Можно установить время простоя из PSSession при создании PSSession (New-PSSession, Invoke-Command), и когда происходит отключение от сессии(Disconnect-PSSession). Тем не менее, нельзя изменить значение IdleTimeout при подключении к PSSession (Connect-PSSession) или при получении результатов из сессии (Receive-PSSession).

Командлеты Connect-PSSession и Receive-PSSession имеют параметр SessionOption, который принимает объекты SessionOption. Их возвращает командлет New-PSSessionOption. Тем не менее, значение IdleTimeout в объекте SessionOption и значение IdleTimeout в переменных $PSSessionOption не изменяют значение свойства IdleTimeout в PSSession при выполнении команд Connect-PSSession или Receive-PSSession.

Чтобы создать сеанс PSSession с определенным значением времени простоя, надо изменить привилегированную переменную $PSSessionOption, и установить значение свойства IdleTimeout до нужного значения (в миллисекундах).

При создании сеанса PSSession, значения в привилегированной переменной $PSSessionOption имеют приоритет над значениями в конфигурации сеанса.

Например, эта команда устанавливает время простоя 48 часов.

Чтобы создать сеанс PSSession с определенным значением времени простоя, используется параметр IdleTimeoutMSec командлета New-PSSessionOption. Затем значение переменной передаётся в параметр SessionOption, в командлет New-PSSession или Invoke-Command.

Значения устанавливающиеся при создании сеанса имеют приоритет над значениями, заданными в привилегированной переменной $PSSessionOption и конфигурации сеанса.
Например:

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

Например:

Чтобы создать конфигурацию сеанса с заданным или максимальным временем простоя, используются параметры IdleTimeoutSec или MaxIdleTimeoutSec командлета New-PSTransportOption. Затем надо воспользоваться параметром передачи значении TransportOption командлета Register-PSSessionConfiguration.

Например:

Чтобы изменить время простоя по умолчанию или максимальное время простоя в конфигурации сессии, используйется параметры IdleTimeoutSec и MaxIdleTimeoutSec командлета New-PSTransportOption. Затем опция TransportOption командлета Set-PSSessionConfiguration.
Например:

 

Режим работы буфера вывода

Режим работы буфера вывода в PSSession определяет поведение PSSession при заполнении буфера вывода.

В отложенных сессиях, режим работы буферизации вывода фактически устанавливает режим продолжения работы команд во время отключения от сессии.

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

Block: При заполнении буфера вывода, выполнение команд приостанавливается до тех пор, пока буфер не освободится.
Drop: Когда буфер вывода полон, выполнение продолжается. При этом старая информация удаляется, а новая записывается.

По умолчанию используется значение Block. При этом значении данные вывода команд сохраняются, но выполнение команд может прерваться.

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

Свойство OutputBufferingMode конфигурации сессии изменяет значение по умолчанию режима работы буферизации вывода, которое используется для конфигурации сессии.

Чтобы посмотреть значение OutputBufferingMode конфигурации сеанса, используется следующий формат команды.

или

Можно переопределить значение по умолчанию в конфигурации сессии или установить режим работы буфера вывода PSSession при создании, отключении и подключении к PSSession.

Если текущая учётная запись является членом группы администраторов на удаленном компьютере, можно также создавать и менять режим работы буфера вывода конфигураций сеанса.

Чтобы создать сессию PSSession с режимом работы буфера вывода в состоянии Drop, можно изменить привилегированную переменную $PSSessionOption, в которой установить свойство OutputBufferingMode в значении Drop.

При создании сессии PSSession, значения в переменной $PSSessionOption имеют приоритет над значениями в конфигурации сеанса.

Например:

Чтобы создать сессию PSSession в режиме работы буфера вывода в состоянии Drop, можно использовать параметр OutputBufferingMode со значением Drop командлета New-PSSessionOption. Затем передать значения в параметр SessionOption командлетов New-PSSession или Invoke-Command.

Значения установленные при создании сессии имеют приоритет над значениями, заданными в привилегированной переменной $PSSessionOption и конфигурации сеанса.

Например:

Чтобы изменить режим работы буфера вывода в PSSession при отключении, можно использовать параметр OutputBufferingMode командлета Disconnect-PSSession.
Например:

Чтобы изменить режим работы буфера вывода в PSSession при повторном подключении, можно использовать параметр OutputBufferingMode командлета New-PSSessionOption для создания параметра сессии со значением Drop. Затем, передать полученные значение в параметр SessionOption командлетов Connect-PSSession или Receive-PSSession.

Например:

Чтобы создать конфигурацию сеанса с режимом работы буфера вывода по умолчанию в состоянии Drop, используйте параметр OutputBufferingMode в командлете New-PSTransportOption для создания объекта с опцией транспорта в значении Drop. Затем передайте значение в параметр TransportOption командлета Register-PSSessionConfiguration.

Например:

Чтобы изменить режим работы буфера вывода в конфигурации сессии по умолчанию, используется параметр OutputBufferingMode в командлете New-PSTransportOption для создания транспорта со значением Drop. Затем необходимо передать значение в опцию SessionOption в командлете Set-PSSessionConfiguration.

Например:

 

Локальные отложенные сессии

«Loopback sessions» или «local sessions» являются сессиями PSSession которые начинаются и заканчиваются на одном и том же компьютере. Как и другие PSSession активированные по сети локальные сессии поддерживают удаленное подключение (с локальным компьютером), так что вы можете отключаться и подключаться к локальной сессий.

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

Тем не менее, если вы используете параметр EnableNetworkAccess в командлетах New-PSSession, Enter-PSSession или Invoke-Command, то локальная сессия создается с интерактивным маркером безопасности. Интерактивный маркер безопасности позволяет использовать команды, которые работают в локальной сессии, и получают данные с других компьютеров.

Можно отключиться от локальные сессий с интерактивным маркером, а затем подключатся к ней из того же сеанса или другого сеанса на этом же компьютере. Тем не менее, чтобы предотвратить злоупотребление доступами, подключиться к локальной сессии с интерактивным маркером можно только с компьютера на котором они были созданы.

 

Ожидание заданий в отложенных сессиях

Командлет Wait-Job ждёт, пока работа команд не будет завершена, после этого отображает командную строку или выполняется следующая команда. По умолчанию Wait-Job отвечает, если сессия в которой задание выполняется отключена. Чтобы командлет Wait-Job ждал пока сесия не переподключиться (в открытом состоянии), используется параметр Force. Для получения дополнительной информации см Wait-Job.

 

Надёжность сессий и непреднамеренное разъединение

Иногда, сеанс с PSSession может быть непреднамеренно разорван из-за компьютерного сбоя или сбоя в работе сети. Windows PowerShell пытается восстановить сеанс с PSSession, но успешность его попыток зависит от тяжести и продолжительности причины сбоя.

При непреднамеренном отключении сессия PSSession может перейти в состояние Broken или Closed, но она также может быть в состоянии Disconnected. Если значени сессии State в состоянии Disconnected, то для управления сессией можно использовать те же методы, как если бы сессия была отключена намеренно. Например, можно использовать командлет Connect-PSSession чтобы подключиться к сессии и командлет Receive-PSSession, чтобы получить результат команд, которые выводились во время, когда сеанса был отключен.

Если закрыть или выйти из сеанса в котором была создана PSSession, в то время как команды в PSSession работают, Windows PowerShell будет поддерживать PSSession в состоянии Disconnected на удаленном компьютере. Если закрыть или выйти из сеанса в котором была создана PSSession, но ни одна из команд не работала в PSSession, Windows PowerShell не будет пытаться сохранить PSSession.

Комментарии:

Комментарии 2

  • Спасибо за статью. Но пожалуйста исправьте заголовок. Если вы пишете о чем-то и следующее слово начинается с гласной буквы, то пишется «Об отложенных сессиях», если с согласно то пишется «О сессиях отложенных»

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *