1

Тема: CMD/BAT: Замена ответов Rasdial

Стандартные ответы rasdial:

+ открыть спойлер

Установка связи с rasdial...
Проверка имени и пароля пользователя...

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

Чтобы вывести сведения о данной ошибке:
        введите 'hh netcfg.chm' и в Справке
        выберите раздел разрешения проблем, затем сообщений об ошибках и найдите
691.


Установка связи с rasdial...
Проверка имени и пароля пользователя...
Регистрация компьютера в сети...
Установлена связь с rasdial.
Команда успешно выполнена.
_____________________________________________________________________

Желаймый ответ при ошибках - укороченный:

Установка связи с rasdial...
Проверка имени и пароля пользователя...

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

Соблюдая условия перезвона при ошибке:

if %ERRORLEVEL% GTR 0 (goto RasDial)

2 (изменено: wisgest, 2016-11-08 01:57:46)

Re: CMD/BAT: Замена ответов Rasdial

Одна (но не единственная) из трудностей задачи — после выполнения в CMD.EXE команды с перенаправлением

command_1 | command_2

не доступны коды возврата ни command_1, ни command2.

Оставаясь в рамках командных файлов, удалось получить лишь следующие решения:
1) просеивая вывод RASDIAL с помощью FINDSTR

@echo off
if /%1==/1 goto 1
"%~0" 1 | findstr /v /b^
	/c:"Чтобы вывести сведения о данной ошибке:"^
	/c:"	введите 'hh netcfg.chm' и в Справке"^
	/c:"	выберите раздел разрешения проблем, затем сообщений об ошибках и найдите "^
	/c:"Костыль"
exit /b
---------------------------
:1
(echo Костыль)
rem Предыдущая строка - "костыль" для синхронизации, зачем - сам плохо понимаю
SET /P CONNECTION=CONNECTION=>CON
rasdial %CONNECTION%
if errorlevel 1 goto 1
exit /b

2) перенаправляя вывод RASDIAL во временный файл и затем обрабатывая его, не используя внешних команд

@echo off
setlocal enableextensions enabledelayedexpansion
:1
(
	call :2
	if errorlevel 1 goto 1
) >rasdial.log <rasdial.log
del rasdial.log
endlocal
exit /b
---------------------------
:2
rasdial connection
(echo **EOF**)

:3
set "line="
set /p "line="
if "!line!"=="**EOF**" exit /b 0
if "!line!"=="Чтобы вывести сведения о данной ошибке:" exit /b 1
echo:!line!>con
goto 3

В обоих случаях не видно живого хода подключения — весь вывод RASDIAL показывается после завершения команды: во втором случае это очевидно, в первом — менее предсказуемо.

Предполагаю (пока не проверял), что положение может спасти подключение к решению JS (или VBS) для чтения выходного потого RASDIAL. Если не использовать вывод в файл и слежение за ним, то возможен либо запуск RASDIAL методом WshShell.Exec, либо перенаправление выходного потока RASDIAL во входной поток сценария WSH.