Гостевая статья Управление сессиями Powershell

Когда вы создаете удаленное соединение между двумя компьютерами, вы создаете - в терминологии PowerShell - сессию. Существует невероятное количество опций, которые могут быть применены к этим сессиям, и в этой части руководства мы расскажем вам о них.

Ad-Hoc vs. Persistent Sessions

Когда вы используете команду Remoting - в первую очередь Invoke-Command или Enter-PSSession - и указываете имя компьютера с помощью параметра -ComputerName, вы создаете ad-hoc сессию. По сути, PowerShell просто вызывает сессию, использует ее, а затем разрывает, и все это автоматически.

С другой стороны, вы можете использовать New-PSSession для явного создания новой сессии, который затем можно использовать, передавая сессию параметру -Session команды Invoke-Command, Enter-PSSession и многим другим командам Remoting-aware. Когда вы вручную создаёте сессию, вы можете избавиться от нее, когда закончите. Однако, если у вас открыта сессия и закрыта ваша копия PowerShell, то эта сессия автоматически удаляется за вас - так что вы не оставите ничего, что нужно почистить.

Отключение и повторное подключение сессий

В PowerShell v3 вы можете отключать и переподключать сессию, используя Disconnect-PSSession и Connect-PSSession. Каждая из этих команд принимает объект сессии, который вы обычно создаёте с помощью New-PSSession.

Отключенный сессия оставляет копию PowerShell на удалённом компьютере. Это хороший способ заставить запустить какое-нибудь длительное задание, отключить, а затем снова подключиться позже, чтобы проверить его. Вы даже можете отключить сессию на одном компьютере, перейти на другой компьютер и снова подключиться к этой сессии (хотя вы не можете подключиться к чужой отключенной сессии; вы ограничены повторным подключением к своей собственной).

Например, на рисунке 5.1 показана сессия, создаваемая с клиента на сервер. Затем этой сессии даётся задание выполнить фоновое задание, после чего сессия отключается. Важно отметить, что команда и фоновое задание находятся на сервере (DC01), а не на клиенте.

9987eac6d938dd9d99e8b.png


На рисунке 5.2 мы переехали на другой компьютер. Мы вошли в систему и запустили PowerShell, под тем же пользователем, что и на предыдущем клиентском компьютере. Мы извлекаем сессию с удаленного компьютера, а затем переподключаем его. Затем мы входим в вновь подключенную сессию, отображаем это фоновое задание и получаем от него некоторые результаты. Наконец, мы выходим из удаленной сессии и завершаем ее с помощью Remove-PSSession.

9bb3a10f7b1a911fcf0fe.png


Рисунок 5.2: Повторное подключение к сеансу, использование и удаление сеcсии

Очевидно, что отключенные сессиb могут представлять собой что-то вроде проблемы управления, потому что вы оставляете копию PowerShell включенной и работающей на удаленном компьютере - и вы делаете это таким образом, что кому-то даже трудно увидеть, что вы это сделали! Именно здесь в игру вступают параметры сессии

Параметры сесси

Всякий раз, когда вы запускаете команду Remoting, которая создает сессию - постоянную или ad-hoc - у вас есть возможность указать параметр -SessionOption, который принимает объект PSSessionOption. Объект по умолчанию используется, если его не указать, и этот объект можно найти во встроенной переменной $PSSessionOption. Это показано на рисунке 5.3.

4fc1b2179c847e4bf842c.png


Рисунок 5.3: Объект по умолчанию PSSessionOption, хранящийся в $PSSessionOption

Как вы видите, это задает ряд параметров по умолчанию, включая тайм-аут операции, тайм-аут простоя и другие опции. Вы можете изменить их, просто создав объект новой опции сессии и присвоив ему $PSSessionOption; обратите внимание, что вам нужно сделать это в скрипте профиля, если вы хотите, чтобы ваши изменения становились новыми по умолчанию каждый раз, когда вы открываете новую копию PowerShell. На рисунке 5.4 показан пример.

a9e896ad14283b18c73c8.png


Рисунок 5.4: Создание нового объекта PSSessionOption по умолчанию

Конечно, 2-секундный тайм-аут простоя, наверное, не очень практичен (и на самом деле не сработает - нужно указать как минимум 60-секундный тайм-аут, чтобы вообще использовать объект сессии), но вы заметите, что вам нужно только указать параметры опции, которые вы хотите изменить - все остальное перейдет во встроенные настройки по умолчанию. Вы также можете указать уникальную опцию сессии для любой созданной вами сессии. На Рисунке 5.5 показан один из способов сделать это.

8a7e0cf33b42ac43583a5.png


Рисунок 5.5: Создание нового объекта PSSessionOption для использования с соединением 1 к 1

Указав оптимальные значения для этих различных опций, вы можете гарантировать, что отключенные сессии не будут зависать и работать вечно. Разумное время простоя, например, гарантирует, что сессия в конце концов закроется сам по себе, даже если администратор отсоединится от нее и впоследствии забудет об этом. Обратите внимание, что когда сессия закрывается сама по себе, любые данные в рамках этой сессии - включая результаты фонового задания - будут потеряны. Наверное, неплохо было бы попрактиковаться в сохранении данных в файл (например, с помощью Export-CliXML), чтобы простаивающия сессия не закрылася и не потеряла всю свою работу.

 
  • Нравится
Реакции: Vertigo
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!