Я хочу создать командный файл для отключения списка компьютеров в моей сети. Это достаточно просто с psshutdown из PSTools или даже с обычной командой shutdown.

Моя проблема в том, что я хочу, чтобы скрипт проверял, запущен ли определенный процесс на удаленном компьютере, и, если это так, не выключайте этот компьютер.

Например, если remotepc001 работает с notepad.exe, не закрывайте его.

Кто-нибудь знает хороший способ сделать это?

1 ответ1

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 = End Of File), то есть выход.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .