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


0

我希望创建一个批处理文件以关闭网络上的计算机列表。使用PSTools中的psshutdown甚至常规的shutdown命令,这都非常容易。

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

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

有人知道这样做的好方法吗?


您可以使用PowerShell远程检查进程(并运行关机)...,也可以使用PsList(PsTools的一部分)。
鲍勃,

您能帮我在IF语句中表达它吗?
Kobi Versano

抱歉,我在打电话。我现在写一个完整的答案。
鲍勃,

Answers:


2

您可以使用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输出的一部分。errorlevel如果找不到,它将(基本上是返回值)设置为1(失败),否则将设置为0(成功)。之所以使用它,是因为检查错误级别比在中tasklist时的文本输出更容易if

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.