Форум программистов, компьютерный форум, киберфорум
VBScript/JScript/WSH/WMI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.63/8: Рейтинг темы: голосов - 8, средняя оценка - 4.63
12 / 12 / 2
Регистрация: 17.11.2013
Сообщений: 532
VBS

Закрытие процессов при определённых условиях

07.08.2022, 23:55. Показов 1713. Ответов 15
Метки vbs (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет.
Кто может помочь создать VBS, который будет проверять процесс "vmware.exe", если процесс запущен, то ничего не делать.
Если процесс не запущен, то выключать адаптеры VMware, после останавливать службы, после изменять тип запуска служб.

Ниже пример более технического плана:
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
if not_running process "vmware.exe" {
 
    pause 1000 ms
 
    CreateObject("WScript.Shell").Run """C:\Program Files\System Optimizator\devcon.exe"" disable ""*VMnetAdapter1""", 0
    CreateObject("WScript.Shell").Run """C:\Program Files\System Optimizator\devcon.exe"" disable ""*VMnetAdapter8""", 0
    
    stop services (остановить службы по порядку):
    "VMUSBArbService"
    "VMware NAT Service"
    "VMnetDHCP"
    "VMAuthdService"
    
    start_mode services (изменить тип запуска служб по порядку):
    "VMUSBArbService:Disabled"
    "VMware NAT Service:Disabled"
    "VMnetDHCP:Disabled"
    "VMAuthdService:Disabled"
}
 
else => null
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
07.08.2022, 23:55
Ответы с готовыми решениями:

Запрет на закрытие программы при определённых условиях
Всем привет. Дано тестирование (на картинке). Что надо написать в коде, чтобы человек, проходящий тестирование,ответил на ВСЕ 7...

Вывод ошибки при определенных условиях
Подскажите при каких обстоятельствах эти ошибки отображаются, где это в коде прописаны эти проверки, я так и не нашел ссылка на...

Транспонировать матрицу при определенных условиях
Помогите , пожалуйста , решить задачу. Дана действительная матрица размерности . Если среднее арифметическое элементов стоящих над...

15
6986 / 2876 / 1106
Регистрация: 06.06.2017
Сообщений: 9,771
08.08.2022, 01:54
Vasek2, т. е. без мониторинга?
0
12 / 12 / 2
Регистрация: 17.11.2013
Сообщений: 532
09.08.2022, 14:20  [ТС]
FlasherX, мониторинг будет через планировщик заданий раз в 30 мин.
0
6986 / 2876 / 1106
Регистрация: 06.06.2017
Сообщений: 9,771
09.08.2022, 16:07
Лучший ответ Сообщение было отмечено Vasek2 как решение

Решение

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
Set oWSH = CreateObject("WScript.Shell")
 
If oWSH.Run("%ComSpec% /q/c tasklist /fi ""imagename eq vmware.exe"" /nh /fo csv|>nul find "":""", 0, 1) Then
 
   For Each i in Array(1,8)
      oWSH.Run """%ProgramFiles%\System Optimizator\devcon.exe"" disable *VMnetAdapter" & i, 0
   Next
 
   Set oRex = New RegExp
   Set oWMI = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")
   Deskr = oWMI.Get("Win32_Service",&H20000).Methods_("StopService").Qualifiers_("Description").Value
 
   For Each Serv in Array("VMUSBArbService","VMware NAT Service","VMnetDHCP","VMAuthdService")
      With oWMI.Get("Win32_Service.Name='" & Serv & "'")
         .ChangeStartMode "Disable": Er = .StopService
      End With
      If Er Then
         oRex.Pattern = vbLf & Er & " - ([^\n]+)"
         Errs = Errs & vbLf & Serv & ": " & oRex.Execute(Deskr)(0).Submatches(0)
      End If
   Next
 
   Set oWMI = Nothing: Set oRex = Nothing
   If Len(Errs) Then MsgBox Mid(Errs, 2), 262192, " Service disable errors"
 
End If
 
Set oWSH = Nothing
0
12 / 12 / 2
Регистрация: 17.11.2013
Сообщений: 532
10.08.2022, 21:49  [ТС]
FlasherX

Можно здесь вместо массива сделать построчно отключение адаптеров? Адаптеры могут менять и т.д. и т.п.
Цитата Сообщение от FlasherX Посмотреть сообщение
For Each i in Array(1,8)
oWSH.Run """%ProgramFiles%\System Optimizator\devcon.exe"" disable *VMnetAdapter" & i, 0
Next
0
6986 / 2876 / 1106
Регистрация: 06.06.2017
Сообщений: 9,771
10.08.2022, 22:12
Vasek2
Visual Basic
1
2
3
For Each i in Split("VMnetAdapter1 VMnetAdapter8")
   oWSH.Run """%ProgramFiles%\System Optimizator\devcon.exe"" disable *" & i, 0
Next
В соседнем треде реакция будет?
1
12 / 12 / 2
Регистрация: 17.11.2013
Сообщений: 532
11.08.2022, 01:07  [ТС]
FlasherX, ща потестим

Добавлено через 12 минут
FlasherX, сейчас если запущена VMware и запускаю скрипт, то отключаются адаптеры VMware. Надо наоборот, если не запущена VMware, то выключать адаптеры и переводить службы в стоп.
0
6986 / 2876 / 1106
Регистрация: 06.06.2017
Сообщений: 9,771
11.08.2022, 01:38
Лучший ответ Сообщение было отмечено Vasek2 как решение

Решение

Vasek2, а, ну да. Двоеточие же есть при отсутствии. Не в ту сторону смотрел.

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
Set oWSH = CreateObject("WScript.Shell")
 
If oWSH.Run("%ComSpec% /q/c tasklist /fi ""imagename eq vmware.exe"" /nh /fo csv|>nul find "":""", 0, 1) = 0 Then
 
   For Each i in Split("VMnetAdapter1 VMnetAdapter8")
      oWSH.Run """%ProgramFiles%\System Optimizator\devcon.exe"" disable *" & i, 0
   Next
 
   Set oRex = New RegExp
   Set oWMI = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")
   Deskr = oWMI.Get("Win32_Service",&H20000).Methods_("StopService").Qualifiers_("Description").Value
 
   For Each Serv in Array("VMUSBArbService","VMware NAT Service","VMnetDHCP","VMAuthdService")
      With oWMI.Get("Win32_Service.Name='" & Serv & "'")
         .ChangeStartMode "Disable": Er = .StopService
      End With
      If Er Then
         oRex.Pattern = vbLf & Er & " - ([^\n]+)"
         Errs = Errs & vbLf & Serv & ": " & oRex.Execute(Deskr)(0).Submatches(0)
      End If
   Next
 
   Set oWMI = Nothing: Set oRex = Nothing
   If Len(Errs) Then MsgBox Mid(Errs, 2), 262192, " Service disable errors"
 
End If
 
Set oWSH = Nothing
1
12 / 12 / 2
Регистрация: 17.11.2013
Сообщений: 532
11.08.2022, 15:04  [ТС]
FlasherX, да, работает как надо. Но т.к. задача в планировщике, пришлось убрать сообщение об ошибках, иначе сыпались бы раз в полчаса на экран

Себе всё-таки сделал без массивов, оставлю здесь, может кому пригодится:

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
Set oWSH = CreateObject("WScript.Shell")
 
If oWSH.Run("%ComSpec% /q/c tasklist /fi ""imagename eq vmware.exe"" /nh /fo csv|>nul find "":""", 0, 1) = 0 Then
    
    ' 
    ' Modules
    ' 
    CreateObject("WScript.Shell").Run """C:\Program Files\System Optimizator\devcon.exe"" disable ""*VMnetAdapter1""", 0
    CreateObject("WScript.Shell").Run """C:\Program Files\System Optimizator\devcon.exe"" disable ""*VMnetAdapter8""", 0
    
    ' 
    ' Services
    ' 
    Set wmi = GetObject("winmgmts://./root/cimv2")
    
    Set svc1 = wmi.Get("Win32_Service.Name='VMwareHostd'")
    Set svc2 = wmi.Get("Win32_Service.Name='VMUSBArbService'")
    Set svc3 = wmi.Get("Win32_Service.Name='VMware NAT Service'")
    Set svc4 = wmi.Get("Win32_Service.Name='VMnetDHCP'")
    Set svc5 = wmi.Get("Win32_Service.Name='VMAuthdService'")
    svc1.StopService
    svc1.ChangeStartMode("Disabled")
    svc2.StopService
    svc2.ChangeStartMode("Disabled")
    svc3.StopService
    svc3.ChangeStartMode("Disabled")
    svc4.StopService
    svc4.ChangeStartMode("Disabled")
    svc5.StopService
    svc5.ChangeStartMode("Disabled")
    
