Имя: Пароль:
1C
1С v8
Сменить кодировку ответа команды ping
,
0 Mikhail Volkov
 
14.11.20
15:14
Есть у меня такаю функция:
// Возвращает Истина, если пингуется IP-адрес
// v8: Как средствами 1C проверить ping (Ping monitor)?
Функция PingIP_Адреса(IP_Адрес = "", ТекстСообщения = "") Экспорт
    Если ПустаяСтрока(IP_Адрес) Тогда
        Возврат Ложь;
    ИначеЕсли IP_Адрес = НРег(СокрЛП(ИмяКомпьютера())) Тогда
        Возврат Истина;
    КонецЕсли;
    objShell = Новый COMОбъект("WScript.Shell");
    objScriptExec = objShell.Exec("ping.exe -n 1 " + IP_Адрес);
    strPingResults = НРег(objScriptExec.StdOut.ReadAll());
    Результат = Найти(strPingResults, "ttl=") > 0;
    ТекстСообщения = ?(Результат, ТекстСообщения, ?(СтрЧислоВхождений(IP_Адрес, ".") >= 3, "IP-адрес", "Компьютер") + ": '" + ВРег(IP_Адрес) + "' - недоступен!");
    IP_Адрес = ?(СтрЧислоВхождений(IP_Адрес, ".") >= 3, IP_Адрес, ?(Найти(strPingResults, "[") = 0, "", Сред(strPingResults, Найти(strPingResults, "[") + 1, Найти(strPingResults, "]") - Найти(strPingResults, "[") - 1)));
    Возврат Результат;
КонецФункции // PingIP_Адреса()

На входе ИмяКомпьютера, если компьютер доступен в сети (подключился не удаленно), возвращает Истина, преобразует ИмяКомпьютера в его IP_Адрес. Много лет работала, а сегодня strPingResults выдает: џаё їа®ўґаєґ бўп§ё ­ґ г¤ «®бм ®ў­ аг¦ёвм 㧴« mv-win10.
џа®ўґамвґ ё¬п 㧫  ё ї®ўв®аёвґ ї®їлвєг. - даже цифр нет!?
64 NorthWind
 
16.11.20
19:26
(63) Попробуйте
> Адрес = objStatus.ProtocolAddress;
вместо
> Адрес = objStatus.ProtocolAddressResolved;
65 Mikhail Volkov
 
16.11.20
19:37
(64) Получилось, спс!
66 Mikhail Volkov
 
17.11.20
07:03
С WMI сталкиваюсь впервые, случись что, поправить не смогу...
(56) В твоем варианте: Shell.Run("ping -n 1 -w 400 " + ИмяКомпьютера, 0, Истина), если компьютер доступен, результат 0. Возможно получить его IP-адрес без мигания черного окна?
67 NorthWind
 
17.11.20
09:03
Вариант, как избежать консольного окна, вам дали еще в (39). Но как бы очевидно, что делать это вы не будете.
То есть вы и с запуском процесса не особо хотите разбираться.
Ну и какая разница, в чем вы не разбираетесь? :)))
68 Mikhail Volkov
 
17.11.20
09:14
(67) Пытаюсь разобраться, возможно ли получить IP-адрес? В постах (56) не нашел ответа.
69 NorthWind
 
17.11.20
09:23
(68) Если через вызов программы - тогда только разбирая вывод пинга.
что довольно муторно и чревато ошибками, если вывод по какой-то причине поменяется - в этом случае разборщик может ошибиться.
Я бы не стал этого делать.
70 Mikhail Volkov
 
17.11.20
09:41
(69) > Если через вызов программы - тогда только разбирая вывод пинга.
В (0) уже сделано: Сред(strPingResults, Найти(strPingResults, "[") + 1, Найти(strPingResults, "]") - Найти(strPingResults, "[") - 1)), только как strPingResults получить? В (0) получаю objScriptExec.StdOut.ReadAll().
71 NorthWind
 
17.11.20
09:50
(70) Shell.Run, насколько я знаю, не позволяет перенаправлять стандартный ввод-вывод, соответственно, с его помощью вывод программы вы не заберете для парсинга.
Для этого годится только Shell.Exec.
Соответственно, выходит что нужно делать вариант (25), но, чтобы избежать вывода консольного окна, придется завернуть все это в VBS-скрипт по совету из (39).
72 Mikhail Volkov
 
