Я знаю, как автоматически открывать консольный сеанс при загрузке хоста Windows (рекомендуется использовать зашифрованный пароль: https://docs.microsoft.com/en-us/sysinternals/downloads/autologon).
Это полезно, когда сервер запускает плохо написанную программу, для работы которой требуется графический интерфейс, при этом она должна работать как службы или, по крайней мере, в фоновом режиме.
После открытия сеанса экран можно заблокировать, и программа продолжит работу. Администратор может даже использовать RDP с другим сеансом (это также блокирует сеанс консоли). До сих пор я не видел исключения из этого.
Этот метод приводит к нескольким проблемам. Некоторые из самых важных:
Я хотел бы автоматически открывать несколько сеансов без консоли при загрузке сервера. Как будто несколько сеансов удаленного рабочего стола были открыты, а затем отключены. Затем инкриминируемые программы могут запускаться с графическим интерфейсом пользователя в отдельных сеансах.
-> есть идеи, как этого добиться?
mstsc.exe
может работать без графического интерфейса, что обычно бесполезно, но в данном случае очень полезно.
Вы можете создать запланированную задачу, запускаемую при запуске компьютера.
Эта задача запустит столько сеансов удаленного рабочего стола, сколько вы хотите, а затем уничтожит их, оставив сеансы активными и отключенными.
Я лично использую пакет (.cmd), вызываемый запланированной задачей:
start c:\windows\system32\mstsc.exe "c:\path\do_it.rdp"
timeout /nobreak /t 60
taskkill /f /im mstsc.exe
У меня есть более изощренный способ убить mstsc.exe, который соответствует моим потребностям, поэтому я просто поставил для примера базовый taskkill.
Чтобы добиться именно того, о чем вы просили, вам понадобится хотя бы один Linux с графическим интерфейсом или Windows Server, на котором можно разместить сценарий.
В linux / bash я бы написал скрипт мониторинга ping который запускает команду после того, что, вероятно, будет перезагрузкой сервера (на некоторое время отключается ping). Команда будет представлять собой сценарий, дважды запускающий клиент rdp в фоновом режиме с предварительно принятыми сертификатами и действительными сохраненными учетными данными (по одному для каждого подключения) к объекту сервера вашего вопроса. Затем я заканчивал сценарий
sleep 60 && killall -9 rdpclientname
(поскольку убийство клиента rdp не приведет к завершению удаленных сеансов, что является частью того, чего вы хотите достичь).
Я уверен, что ты легко сможешь сделать это в Пакет Windows вместо bash, если вы хотите использовать Windows в качестве клиента. Просто я не уверен, можно ли установить несколько подключений от одного клиента Windows к одному серверу Windows. Я думаю, как минимум, вам придется использовать двух разных пользователей, запускающих скрипт дважды. Если вы не можете, вам придется разместить такие сценарии на двух разных клиентских машинах Windows.
Если вы выберете клиент Windows, двоичный файл, вызываемый вторым скриптом, активированным скриптом мониторинга ping, будет mstsc.exe и будет иметь полный путь к rdp-for-your-server-saved-session.rdp, содержащие предварительно подтвержденные сертификаты и действительные учетные данные.
На клиенте Windows вы можете использовать srv2any для запуска mstsc, и сценарии просто запускают и останавливают две службы. В случае победы вы будете использовать планировщик задач, в Linux - crontab.
Чтобы это работало так, как вы хотите, вам придется отключить автоматический вход на сервер Windows. Затем вы можете добиться отложенного локального входа в систему после этот.
У этого решения, конечно, есть процент сбоев, когда простой, наблюдаемый сценарием мониторинга ping, не будет связан с перезагрузкой сервера. Но два автоматических нежелательных входа в систему в этом случае не сильно повредят.
Вам придется много работать и много проверять, чтобы добиться этого. Вот почему следующие ... Я бы попробовал все возможное, прежде чем строить такую аранжировку!
В любом случае, как я предлагал в своем комментарии к вашему вопросу, я бы попробовал просто запустить плохо закодированную программу через srv2any на сервере. Вы не упомянули эту попытку в своем вопросе. Ты это пробовал?