End If
 
Set oWSH = Nothing
WScript.Quit
Вам огромное спасибо за труд!
Пригодилась вот эта строчечка:
Visual Basic
1
If oWSH.Run("%ComSpec% /q/c tasklist /fi ""imagename eq vmware.exe"" /nh /fo csv|>nul find "":""", 0, 1) = 0 Then
0
6986 / 2876 / 1106
Регистрация: 06.06.2017
Сообщений: 9,771
11.08.2022, 15:21
Цитата Сообщение от Vasek2 Посмотреть сообщение
пришлось убрать сообщение об ошибках, иначе сыпались бы раз в полчаса на экран
С чего бы? Убрав, не будет ясно, что не отключилось. Есть смысл в неполноценном отключении?

Цитата Сообщение от Vasek2 Посмотреть сообщение
Себе всё-таки сделал без массивов
Зачем плодить аж пять лишних объектов, мусоря в память?
И зачем опять плодить сущности в 8 и 9 строках, да ещё и дважды создавая уже созданный объект?

Без 35 строки боимся, что скрипт сам после отработки не выйдет?
0
12 / 12 / 2
Регистрация: 17.11.2013
Сообщений: 532
11.08.2022, 16:19  [ТС]
Цитата Сообщение от FlasherX Посмотреть сообщение
С чего бы? Убрав, не будет ясно, что не отключилось. Есть смысл в неполноценном отключении?
Эти службы отключаются нормально, если не запущен процесс vmware.exe.

