持续检查进程是否 运行

Continuously check if a process is running

我编写了一些代码来检查 Outlook 是否 运行,如果不是,则打开 Outlook。问题是我的工作 PC 往往闲置大约 7% 的使用率,但在脚本为 运行 时会飙升至 30 秒以上。如果它检测到 Outlook 不再处于活动状态,CPU 使用率会在打开 Outlook 时飙升至接近 100%。当脚本为 运行 时,这 ~33% 的增加可能会在我工作时引起问题。 是否有另一种方法可以使用更少的处理能力来完成我的代码的功能?

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

您需要在其中添加一个 Start-Sleep,以防止脚本持续使用 CPU 时间。否则它会不停地循环,确保 Outlook 是 运行。在你的 do-block:

结束时
Start-Sleep -s 60

您可以调整秒数,甚至可以使用您需要的 -m 参数指定毫秒。

另一种解决此问题的方法是 运行在批处理文件(预定)下面

@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 分钟 运行,那么在关闭 Outlook 后的 5 分钟内,它将重新启动。如果您认为 5 分钟太长,请更频繁地安排它。