17.11.20
10:18
(71) Как завернуть все это (25) в VBS-скрипт?
73 NorthWind
 
17.11.20
10:56
(72) Через MSScriptControl.ScriptControl, например, можно попробовать. Но с этим будут проблемы на 64-битной 1С.
Можно скрипт сохранить как временный файл и натравить на него wscript.exe, правда, я не исключаю что тут опять вылезет окно, и кроме того, непонятно как отдать результат.
В общем, хрен его знает. Я точно не буду заниматься подобными извращениями, потому что есть рабочий вариант (60), простой и понятный.
74 mistеr
 
17.11.20
12:28
(72) Вот vbs обертка для произвольного батника

    Dim shell,command
    ScriptDir = WScript.ScriptFullName
    ScriptDir = Left(ScriptDir, Len(ScriptDir) - Len(WScript.ScriptName))
    command = "cmd.exe /c " & ScriptDir & "ping_test.cmd"
    Set shell = CreateObject("WScript.Shell")
    shell.Run command,0

"ping_test.cmd" заменить на имя вашего батника, лежащего рядом с оберткой.
75 Mikhail Volkov
 
17.11.20
13:21
(74) Куда писать эту vbs-обертку, 1С поймет это? Батник отдельным файлом должен лежать? Какой он должен быть, чтобы формировал ответ на команду: "ping.exe -n 1 " + ИмяКомпьютера, что-то типа (9) или (10)?
76 lEvGl
 
гуру
17.11.20
13:23
Микхаил...
77 mistеr
 
17.11.20
13:58
(75) Если хочешь парсить вывод, то да батник отдельным файлом, в нем две строки, chcp и ping.
78 mistеr
 
17.11.20
13:59
А вообще, если посмотреть шире, на удаленном хосте какой сервис интересует? Если HTTP, то по HTTP и пингуй. В 1С все есть, не надо возиться с батниками.
79 Mikhail Volkov
 
17.11.20
14:03
(51) > чем (34) не устраивает? три строки кода
Да, и черное окно не мелькает, но только определяет доступность компьютера. А IP-адрес - нет. Думал не сложно добавить, а оказалось...
80 Mikhail Volkov
 
17.11.20
14:14
(78) В Альфа-Авто 4.1 вроде нет HTTP сервиса. Функцию PingIP_Адреса() писал с появлением онлайн-кассы общей в использовании. Потом ее использовал еще где-то.
81 mistеr
 
17.11.20
14:22
(80) Ты не понял наверное. Я спрашиваю, ты сейчас конкретный хост с какой целью мониторить хочешь? Чтобы потом использовать какой-то сервис на этом хосте. Какой?
82 Mikhail Volkov
 
17.11.20
14:37
(81) Ничего не хочу мониторить. В последний раз смотрел ее отладчиком при подключении удаленного пользователя, увидел абракадабру, засомневался...
83 mistеr
 
17.11.20
14:41
(82) А, понятно. Может быть она и "много лет" неправильно работала...
84 lEvGl
 
гуру
17.11.20
14:43
доменную авторизацию он мониторит и попутно видимо еще какая история с входом в домен и доступностью машин, может имена компов и их адреса в актуальном состоянии поддерживать хочет, в целом админская хрень какая то
85 Mikhail Volkov
 
17.11.20
14:55
(84) У удаленных пользователей бывают проблемы с онлайн-кассой, поэтому в ЖР пишется как он зашел, с какого компьютера. К функции (0) не было нареканий, кроме мелькания черного окна.
86 lEvGl
 
гуру
17.11.20
14:57
+ (85) кроме мелькания черного окна и албанского языка
87 Mikhail Volkov
 
17.11.20
15:16
(86) Абракадабра не мешает, фрагмент "ttl=" не искажается, просто засомневался при отладке.
88 Mikhail Volkov
 
17.11.20
18:12
В теме v8: Ошибка выполнения команды WshShell.Run приводится такой фрагмент:
WshShell = новый ComОбъект("WScript.Shell");
RetCode = WshShell.Run("команда",0,Истина).StdOut;
Сообщить(RetCode);
У меня ошибку дает: Значение не является значением объектного типа (StdOut)?
89 NorthWind
 
