Форум программистов, компьютерный форум, киберфорум
VBScript/JScript/WSH/WMI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.83/29: Рейтинг темы: голосов - 29, средняя оценка - 4.83
0 / 0 / 0
Регистрация: 20.12.2018
Сообщений: 44

Перезапуск службы при достижении 80% загрузки ЦП

11.02.2023, 15:12. Показов 6811. Ответов 87

Студворк — интернет-сервис помощи студентам
Всем добрый день. Может, у кого есть готовый скрипт на PS или VBS, который бы перестартовывал определённую службу при загрузке процессора в 80%, например?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
11.02.2023, 15:12
Ответы с готовыми решениями:

Перезапуск службы при наличии файла в папке
Добрый день уважаемые форумчане. Появилась необходимость автоматизировать один из процессов. А в частности перезапуск одной очень не...

Скрипт убивающий процесс при достижении порога загрузки
Здравствуйте! Сделал вот такую штуку: $sleepseconds = 1 $numcores = 4 while($true) { $cpu1 = (Get-Process -Name...

Скрипт завершения процесса при достижении порога загрузки процессора
Здравствуйте! Помогите накидать скрипт, который завершает процесс по имени, при достижении определенного порога загрузки процессора. ...

87
29 / 22 / 7
Регистрация: 19.09.2018
Сообщений: 196
23.02.2023, 14:39
Студворк — интернет-сервис помощи студентам
Вы просите скрипт на PS или VBS, моё решение на PS было перемещено в тему PS
1
6962 / 2857 / 1099
Регистрация: 06.06.2017
Сообщений: 9,694
23.02.2023, 14:51
Vovsla, вы к кому обращаетесь? ТС и так отметил там ваш пост как решение (хоть это и не так, т. к. запрошен мониторинг). Что вам тут ещё надо?
0
29 / 22 / 7
Регистрация: 19.09.2018
Сообщений: 196
23.02.2023, 14:53
FlasherX, не обратил внимания, что мой ответ был замечен ТС
0
0 / 0 / 0
Регистрация: 20.12.2018
Сообщений: 44
23.02.2023, 15:02  [ТС]
Цитата Сообщение от FlasherX Посмотреть сообщение
(хоть это и не так, т. к. запрошен мониторинг)
Я просто пока не понял, как это запускать, все жизнь на линуксе сидел.
Просто та ветка мне не очень нужна. Мне проще на vbs-bat.
0
0 / 0 / 0
Регистрация: 20.12.2018
Сообщений: 44
23.02.2023, 20:27  [ТС]
Цитата Сообщение от FlasherX Посмотреть сообщение
опробуем множить:
Чот все равно не работает.
Миниатюры
Перезапуск службы при достижении 80% загрузки ЦП  
0
6962 / 2857 / 1099
Регистрация: 06.06.2017
Сообщений: 9,694
23.02.2023, 21:21
А если с повышением запускать?
0
0 / 0 / 0
Регистрация: 20.12.2018
Сообщений: 44
23.02.2023, 21:26  [ТС]
Цитата Сообщение от FlasherX Посмотреть сообщение
А если с повышением запускать?
Так уже.
Миниатюры
Перезапуск службы при достижении 80% загрузки ЦП  
0
6962 / 2857 / 1099
Регистрация: 06.06.2017
Сообщений: 9,694
24.02.2023, 15:18
А Process.exe лежит в D:\1 ?
0
0 / 0 / 0
Регистрация: 20.12.2018
Сообщений: 44
24.02.2023, 15:19  [ТС]
Да.
0
6962 / 2857 / 1099
Регистрация: 06.06.2017
Сообщений: 9,694
24.02.2023, 18:44
process -k aida_bench64.dll не завершает процесс?
Если нет, то меняем в коде process -k на taskkill/f /pid.

А не устроит, случаем, вариант сопоставления общей нагрузки с именем процесса?
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
Const Seconds = 4, Percent = 20, Process = "wmiprvse.exe"
Set oWSH = CreateObject("WScript.Shell")
Set oWMI = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")
Set SINK = WSH.CreateObject("WbemScripting.SWbemSink", "SINK_")
oWMI.ExecNotificationQueryAsync SINK, "SELECT * FROM __InstanceModificationEvent " &_
"WITHIN " & Seconds & " WHERE TargetInstance ISA 'Win32_PerfFormattedData_PerfOS_" &_
"Processor' AND TargetInstance.PercentProcessorTime >=" & Percent
Do: WSH.Sleep 8^10 :Loop
 
Sub SINK_OnObjectReady(x, o)
   oWSH.Run "taskkill /f /im " & Process, 0
End Sub
0
29 / 22 / 7
Регистрация: 19.09.2018
Сообщений: 196
25.02.2023, 18:43
Цитата Сообщение от gluk6 Посмотреть сообщение
Я просто пока не понял, как это запускать, все жизнь на линуксе сидел.
Просто та ветка мне не очень нужна. Мне проще на vbs-bat.
Мне кажется, что на PS скрипт будет гораздо проще.
Есть множество способов выполнить код PS:
1. открыть консоль PS и выполнить код там
2. настроить Execution Policy для запуска скриптов
3. запустить PS скрипт с помощью powershell -command "Start-Process powershell.exe -ArgumentList '-ExecutionPolicy Unrestricted -Command "Script.ps1"'

Простейший способ запустить PS скрипт с правами Админа без настройки Execution Policy - использовать нижеуказанный JS скрипт.
Скрипт ищет рядом с собой скрипты PS, начало названия которых совпадают с названием JS скрипта и запускает последний найденный PS скрипт
JavaScript
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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
WshShell = WScript.CreateObject("WScript.Shell")
FSO = WScript.CreateObject("Scripting.FileSystemObject")
WshShell.CurrentDirectory = FSO.GetParentFolderName(WScript.ScriptFullName)
 
 
 
PSPath = undefined
for (i=0; i <= WScript.Arguments.Length - 1; i++) {
    if (WScript.Arguments(i).match("^/PSPath:")) {PSPath = WScript.Arguments(i).replace("/PSPath:", "")}
}
 
PSPath = PSPath || PSSearch()
 
if (PSPath.match(/\[|\]/g)) {
    WshShell.Popup("Script path must not contain square brackets\r\nThe script will complete", 0, WScript.ScriptName, 4096)
    WScript.Quit()
}
 
try {WshShell.RegRead("HKEY_USERS\\S-1-5-19\\Environment\\TEMP")} catch (e) {
    WScript.CreateObject("Shell.Application").ShellExecute(WScript.FullName, '"' + WScript.ScriptFullName + '" /elevate "/PSPath:' + PSPath + '"', "", "runas", 0)
    WScript.Quit()
}
 
WshShell.Run("powershell -command \"Start-Process powershell.exe -ArgumentList '-ExecutionPolicy Unrestricted -Command " + PSPath.replace(/([\s(){}])/g, "`$1") + "'\"")
 
 
 
WScript.Quit()
 
 
 
//~ ------------------------------------------------------------------- PSSearch -------------------------------------------------------------------
function PSSearch() {
    var ScriptName, PSName
 
    ScriptName = WScript.ScriptName.replace("." + FSO.GetExtensionName(WScript.ScriptName), "")
 
    while (!PSName) {
        Result = WshShell.Exec('%COMSPEC% /c dir "' + FSO.BuildPath(WshShell.CurrentDirectory, ScriptName) + '*.ps1" /b /o:n')
        while (!Result.StdOut.AtEndOfStream) {PSName = Result.StdOut.ReadLine()}
        if (!PSName) {
            if (WshShell.Popup("PS1 file not found by mask\r\n\r\n" + '"' + FSO.BuildPath(WshShell.CurrentDirectory, ScriptName) + '*.ps1"\r\n\r\nDo you want to repeat search?',
                    0, WScript.ScriptName, 4096 + 5) == 2) {
                WScript.Quit()
            }
        }
    }
    return FSO.BuildPath(WshShell.CurrentDirectory, PSName)
}
Если нужно постоянное отслеживание и перезапуск, можно так
PowerShell
1
2
3
4
5
6
7
8
9
While(1) {
    $ID = (Get-Process | Where {$_.Name -eq 'notepad' -and $_.CPU -gt 0}).Id
    if ($ID) {
        Stop-Process -Id $ID -Force
        Wait-Process -Id $ID
        notepad
    }
    Start-Sleep -S 1
}
0
6962 / 2857 / 1099
Регистрация: 06.06.2017
Сообщений: 9,694
26.02.2023, 00:12
Цитата Сообщение от Vovsla Посмотреть сообщение
Простейший способ запустить PS скрипт с правами Админа без настройки Execution Policy - использовать нижеуказанный JS скрипт.
Скрипт ищет рядом с собой скрипты PS, начало названия которых совпадают с названием JS скрипта и запускает последний найденный PS скрипт
Без обид, но сверхизбыточный код на простейший никак не тянет. Зачем эта куча лишних манипуляций, не совсем понятно.
И почему "без настройки", если в 24 строка говорит об обратном?
0
29 / 22 / 7
Регистрация: 19.09.2018
Сообщений: 196
26.02.2023, 12:26
FlasherX, простейший способ, а не код, простота в удобстве использования. С помощью данного JS скрипта можно запустить PS скрипт с любым именем, достаточно чтобы JS и PS скрипты были с одним именем.

Цитата Сообщение от FlasherX Посмотреть сообщение
И почему "без настройки", если в 24 строка говорит об обратном?
Настройка "Execution Policy" заключается в изменениях параметров системы. В строке 24 параметры системы не меняются, политика "Unrestricted" используется только для запуска конкретного скрипта, при этом настройки "Execution Policy" остаются без изменений
0
6962 / 2857 / 1099
Регистрация: 06.06.2017
Сообщений: 9,694
26.02.2023, 19:10
Цитата Сообщение от Vovsla Посмотреть сообщение
простейший способ, а не код
Из слов "использовать нижеуказанный JS скрипт." можно понять, что остальные способы менее просты, что есть неправда. Проще сделать гибрид, и куда более короткий.

Цитата Сообщение от Vovsla Посмотреть сообщение
В строке 24 параметры системы не меняются
Применение настройки (установки) политики для текущей сессии никуда от этого не девается.
0
1381 / 837 / 89
Регистрация: 08.02.2017
Сообщений: 3,490
Записей в блоге: 1
11.03.2023, 16:03
Цитата Сообщение от FlasherX Посмотреть сообщение
WMI нельзя применять для перезапуска себя же (winmgmt)
Пробемма, наверное в том, что отваливается oWMI при перезапуске и нужно ее реинициализировать после перезапуска..
0
6962 / 2857 / 1099
Регистрация: 06.06.2017
Сообщений: 9,694
12.03.2023, 05:57
testuser2, нет, это не поможет. Там комплексная проблема.
0
1381 / 837 / 89
Регистрация: 08.02.2017
Сообщений: 3,490
Записей в блоге: 1
12.03.2023, 13:52
Немного изменил запрос исходя из информации. Конечно могут быть какие-то проблеммы с неправильным определением нагруженности или подвисанием самого WMI, но может быть как-то ближе к истине.. ) Тестировал на Файрфоксе, не мог ни как заставить, чтобы убивались отдельные вкладки, мочит весь Фиерокс.
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
Const Seconds = "4", Percent = "20", ProcName = "wmiprvse"
Set oWSH = CreateObject("WScript.Shell")
' Set oWMI = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")
Set SINK = WSH.CreateObject("WbemScripting.SWbemSink", "SINK_")
call WMIinit()
 
Do: WSH.Sleep 8^10 :Loop
 
sub WMIinit()   
    With GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")
        .ExecNotificationQueryAsync SINK, "SELECT * FROM __InstanceModificationEvent " & _
        "WITHIN " & Seconds & " WHERE TargetInstance ISA 'Win32_PerfFormattedData_PerfProc_Process' " & _
        "AND TargetInstance.Name LIKE '" & ProcName & "%' " & _
        "AND TargetInstance.PercentProcessorTime >= " & Percent
    end with
end sub
 
Sub SINK_OnObjectReady(x, o)
   set oTI = x.TargetInstance
   oWSH.Run "taskkill /f /pid " & oTI.IDProcess, 0
   ' oTI.GetObjectText_ 'полная информация о процессе
   WScript.Sleep 1000
   WMIinit
End Sub
Интересное свойство объекта "TargetInstance" .GetObjectText_ выдает такую информацию по процессу.
Code
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
instance of Win32_PerfFormattedData_PerfProc_Process
{
  CreatingProcessID = 7876;
  ElapsedTime = "1550";
  HandleCount = 1601;
  IDProcess = 9940;
  IODataBytesPersec = "41052093";
  IODataOperationsPersec = "2688";
  IOOtherBytesPersec = "238";
  IOOtherOperationsPersec = "7";
  IOReadBytesPersec = "40143663";
  IOReadOperationsPersec = "1693";
  IOWriteBytesPersec = "908429";
  IOWriteOperationsPersec = "994";
  Name = "firefox#4";
  PageFaultsPersec = 748;
  PageFileBytes = "241373184";
  PageFileBytesPeak = "335044608";
  PercentPrivilegedTime = "11";
  PercentProcessorTime = "27";
  PercentUserTime = "16";
  PoolNonpagedBytes = 154192;
  PoolPagedBytes = 1230080;
  PriorityBase = 8;
  PrivateBytes = "241373184";
  ThreadCount = 74;
  VirtualBytes = "2202267549696";
  VirtualBytesPeak = "2218881396736";
  WorkingSet = "328122368";
  WorkingSetPeak = "404135936";
  WorkingSetPrivate = "207376384";
};
0
6962 / 2857 / 1099
Регистрация: 06.06.2017
Сообщений: 9,694
12.03.2023, 15:21
Цитата Сообщение от testuser2 Посмотреть сообщение
Немного изменил запрос исходя из информации.
По ссылке приведена формула. PercentProcessorTime нельзя сравнивать с ЦП процесса.
И зачем тут отдельная процедура WMIinit, если убивается процесс, а не служба?
0
1381 / 837 / 89
Регистрация: 08.02.2017
Сообщений: 3,490
Записей в блоге: 1
12.03.2023, 16:15
Цитата Сообщение от FlasherX Посмотреть сообщение
PercentProcessorTime нельзя сравнивать с ЦП процесса.
Фразу
Цитата Сообщение от gluk6 Посмотреть сообщение
службу при загрузке процессора в 80%, например?
можно истолковать по разному, тем более что там есть слово "например".
Цитата Сообщение от FlasherX Посмотреть сообщение
И зачем тут отдельная процедура WMIinit
На всякий, для реинициализации синка, может быть это и не надо. Вообще речь видимо о чем-то вот том
Цитата Сообщение от gluk6 Посмотреть сообщение
Все равно мало показывает, а мне надо, чтобы отлавливался вот этот параметр.
0
6962 / 2857 / 1099
Регистрация: 06.06.2017
Сообщений: 9,694
12.03.2023, 22:08
Цитата Сообщение от testuser2 Посмотреть сообщение
можно истолковать по разному
Нельзя. Тем более при наличии указанного скриншота.
Цитата Сообщение от testuser2 Посмотреть сообщение
На всякий, для реинициализации синка, может быть это и не надо.
Вопрос без условия цитировать не надо, ибо в нём вся суть. Вот именно, что не надо.
Цитата Сообщение от testuser2 Посмотреть сообщение
Вообще речь видимо о чем-то вот том
К реинициализации это вообще никак не относится.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
12.03.2023, 22:08
Помогаю со студенческими работами здесь

Перезапуск службы
В общем у меня есть свои собственные службы, например: Service1, Service2, Service3 ... ServiceN. Данные службы связаны друг с другом и...

Перезапуск службы
У меня служба, которая запускается и которая не должна останавливаться. Глобальный BroadcastReceiver получает сообщения и запускает...

Перезапуск службы
Добрый день. Хочу осуществить перезапуск службы через bat-файл. Написал пока так sc stop %1 &amp; sc start %1 %2 В...

Перезапуск службы
Добрый день, на сервере имеется служба CsmServic, которую надо перезапускать при появлении в логах текста &quot;Access violation at...

Перезапуск службы
в определённый момент для продолжения работы программы требуется перезапуск службы я это делаю в командной строке net stop...


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

Или воспользуйтесь поиском по форуму:
60
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru