Я использую shutdown.exe для перезагрузки нескольких компьютеров удаленно. Если это не удается, я показываю ошибку, делая перенаправление 2> & 1 в файл журнала. Тем не менее, я бы тоже хотел показать успехи, но shutdown.exe этого не делает. Это ничего не показывает, если это удастся. Есть ли способ заставить это сделать это?

1 ответ1

1

Я делаю отметку времени / вывод имени компьютера в файл журнала, а также перенаправление, которое вы упомянули в своем вопросе. Если ничего не происходит, я просто вижу метку времени / имя в журнале. Если произойдет ошибка, я вижу метку времени / имя и ошибку под ним. Например, вот выдержка из сгенерированного журнала (имена обфусцированы в общие имена компьютеров):

-- START BATCH - Wed 04/12/2017 -  0:15:25.88 -- 

COMPUTER1 - Wed 04/12/2017 -  0:15:26.90 

COMPUTER2 - Wed 04/12/2017 -  0:15:29.53 

COMPUTER3 - Wed 04/12/2017 -  0:15:32.20 
COMPUTER3: The entered computer name is not valid or remote shutdown is not supported on the target computer. Check the name and then try again or contact your system administrator.(53)

COMPUTER4 - Wed 04/12/2017 -  0:15:36.59 

 (etc)...

-- END BATCH - Thu 04/13/2017 -  0:20:21.04 -- 

Как видите, в COMPUTER3 произошла ошибка, которая была направлена от STDERR к STDOUT. Все остальное приняло команду без вопросов.

Вот фактический пакетный файл, управляющий всем этим, который считывает имена компьютеров из текстового файла COMPUTERS.txt и записывает дамп в журнал с именем LOG_COMPUTERS.txt. Я запускаю его как запланированное задание с повышенными правами, но вы можете запускать его по требованию / самостоятельно, без проблем. Какой бы учетной записи ни выполнялся пакетный файл, потребуются права администратора на удаленном ПК.

@echo off
setlocal enabledelayedexpansion

echo. >> LOG_COMPUTERS.txt
echo -- START BATCH - !date! - !time! -- >> LOG_COMPUTERS.txt

for /f %%i in (COMPUTERS.txt) do (
echo %%i - !date! - !time! >> LOG_COMPUTERS.txt
shutdown.exe /s /f /m \\%%i /t 300 /c "This PC will shut down in 5 minutes.  Please save all of your work." >> LOG_COMPUTERS.txt 2>&1
echo. >> LOG_COMPUTERS.txt
)

echo. >> LOG_COMPUTERS.txt
echo -- END BATCH - !date! - !time! -- >> LOG_COMPUTERS.txt

Это сырой, но это работало очень хорошо в течение длительного времени ...

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