17.11.20
18:34
(88) Нет там .StdOut. Не путайте с Exec. См. (71), я там об этом писал уже.
90 Mikhail Volkov
 
17.11.20
18:51
(89) Да, видимо там ошибочно так написано.
91 Mikhail Volkov
 
18.11.20
08:02
> Скрипты лучше выполнять непосредственно движком, без всяких файлов. (Запуск "*.vbs" из 7.7... проблема)
Еще бы таких примеров, чтобы понять как пишутся VBS-скрипты без bat-файлов...
92 NorthWind
 
18.11.20
08:59
(91) лучше-то лучше. Но нужно иметь в виду, что эта штука (ScriptControl) есть только x32.
Соответственно, если планируется переходить или использовать x64 клиентов или выполнять на сервере, то могут быть траблы.
93 NorthWind
 
18.11.20
09:01
вообще, конечно, раздуть такую хрень на сто постов из-за того чтобы комп попинать/адрес отрезольвить - это только 1Сники могут :) Там где нормальные программисты бы все давно сделали встроенными библиотеками, тут на полном серьезе двое суток обсуждается как ping.exe запустить :))))
94 Mikhail Volkov
 
18.11.20
09:15
(92) Альфа-Авто x64 (не УФ), но клиентская часть 32-разрядная, иначе торговое оборудование не работает.
(93) VBS-скриптами и bat-файлами почти не пользуюсь, не разбираюсь... время есть, пытаюсь разобраться.
95 NorthWind
 
18.11.20
09:23
(94) ну если на 32-битность плевать, то можно попытаться сделать как написано в 6-м посте по ссылке в (91).
96 Djelf
 
18.11.20
09:31
(93) Так сделали уже http://catalog.mista.ru/public/975147/
97 NorthWind
 
18.11.20
09:41
(96) кстати, (0) это тоже могло бы быть интересно, тем более что компоненту отдают бесплатно.
98 Mikhail Volkov
 
18.11.20
10:28
(97) Посмотреть бы ее, не скачивается...? А у тебя скачивается? Если Да, то перешли мне на [email protected]
99 Djelf
 
18.11.20
10:32
(98) В 3м сообщении ссылка на обработку, вк`шки внутри.
100 Сияющий в темноте
 
18.11.20
10:34
Имя компьютера в адрес это же DNS или WINS
причем тут пинг?
nslookup может быть?
101 Сияющий в темноте
 
18.11.20
10:35
если имя компьютера в сети windowd,то вообще локальный кеш имен.
102 Mikhail Volkov
 
18.11.20
10:38
(99) Нашел, Спс!
103 NorthWind
 
18.11.20
10:44
(100) ему нужно все в куче - по имени компа отрезольвить IP и проверить доступность этого IP.
В принципе, штатный пинг резольвит IP перед проверкой, поэтому такое пожелание ничему не противоречит.
104 acht
 
18.11.20
10:55
(103) В общем случае это сильно разные задачи. FQDN и IP связаны как "многие ко многим". И это если еще не лезть в ipv4/ipv6, разные localhostы и отличия wins от dns.

Получит какой-нибудь [2a02:6b8:a::a] и общий сбой сети и прибежит опять вопросы задавать...
105 Mikhail Volkov
 
18.11.20
11:26
(96) Вставил в свою функцию:
    //Ping -- произвольное имя, под которым мы хотим видеть компоненту в 1С
    подключено = ПодключитьВнешнююКомпоненту("ВнешняяОбработка.ТестКомпоненты.Макет.Компонента32", "Ping", ТипВнешнейКомпоненты.Native);
    //пытаемся подключить 32бита
    Если Не подключено Тогда
        подключено = ПодключитьВнешнююКомпоненту("ВнешняяОбработка.ТестКомпоненты.Макет.Компонента", "Ping", ТипВнешнейКомпоненты.Native);
    КонецЕсли;
    темпл = Новый("AddIn.Ping.smiPingNativeExtension");
    темпл.Address = IP_Адрес;
    темпл.PingCount = 5;
    темпл.Пинг();
    Если Не темпл.ЕстьОшибка Тогда
        IP_Адрес = темпл.Адрес;
        Возврат Истина;
    КонецЕсли;
    ТекстСообщения = ?(СтрЧислоВхождений(IP_Адрес, ".") >= 3, "IP-адрес", "Компьютер") + ": '" + ВРег(IP_Адрес) + "' - недоступен!";
    Возврат Ложь;
Получил ошибку: Тип не определен (AddIn.Ping.smiPingNativeExtension)
    темпл = Новый("AddIn.Ping.smiPingNativeExtension");
Как в 1м сообщении ссылки на обработку, вк`шки внутри. А в 4м он же сообщает: Проверил, обработка во вложении работает. Почему?
106 Mikhail Volkov
 
18.11.20
11:56
+ В УФ (КА2 на 8.3.16.1359) работает, без ошибок! А на обычных формах в 8.3.10.2466 - нет. От платформы зависит?
107 Mikhail Volkov
 
18.11.20
12:37
+ Переписал обработку на обычные формы, запускаю на 8.3.16.1359, и та же ошибка: Тип не определен (AddIn.Ping.smiPingNativeExtension)!?
Но вернемся к вопросу (72): Как завернуть код (0) в VBS-скрипт?
108 Mikhail Volkov
 
18.11.20
13:36
+ А нет, макеты не перенес, перенес: работает! А как их мне перенести в свою конфигурацию? Ладно, не надо, все равно не буду ее использовать... Сейчас через WMI (29) работает (непонятно как, случись что, поправить не смогу...). Хочется понять: Как завернуть код (0) в VBS-скрипт?
109 NorthWind
 
18.11.20
14:30
(104) ну это в общем. В простейшей локалке обычно 1:1. Если ему NSLookup вернет несколько, он один хрен возьмет первый попавшийся.
110 Mikhail Volkov
 
18.11.20
14:54
В (74) дали vbs-обертку для произвольного батника. Не понял: куда ее писать, прямо в модули 1С, 1С поймет это? Или vbs-обертку надо писать отдельно, в виде батника? И как ее запускать из 1С?
(95) Допустим не хочу писать батник (не знаю что писать, кроме: "ping.exe -n 1 " + ИмяКомпьютера), и написал прямо в модуле 1С как Запуск "*.vbs" из 7.7... проблема. Как мне запустить эту vbs-обертку в 1С?
111 mistеr
 
18.11.20
15:12
(96) "Сырые сокеты", права админа, ну нафиг.
112 NorthWind
 
18.11.20
15:20
(110)

   Скрипт = Новый COMОбъект ("MSScriptControl.ScriptControl");
  
   Скрипт.Language = "vbscript";
   КодНаБейсике =
  
          "Function Ping (Name)
         |  Set Cmd = CreateObject(""WScript.Shell"")
         |  Set WshExec = Cmd.Exec (""cmd.exe /q /k echo off"")
         |  WshExec.StdIn.WriteLine ""chcp 1252>nul""
         |  WshExec.StdIn.WriteLine ""ping -n 1 "" & Name & "" ""
         |  WshExec.StdIn.WriteLine ""exit""
         |    Ping = WshExec.StdOut.ReadAll()
         |End Function";
  
  
   Скрипт.AddCode(КодНаБейсике);

   СтрокаДляРазбора = Скрипт.Run ("Ping", "srv-02");
  
   Сообщить (СтрокаДляРазбора);


Толку только от этого чуть. Окно никуда не девается.
113 NorthWind
 
18.11.20
15:21
так что все же я бы на вашем месте перестал бы сношать голову, а пользовался бы WMI
114 Djelf
 
18.11.20
15:32
(111) А теперь прочти внимательнее что автор ВК написал. Ты же все наоборот прочитал ;)
115 mistеr
 
18.11.20
15:53
(114) Ага, прочел внимательно, спасибо.

Автору ВК советую пройти курс "Как ясно выражать свои мысли в письменной форме".
116 Mikhail Volkov
 
