Постоянно проверять, запущен ли процесс - PullRequest
0 голосов
/ 16 января 2020

У меня есть небольшой код, который я написал, чтобы проверить, работает ли Outlook, а если нет, открывает Outlook. Проблема в том, что моя работа P C имеет тенденцию к бездействию около 7% использования, но всплывает до верхних 30-х во время выполнения скрипта. Если он обнаруживает, что Outlook больше не активен, загрузка ЦП может возрасти почти до 100% при открытии Outlook. Это увеличение на ~ 33% во время работы скрипта может вызвать проблемы во время работы. Есть ли другой способ реализовать sh функциональность моего кода при меньших вычислительных мощностях?

do{
    $running = Get-Process outlook -ErrorAction SilentlyContinue
    if (!$running)
    {
        Start-Process outlook
    }
} while (1 -eq 1)

Ответы [ 2 ]

1 голос
/ 16 января 2020

Другим способом решения этой проблемы является запуск ниже пакетного файла (по расписанию)

@echo off

SET outlookpath=C:\Program Files\Microsoft Office 15\root\office15\outlook.exe

for /f "usebackq" %%f in (`tasklist /FI "IMAGENAME eq outlook.exe"`) do set a=%%f
REM echo A:%a%

if not "%a%"=="outlook.exe" start "" "%outlookpath%"

Если вы запланируете запускать его каждые 5 минут, то через 5 минут после закрытия перспективы он снова запустится. Если вы считаете, что 5 минут - это слишком долго, запланируйте это чаще. ?

1 голос
/ 16 января 2020

Вам нужно добавить туда Start-Sleep, чтобы скрипт не использовал процессорное время непрерывно. В противном случае он непрерывно зацикливается без отдыха, обеспечивая работу Outlook. В конце вашего do-block:

Start-Sleep -s 60

Вы можете настроить количество секунд или даже указать вместо них миллисекунды с параметром -m, который вам требуется.

...