除非特定进程正在运行,否则网络计算机将关闭

除非特定进程正在运行,否则网络计算机将关闭

我希望创建一个批处理文件来关闭我网络上的一系列计算机。使用 PSTools 中的 psshutdown 或常规关机命令即可轻松实现。

我的问题是,我希望脚本验证某个进程是否正在远程计算机上运行,​​如果正在运行,则不要关闭该计算机。

例如,如果 remotepc001 正在运行 notepad.exe,请不要将其关闭。

有人知道有什么好方法吗?

答案1

您可以使用tasklist(内置)或PsList(PsTools 的一部分)。两者都支持远程计算机。我的示例将tasklist在本地计算机上使用(谁不喜欢内置?),因为这是我目前要测试的全部内容。您可以添加正确的参数来连接到远程计算机;使用 检查可用的参数tasklist /?

tasklist /FI "IMAGENAME eq processname.exe" | find /I "processname.exe"
if ERRORLEVEL 1 goto NotRunning else goto Running

:NotRunning
echo The program is not running.

goto :eof

:Running
echo The program is running.

goto :eof

分解:

tasklist用于列出与指定名称匹配的所有进程。您可以使用通配符 ( *) 进行部分匹配。

find用于检查进程名称是否是输出的一部分tasklist。如果未找到,它将设置(基本上是返回值)为 1(失败),否则为 0(成功)。之所以使用这个,是因为检查错误级别比检查when 中errorlevel的文本输出更容易。tasklistif

然后我们使用goto跳转到正确的块,从而根据进程是否正在运行来分离执行。您也可以只运行语句内的命令ifgoto :eof基本上意味着转到程序末尾(EOF = 文件结尾),即退出。

相关内容