我使用shutdown.exe远程重启一组计算机。如果失败,我会通过执行 2>&1 重定向到日志文件来显示错误。但是,我也希望显示成功,但shutdown.exe 不会这样做。如果成功,它什么也不会显示。有什么办法可以让它这样做吗?
答案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 的日志中。我将其作为具有提升权限的计划任务运行,但您可以按需/自行运行它而不会出现问题。无论哪个帐户运行批处理文件,都需要远程 PC 上的管理权限。
@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
虽然很粗糙,但长期以来效果很好……