PDA

Показать полную графическую версию : Проверка запущенной программы


John87
03-04-2023, 09:34
ДД, хотел сделать простую программку, но что то не то я пишу видимо..
ну на примере блокнота допустим


#проверка запущенной проги

$chek = Get-Process | where {$_.name -match "notepad"}

if($chek -eq "notepad")
{
"notepad ok"
}
else
{
"notepad not ok"
}
но программа постоянно выдает not ok, хотя процесс висит..
что не то делаю?

NickM
03-04-2023, 09:54
В сети такой пример гуглится:
if ( -not (get-process | where {$_.ProcessName -eq 'notepad'}))
{
'not run. Start Running'
Start-Process -FilePath 'c:\windows\notepad.exe'

}
else
{'Arlready exist'}

DJ Mogarych
03-04-2023, 11:03
Get-Process | where {$_.name -match "notepad"}
Лучше сразу проверять нужный процесс, чем получать их все и потом выбирать нужный.


$procName = "notepad"

if (get-process $procName -ErrorAction SilentlyContinue) {
"$procName is OK"
}
else {
"$procName is not OK"
}

YuS_2
03-04-2023, 11:07
что не то делаю? »
if($chek -eq "notepad") »
Лего же посмотреть, что записано в переменной $chek... просто в консоли наберите имя переменной.
В условном блоке Вы сравниваете объект со строкой... что, естественно, приводит к отрицательному результату...
сравнивать надо так:
if ($chek.processname -eq "notepad"){...

John87
03-04-2023, 12:08
ладно, теперь чуть усложним задачу..

совершенно не могу найти смысл убирать goto из ps.. как теперь вернуться на исходную и начать все снова?
#проверка запущенной проги

$procName = "notepad"

if(get-process $procName -Erroraction silentlycontinue){
"notepad ok"
Start-sleep -seconds 10
goto start
}
else
{
"notepad starting"
start-process C:\Windows\System32\notepad.exe
Start-sleep -seconds 10
goto start
}

NickM
03-04-2023, 12:26
совершенно не могу найти смысл убирать goto из ps.. как теперь вернуться на исходную и начать все снова? »
Например, тот же:
while

John87
03-04-2023, 12:58
while »
что то мне думается это не совсем то..

мне нужно в этой конструкции
if(get-process $procName -Erroraction silentlycontinue){
Start-sleep -seconds 600
goto start
}
else
{
start-process C:\Windows\System32\notepad.exe
Start-sleep -seconds 600
goto start
}

иначе сказать, скрипт должен работать 24/7 и мониторить раз в 10 минут что приложение запущено 24/7..
если запущено - ждем еще 10 мин, если нет - запустить и ждать 10 мин.. и так пока не остановишь..

DJ Mogarych
03-04-2023, 13:23
Это делается через планировщик задач, а не через цикл в скрипте.

Fors1k
03-04-2023, 14:01
Зачем ожидание в 10 минут, если приложение должно быть запущено 24/7?

YuS_2
03-04-2023, 15:29
что то мне думается это не совсем то.. »
то-то, задаем условия и запускаем цикл...
GOTO - самый дурацкий оператор в программировании... потому он мало где присутствует.

иначе сказать, скрипт должен работать 24/7 и мониторить раз в 10 минут что приложение запущено 24/7..
если запущено - ждем еще 10 мин, если нет - запустить и ждать 10 мин.. и так пока не остановишь.. »
Это делается подпиской на события... закрылся процесс - запускаем и т.д.
примерно так (http://forum.oszone.net/post-2960100.html#post2960100)




© OSzone.net 2001-2012