Цитата Сообщение от FlasherX Посмотреть сообщение
Зачем плодить аж пять лишних объектов, мусоря в память?
И зачем опять плодить сущности в 8 и 9 строках, да ещё и дважды создавая уже созданный объект?
Визуально удобнее

Цитата Сообщение от FlasherX Посмотреть сообщение
Без 35 строки боимся, что скрипт сам после отработки не выйдет?
Привычка со старых скриптов.
Кстати, ранее мне один парниша писал скрипты и всегда ставил WSQuit, может не просто так?
0
6986 / 2876 / 1106
Регистрация: 06.06.2017
Сообщений: 9,771
11.08.2022, 23:52
Цитата Сообщение от Vasek2 Посмотреть сообщение
Эти службы отключаются нормально
Тогда откуда окну каждые полчаса взяться?
Цитата Сообщение от Vasek2 Посмотреть сообщение
Визуально удобнее
Удобство в чём? В замедлении и нагромождении?
Как это
Visual Basic
1
2
    CreateObject("WScript.Shell").Run """C:\Program Files\System Optimizator\devcon.exe"" disable ""*VMnetAdapter1""", 0
    CreateObject("WScript.Shell").Run """C:\Program Files\System Optimizator\devcon.exe"" disable ""*VMnetAdapter8""", 0
может быть удобней этого?
Visual Basic
1
2
3
    Const DevCon = """%ProgramFiles%\System Optimizator\devcon.exe"""
    oWSH.Run DevCon & " disable *VMnetAdapter1", 0
    oWSH.Run DevCon & " disable *VMnetAdapter8", 0
Цитата Сообщение от Vasek2 Посмотреть сообщение
один парниша писал скрипты и всегда ставил WSQuit, может не просто так?
Советую у него и спросить. Впрочем, адекватного ответа ждать не стоит.
Quit имеет смысл только в случае запуска скрипта из консоли, когда его работу проверяют по коду выхода, который прописан в качестве параметра. А здесь наличие сей строки совершенно бесполезно.
0
12 / 12 / 2
Регистрация: 17.11.2013
Сообщений: 532
13.08.2022, 16:12  [ТС]
Цитата Сообщение от FlasherX Посмотреть сообщение
Тогда откуда окну каждые полчаса взяться?
На ноутбуке VMware запускается в день 0-10 раз для работы. И чтобы вручную не выключать процессы, я придумал такое вот автоматическое решение. Ну а адаптеры - для полноты картины.

Цитата Сообщение от FlasherX Посмотреть сообщение
Удобство в чём? В замедлении и нагромождении?
Визуально, мне удобнее такой вид, т.к. я в VBS дуб (о чём жалею, т.к. я его стал юзать очень уж часто).
Ну а памяти съестся 1 МБ лишний, поэтому для меня не критично.

Цитата Сообщение от FlasherX Посмотреть сообщение
Quit имеет смысл только в случае запуска скрипта из консоли
Ответ понял.
Тогда я лучше буду добавлять Quit, т.к. кто знает, может завтра я буду запускать какой-то скрипт методом bat->cscript *.vbs
0
6986 / 2876 / 1106
Регистрация: 06.06.2017
Сообщений: 9,771
13.08.2022, 16:46
Цитата Сообщение от Vasek2 Посмотреть сообщение
На ноутбуке VMware запускается в день 0-10 раз для работы.
А окно тут при чём?

Цитата Сообщение от Vasek2 Посмотреть сообщение
т.к. я в VBS дуб
Это не объяснение, почему, по крайней мере, надо объявлять то, что объявлено. Тут нет преимущества в восприятии, скорее наоборот.

Цитата Сообщение от Vasek2 Посмотреть сообщение
кто знает, может завтра я буду запускать какой-то скрипт методом bat->cscript *.vbs
Так без кода выхода будет 0 реакции. Нет смысла, повторяю.
0
12 / 12 / 2
Регистрация: 17.11.2013
Сообщений: 532
13.08.2022, 18:27  [ТС]
Цитата Сообщение от FlasherX Посмотреть сообщение
А окно тут при чём?
Очень даже причём.
Скрипт стоит в планировщике на проверке раз в полчаса.
Вот сегодня, допустим, виртуалка не запускалась ни разу, соответственно, службы её выключены.
Т.к. скрипт запускается раз в 30 минут, то каждые 30 минут на экран будет вылетать окно, предупреждающее, что службы не запущены

Цитата Сообщение от FlasherX Посмотреть сообщение
Это не объяснение, почему, по крайней мере, надо объявлять то, что объявлено. Тут нет преимущества в восприятии, скорее наоборот.
Согласен, это не совсем верно так делать, но что поделать, я не понимаю синтаксиса циклов в VBS. Позже глубже рассмотрю код и тогда перенесу циклы и массивы.

Цитата Сообщение от FlasherX Посмотреть сообщение
Так без кода выхода будет 0 реакции. Нет смысла, повторяю.
Кто-то грызёт ногти, кто-то ставит WSQuit
У всех разные привычки.

Добавлено через 14 минут
UPD: тему можно закрывать. FlasherX всё сделал как всегда отлично!
0
6986 / 2876 / 1106
Регистрация: 06.06.2017
Сообщений: 9,771
13.08.2022, 19:27
Цитата Сообщение от Vasek2 Посмотреть сообщение
виртуалка не запускалась ни разу, соответственно, службы её выключены.
Понял. Тогда немного правим:
Visual Basic
15
         .ChangeStartMode "Disable": If .Started Then Er = .StopService Else Er = 0
Цитата Сообщение от Vasek2 Посмотреть сообщение
я не понимаю синтаксиса циклов в VBS.
То, что я сравнивал, циклами не является.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
13.08.2022, 19:27
Помогаю со студенческими работами здесь

Активация кнопки при определенных условиях
всем привет. реализую функцию активации кнопки при определнных условиях. вот фрагмент работающего кода procedure...

Производительность видеокарты, при определенных условиях
У меня вопрос, возьмем например видеокарту, и подключим к ней 2-3 монитора. На одном из этих мониторов, запустим игру, а на другом,...

Остановка сервиса при определенных условиях
Я создал Windows сервис. Требуется, чтобы при возникновении некоторых условий он останавливался и выгружался из памяти. Неплохобы с примером

Смещение блока при определенных условиях
День добрый, помогите скрипт допилить. Есть меню, реализовано списком, все пункты меню имеют свой класс (точнее ссылка, а не сам li), к...

автозамена слоя при определенных условиях
Добрый вечер форумчане есть это <button class="showhide">Toggle</button> <div> <div...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Новые блоги и статьи
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru