Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   Проверка запущенной программы (http://forum.oszone.net/showthread.php?t=353355)

John87 03-04-2023 09:34 3006600

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

Код:

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

$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 3006602

В сети такой пример гуглится:
Код:

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 3006610

Код:

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 3006611

Цитата:

Цитата John87
что не то делаю? »

Цитата:

Цитата John87
if($chek -eq "notepad") »

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

John87 03-04-2023 12:08 3006622

ладно, теперь чуть усложним задачу..

совершенно не могу найти смысл убирать 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 3006623

Цитата:

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

Например, тот же:
Код:

while

John87 03-04-2023 12:58 3006627

Цитата:

Цитата NickM
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 3006631

Это делается через планировщик задач, а не через цикл в скрипте.

Fors1k 03-04-2023 14:01 3006639

Зачем ожидание в 10 минут, если приложение должно быть запущено 24/7?

YuS_2 03-04-2023 15:29 3006647

Цитата:

Цитата John87
что то мне думается это не совсем то.. »

то-то, задаем условия и запускаем цикл...
GOTO - самый дурацкий оператор в программировании... потому он мало где присутствует.

Цитата:

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

Это делается подпиской на события... закрылся процесс - запускаем и т.д.
примерно так


Время: 23:55.

Время: 23:55.
© OSzone.net 2001-