Назад | Перейти на главную страницу

PSSession как зарегистрированный пользователь

Я пытаюсь настроить сценарий Powershell, который будет отслеживать виртуальную машину VirtualBox (то есть «Builder4»), работающую на одном из наших серверов сборки. Иногда он теряет соединение, и у меня уже есть сценарий (локальный на сервере), который перезагружает сетевой адаптер, но я хочу сделать его полностью автоматизированным.

У меня PSSession правильно аутентифицирован на сервере, успешно подключен, и я могу запускать команды с сервера, выполнять интерактивный сеанс (Enter-PSSession) и т. Д. Однако это «новый» сеанс, поэтому я не могу управлять любым уже запущенных виртуальных машин.

Настройка сервера представляет собой ящик Windows Server 2012 с одной учетной записью. Учетная запись является локальной для сервера, а не находится в корпоративном домене («имя компьютера \ пользователь» против «company.na.com \ пользователь»), и остается в системе, пока сервер работает. Обычно мы подключаемся к серверу через RemoteDesktop. Несмотря на то, что я подключаюсь к сеансу PSSession, используя то же имя компьютера, имя пользователя и учетные данные, похоже, что он не подключается к существующему имени входа на сервере, хотя единственным подтверждающим доказательством этого является то, что VBoxManage list runningvms возвращает пустой список. Например, выполняется следующее (основное содержимое «test.ps1»):

whoami
VBoxManage list vms
echo -----
VBoxManage list runningvms

дает следующий результат:

Из удаленного сеанса

PS ...> test.ps1
win-*******\jenkins
"Builder1" {vm-hash-code}
"Builder2" {vm-hash-code}
"Builder3" {vm-hash-code}
"Builder4" {vm-hash-code}
"Builder5" {vm-hash-code}
"Builder6" {vm-hash-code}
-----
PS ...>

С сервера (локально)

PS ...> test.ps1
win-*******\jenkins
"Builder1" {vm-hash-code}
"Builder2" {vm-hash-code}
"Builder3" {vm-hash-code}
"Builder4" {vm-hash-code}
"Builder5" {vm-hash-code}
"Builder6" {vm-hash-code}
-----
"Builder1" {vm-hash-code}
"Builder2" {vm-hash-code}
"Builder3" {vm-hash-code}
"Builder4" {vm-hash-code}
"Builder5" {vm-hash-code}
PS ...>

Поскольку whoami предполагает, что я, кажется, вошел в систему под правильной учетной записью / пользователем. Однако, как VBoxManage list runningvms предполагает, что Windows воспринимает его как «другого пользователя» (поскольку runningvms зависят от пользователя).

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

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

Я собираюсь повторить часть существующей информации, но, надеюсь, это поможет прояснить ситуацию.

Ваша проблема не в том, что скрипт видит сеанс PSSession как другого пользователя. Когда дело доходит до удаленных подключений, Windows основана на сеансах. Один пользователь может иметь несколько сеансов на одном сервере с отдельными процессами, которые не могут легко взаимодействовать друг с другом. Есть некоторые инструменты, которые могут работать между сеансами, что необходимо для взаимодействия с системными службами, запущенными в сеансе 0. Эти сеансы изолированы в целях безопасности. Удаленный рабочий стол будет подключаться к вашему текущему сеансу, чтобы вы могли управлять запущенными виртуальными машинами.

PSSession также не является полным интерактивным входом в систему. Он не создает полноэкранный "сеанс". Вы можете понять, о чем я говорю, используя tasklist или query session изнутри вашего PSSession. Вы увидите сеанс 0 и другой идентификатор сеанса для консоли, но не для вашего сеанса PSSession. Он также показывает стрелку рядом с сеансом, в котором вы в настоящее время находитесь. В сеансе PSSession это будет services сеанс.

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

PSSession использует WinRM для выполнения команд PS на удаленном сервере. Здесь сеанс - это просто установленный сеанс, и он не имеет ничего общего с сеансами RD.

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

Ответы от Ульфи и Кори Кнутсон удалось указать мне правильное направление, чтобы найти решение, соответствующее моим потребностям.

К сожалению, запуск виртуальных машин с помощью PSSession невозможен, поскольку нам все еще требуется довольно часто иметь возможность графического доступа к ним. Я попытался запустить одну из виртуальных машин через сеанс PSSession, который был успешным, но не был физически доступен через удаленный рабочий стол или локальный вход (также известный как «сеанс входа в систему») на сервере.

В том же духе я попытался использовать PSExec, который, как я обнаружил, имел возможность запускаться в конкретном сеансе (доступном через query session). Мне удалось запустить одну из виртуальных машин под тем же идентификатором сеанса, что и сеанс входа в систему. Я мог сказать это только проверив tasklist и видеть его в списке под этим идентификатором сеанса, поскольку он никогда не появлялся визуально.

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