18.11.20
16:26
(111) У меня не УФ, см. (108).
(112) Черное окно на: СтрокаДляРазбора = Скрипт.Run ("Ping", "srv-02"); А почему: Скрипт = Новый COMОбъект ("MSScriptControl.ScriptControl"); а не WshShell = новый ComОбъект("WScript.Shell"); Тогда наверное можно: WshShell.Run("СтрокаКоманды",0,Истина); без черного окна?
117 Mikhail Volkov
 
18.11.20
18:32
(116) Нет, тут (112) WshShell = новый ComОбъект("WScript.Shell"); не работает. Тогда VBS скрипты, написанные в 1С, работают всегда с миганием черного окна?
(39) > Можно убрать, если обернуть в VBS скрипт. То есть схема такая: через WScript.Shell запускаешь VBS скрипт, в нем запускаешь cmd и ставишь признак скрыть окно, в cmd запускаешь chcp + ping.
Только при выполнении батников или cmd можно скрыть мигание черного окна?
118 acht
 
18.11.20
18:34
А у меня это окошко синее...
119 NorthWind
 
18.11.20
19:03
(116) ну раз можно - так сделайте.
120 Mikhail Volkov
 
18.11.20
19:28
(119) Два VBS скрипта?
121 NorthWind
 
18.11.20
19:51
(120) Вы так и не поняли ничего... Run можно сделать без черного окна, он это позволяет. Но используя Run, вы не прочитаете вывод команды ping. Если же использовать Exec, то прочитать вывод получится, но не удастся избавиться от консольного окна, во всяком случае относительно естественными способами.
122 NorthWind
 
18.11.20
19:54
в примере (112) я загнал все в отдельный скрипт и выполнил его, используя ScriptControl. Это ничего не дало - как только дело дошло до выполнения пинга, все равно появилось окно, которое пропало после завершения программы.
123 Mikhail Volkov
 
18.11.20
20:02
(121) Не стоит и пытаться применять VBS скрипты, все равно не избежать мигание черного окна для получения IP-адреса?
124 ДедМорроз
 
18.11.20
20:17
Я чего то может не понимаю
Батник в невидимом окне запускать получается,в батник вывод перенаправить в файл тоже получается,тогда зачем вообще огороды с StdOut городить?
125 Mikhail Volkov
 
18.11.20
20:21
(124) А как сделать, чтобы его не было?
126 NorthWind
 
18.11.20
20:32
(125) перенаправить в файл на диске можно. Потом файл в 1С открыть и прочитать... Если уж заниматься х...ней, то на полную катушку, че.
127 Mikhail Volkov
 
18.11.20
20:43
(126) > перенаправить в файл на диске можно. Потом файл в 1С открыть и прочитать...
Только так? Да, не стоит заниматься...
128 NorthWind
 
18.11.20
22:12
Как думается, наиболее рациональный вариант для винды все-таки WMI. Скорее всего будет норм жить под все актуальные винды, с платформой 1С x64 проблем тоже быть не должно, нет извращений вроде запуска дополнительных программ, работает быстро, и короткий понятный код. Минус только один - с линухом не совместимо. Будь у меня подобная задача - я бы остановился на нем.
129 Mikhail Volkov
 
19.11.20
07:55
(126) Т.е. VBS-скрипт сначала надо записать в файл, и запускать этот файл скрытым? Это для всех VBS-скриптов, или только для получения IP-адреса?
(128) Тогда придется остановиться на варианте через WMI. Хотелось начать разбираться с VBS-скриптов.
130 Biker
 
19.11.20
09:41
(28) вот почему не скачать бсп и не выдрать оттуда рабочую функцию?
131 Mikhail Volkov
 
19.11.20
09:59
(130) Там тоже черное окно возникает. И получения IP-адреса есть?
132 Mikhail Volkov
 
19.11.20
10:07
(112) Это всегда для написания скриптов так:
   Скрипт = Новый COMОбъект ("MSScriptControl.ScriptControl");
   Скрипт.Language = "vbscript";
   КодНаБейсике =...
133 Mikhail Volkov
 
19.11.20
16:24
+ А где посмотреть как правильно скрипты писать? А то в (112): Скрипт.Language = "vbscript"; а в Запуск "*.vbs" из 7.7... проблема: Скрипт.Language = "JScript"; Отчего это зависит?
134 ДенисЧ
 
