Вопрос или проблема
У нас есть скрипт, который запускает RDC для подключения к удаленной машине. Проблема в том, что иногда требуется несколько попыток для подключения. Первые несколько попыток часто выдаются
пока не появится ожидаемая строка для ввода пароля
Поэтому я хотел бы, чтобы скрипт проверял окно ответа, и если это ответ “не удается подключиться”, повторял попытку, пока не подключится. Но я не могу понять, как это сделать.
Косвенным способом может быть использование того факта, что окно “не удается подключиться” не появляется на панели задач, в то время как первоначальное окно “подключение”, а также окно ввода пароля, появляются. Так что, если у меня будет цикл, который проверяет каждые 2 секунды, появляется ли “Подключение к удаленному рабочему столу” на панели задач, это решит проблему. Но я не знаю, возможно ли это сделать.
Ответ или решение
Чтобы реализовать проверку, подключено ли удаленное рабочее стол, можно воспользоваться языком скриптов Visual Basic for Applications (VBS). Ваше решение будет включать в себя цикл, который будет проверять наличие окна "Удаленный рабочий стол" в панели задач. Это поможет вам управлять соединениями, особенно в ситуациях, когда необходимо многократно пытаться подключиться к удаленному компьютеру.
Вот пример VBS-скрипта, который выполняет указанную задачу:
Option Explicit
Dim objShell, objWMIService, colProcesses, objProcess
Dim isConnected
' Устанавливаем оболочку
Set objShell = CreateObject("WScript.Shell")
' Функция, проверяющая наличие окна "Удаленный рабочий стол" на панели задач
Function IsRDPWindowOpen()
Set objWMIService = GetObject("winmgmts:\\.\root\cimv2")
Set colProcesses = objWMIService.ExecQuery("Select * From Win32_Process Where Name = 'mstsc.exe'")
If colProcesses.Count > 0 Then
IsRDPWindowOpen = True
Else
IsRDPWindowOpen = False
End If
End Function
' Цикл подключения к удаленному рабочему столу
Do
' Запуск команды подключения к удаленному рабочему столу
objShell.Run "mstsc /v:IP_АДРЕС_УДАЛЕННОГО_КОМПЬЮТЕРА", 1, False
' Ждем некоторое время, чтобы время на запуск подключения
WScript.Sleep 2000
' Проверяем, появился ли "Удаленный рабочий стол"
isConnected = IsRDPWindowOpen()
If isConnected Then
WScript.Echo "Подключение успешно!"
Exit Do
Else
WScript.Echo "Не удалось подключиться. Повторная попытка..."
End If
' Ждем перед следующим циклом
WScript.Sleep 2000
Loop While Not isConnected
' Освобождаем объекты
Set objShell = Nothing
Set objWMIService = Nothing
Set colProcesses = Nothing
Set objProcess = Nothing
Объяснение кода
-
Создание оболочки: Скрипт инициирует объект
WScript.Shell
, который используется для выполнения команд. -
Функция
IsRDPWindowOpen
: Эта функция использует WMI для проверки, запущен ли процессmstsc.exe
(клиент удаленного рабочего стола). Если процесс запущен, значит, окно "Удаленный рабочий стол" открыто. -
Цикл подключения: Используется цикл
Do...Loop
, который будет выполнять попытки подключения к удаленному рабочему столу. Он вызываетmstsc
с заданным IP-адресом удаленного компьютера. -
Проверка подключения: Через несколько секунд после каждой попытки подключения проверяется, открыто ли окно "Удаленный рабочий стол". Если оно открыто, цикл завершается, и выводится сообщение о успешном подключении. Если окно не открыто, сигнализируется о неудаче и выполняется повторная попытка.
Примечания
- Не забудьте заменить
IP_АДРЕС_УДАЛЕННОГО_КОМПЬЮТЕРА
на фактический адрес удаленного компьютера. - Убедитесь, что у вас есть права на выполнение этого скрипта и доступ к удаленному рабочему столу.
- Также учтите, что данный скрипт будет блокировать выполнение, пока не будет установлено соединение, это необходимо учитывать при интеграции с другими процессами.
Таким образом, данный скрипт будет полезен в решении вашей проблемы с повторными попытками подключения к удаленному рабочему столу.