@Nordman99

Как из VB выполнять команды в командной строке и получить результат их выполнения?

Всех приветствую! Начал изучать VBS в целях автоматизации различных процессов на компьютере
В данный момент стоит такая задача - пропинговать некий IP в инете - если пингуется значит инет работает
Потом - пропинговать некое доменное имя в инете - если пингуется значит DNS норм работает
Уже какие только варианты не пробовал, но в все они сводятся к созданию обьекта WScript.CreateObject("WScript.Shell")
и использованию его методов Exec или Run, других способов в VBSе невижу

Пробовал:
Set WshShell = CreateObject("WScript.Shell")
set WshExec = WshShell.Exec ( "cmd /k ping 8.8.8.8") - Этот вариант никому нерекомендую пробовать - начинает бесконечно открываться и закрываться окно CMD без всяких результатов, спасает только перезагрузка

Set WshShell = CreateObject("WScript.Shell")
set WshExec = WshShell.Exec ( "cmd /с ping 8.8.8.8") - Уже лучше - окно открывается только один раз - но опять же безрезультатно - в нем ничего не выполняется и никаких результатов не выдается

Set WshShell = CreateObject("WScript.Shell")
WshShell.run ( "cmd /c ping 8.8.8.8", 1 ,true) - открывается окно CMD в него подается команда ping 8.8.8.8 но она не выполняется вслед за ней
опять появляется приглашение для ввода C:\> в него опять подается команда ping 8.8.8.8 и все повторяется

5e23fdc6265d5597811741.jpeg

Причем что если выполнить даже просто открытие notepad
Set WshShell = CreateObject("WScript.Shell")
set WshExec = WshShell.Exec ( "notepad")
или
Set WshShell = CreateObject("WScript.Shell")
WshShell.run ( "notepad", 1 ,true)

То блокнот открывается без проблем

Так как выполнить мою задачу в VBSе - подскажите пожалуйста
  • Вопрос задан
  • 67 просмотров
Решения вопроса 1
CityCat4
@CityCat4
Если я чешу в затылке - не беда!
Окей, гугл.
Что такое WMI.

Ей-Богу, это стоит изучить. Это вещь, на которой можно делать все.

Вот например, как пинговать:
' Check on box availability 
' Input:        strComputer                     -       checking box name
Function boxAvailable(strComputer)
  
  Dim objPing, objStatus
  
  Set objPing = GetObject("winmgmts:{impersonationLevel=impersonate}")._
        ExecQuery("select * from Win32_PingStatus where address = '" & strComputer & "'")
        
  For Each objStatus in objPing
    If (IsNull(objStatus.StatusCode) Or objStatus.StatusCode <> 0) Then
      boxAvailable = False
     Else
       boxAvailable = True
    End If
  Next
  
End Function
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
04 июл. 2020, в 18:19
3500 руб./за проект
04 июл. 2020, в 17:51
20000 руб./за проект
04 июл. 2020, в 17:25
2000 руб./за проект