19.11.20
16:28
Скрипт.Language = "vbscript"
Скрипт.Language = "JScript"

Скрипач, ты дальтоник? Красный от зелёного, в смысле басик от жискрипта не отличаешь?
135 Mikhail Volkov
 
19.11.20
16:48
(134) Понятно. Все же, где почитать? Чтобы не задавать подобных вопросов. На ИТС https://its.1c.ru/db/execdoc#content:10064:hdoc не нашел ничего толкового...
136 ДенисЧ
 
19.11.20
16:52
(135) Почитать что? Чем бейсик отличается от жискрипта? О_о
137 ДенисЧ
 
19.11.20
16:53
Кроме того... По твоей ссылке - экзекутор (первого ранга). А это не бейсик и не жискрипт... Это отдельный язык, если мне эклер не изменяет...
138 NorthWind
 
19.11.20
16:55
(135) не поверите - в гугле и яндексе. А примера по ссылке на мистовский топик, который тут был, вполне достаточно для того чтобы попробовать сделать что-то самому, первый раз в жизни увидев этот скрипт-контрол.
139 Mikhail Volkov
 
19.11.20
17:06
(138) Теорию...
В (112) Скрипт.Run ("Ping", "srv-02"); Ping - название функции, или ответ команды: WshExec.StdOut.ReadAll()?
140 ДенисЧ
 
19.11.20
17:13
(139) Функция
141 NorthWind
 
19.11.20
18:37
(139) какая именно теория вам нужна - для чего может применяться в 1С? Гуглится за несколько минут, находится, например, тут https://www.script-coding.com/MSScriptControl.html
142 Mikhail Volkov
 
19.11.20
19:34
Переписал скрипт по примеру Как запустить скрипт VBS из 1с
    СтрокаКоманды = "ping.exe -n 1 " + IP_Адрес;
    Скрипт = Новый COMОбъект("MSScriptControl.ScriptControl");
    Скрипт.Language = "VBscript";
    ТекстСкрипта = "
    |Function Ping()
    |set WshShell=WScript.CreateObject(""WScript.Shell"")
    |WshShell.Run """ + СтрокаКоманды + """, 0, true
    |End Function";
    Скрипт.AddCode(ТекстСкрипта);
    СтрокаДляРазбора = Скрипт.Run("Ping");

Пишет: Ошибка выполнения Microsoft VBScript: Требуется объект: 'WScript' - Что ни так?
143 NorthWind
 
19.11.20
21:50
(142)
заместо
|set WshShell=WScript.CreateObject(""WScript.Shell"")
надо
|set WshShell=CreateObject(""WScript.Shell"")
144 Mikhail Volkov
 
20.11.20
00:01
(143) Спс, а в следующей строке: |WshShell.Run """ + СтрокаКоманды + """, 0, true - скобки нужны? Поскольку кавычек ставить? true заменить на 1? Сейчас ТекстСкрипта (см. отладчиком): "
Function Ping()
set WshShell=WScript.CreateObject("WScript.Shell")
WshShell.Run "ping.exe -n 1 PERSEUS", 0, true
End Function" - Правильно? Ошибок нет, но СтрокаДляРазбора пустая?
145 Mikhail Volkov
 
20.11.20
08:41
+ Скобки не дает добавить, пишет: (Ошибка компиляции Microsoft VBScript): Недопустимо использование скобок при вызове процедуры Sub. Без них должна что-то вернуть Скрипт.Run("Ping");? Если не ответ Ping, то хотя бы 0 (успех) или 1 (нет доступа). Но хотя бы не мигает черное окно консоли.
146 NorthWind
 
20.11.20
08:43
(144) Когда в бейсике делается вызов процедуры (Sub) - скобки не нужны.
True не надо ни на что менять, этот литерал в VBS допустим.
Кавычки ставятся в соответствии с тем, что вы записываете код в строку 1С, внутри которой одинарные кавычки записываются как двойные.
Чтобы у вас Function возвращала значение, перед строкой End Function надо написать строку возврата значения, например |Ping = 1
И тогда будет возвращаться единица.
147 Mikhail Volkov
 
