我希望创建一个批处理文件来关闭我网络上的一系列计算机。使用 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
的文本输出更容易。tasklist
if
然后我们使用goto
跳转到正确的块,从而根据进程是否正在运行来分离执行。您也可以只运行语句内的命令if
。goto :eof
基本上意味着转到程序末尾(EOF = 文件结尾),即退出。