20.11.20
09:04
(146) Мне надо, чтобы Function возвращала ответ команды: ping.exe -n 1 ИмяКомпьютера. Как правильно писать?
148 NorthWind
 
20.11.20
09:19
(147) Бери мочало, начинай сначала... Чтобы возвращать стандартный вывод команды Ping, вам нужно использовать не Run, а Exec, и далее делать возврат свойства .StdOut
149 Mikhail Volkov
 
20.11.20
09:51
(148) И тут начнется мигание черного окна консоли!? Не тот вариант.
Остается только в СтрокаКоманды формировать батник (cmd-файл), а затем скриптом запускать его, и получать его ответ СтрокаДляРазбора. Так?
150 NorthWind
 
20.11.20
10:15
(149) а какая разница - батник вы будете запускать или экзешник? Суть-то одна и та же - это консоль, есть консольное окно - считать вывод получается, нет окна - не получается.
151 Mikhail Volkov
 
20.11.20
10:37
(150) А как же (39) > Можно убрать, если обернуть в VBS скрипт. То есть схема такая: через WScript.Shell запускаешь VBS скрипт, в нем запускаешь cmd и ставишь признак скрыть окно, в cmd запускаешь chcp + ping.
152 Mikhail Volkov
 
20.11.20
10:46
+ Единственное что меня интересует: можно ли сперва сформировать текст cmd, но не писать его на диск. А затем (39)?
153 NorthWind
 
20.11.20
10:57
(151) ну если только так еще попробовать... Попробуйте, если есть время и желание.
(152) cmd на диск не писать нельзя. Не запишете на диск - нечего будет и выполнять.
Покомандно содержимое cmd без записи на диск запустить можно, я это сделал в (112). Но такой вариант не дает эффекта, окно все равно появляется.
154 NorthWind
 
20.11.20
11:02
155 NorthWind
 
20.11.20
11:04
там довольно кривой перевод с английского, но вообще статья дельная
156 Mikhail Volkov
 
20.11.20
11:33
(154) Скрыть окно строки при использовании Exec () - это возможно или только предположение? - не мой уровень, не дорос еще...
157 NorthWind
 
20.11.20
13:07
весь вопрос в нужности. Для данной конкретной задачи нет смысла этим заниматься, вообще никакого, потому что решение на WMI закрывает все текущие вопросы.
158 Mikhail Volkov
 
20.11.20
13:41
(157) Да, сейчас в рабочей базе работает через WMI. VBS-скрипты взялся смотреть лишь для их изучения. Но неудачный пример выбрал с командой Ping. Она всегда будет сопровождаться черным окном консоли, вопреки объяснениям (39).
Что-то УдавВПопугаях сюда не заглядывает, сперва он активно предлагал свой метод (31), но в нем не было получения IP-адреса...
Пока всем откликнувшимся спс. Если когда продолжу, то новую тему открою.
159 mistеr
 
20.11.20
14:08
(158) У меня (39) работало на ура без окна. Правда, не из 1С запускалось, а из Планировщика.
Просто нет времени вникать в твой случай, но метод рабочий.
160 Mikhail Volkov
 
20.11.20
16:50
(159) Как понял из (150) особенность команды Ping в том, что она ответ дает в окно консоли. Из этой строка выделяем IP-адрес. Поэтому, если нужно выделить IP-адрес, то без окна консоли не обойтись.
161 Сияющий в темноте
 
22.11.20
19:54
показывать и не показывать окно консоли это не тоже самое,что создавать его или нет.
162 Mikhail Volkov
 
23.11.20
13:52
(161) Значит возможно? А как? Чего в (142) не хватает, как правильно?
163 NorthWind
 
23.11.20
14:08
(162) дык это не на тему сделать, это на тему высказать умную мысль %)
Насчет окна консоли это все понятно, но есть маленькая проблема - это не С/С++, где вы можете рулить всеми нюансами создания процесса.
И даже не WMI, потому что вы не захотите разбираться, как работать с процессами на WMI.
Это стандартные средства VBS.
Там можно только то, что можно. Средства все описаны, в частности, в статье (154).
Я уже говорил - сделать скорее всего можно, но для этого придется встать на ушки. Оно никому не надо, потому что денег за это все равно никто не заплатит, а посидеть придется.