2

这就是我想要做的:我有一个 NLB 集群。所述集群上有两台机器:Node1Node2。我有第三台机器,它不在那个或任何集群中。这第三台机器被称为:Monitor1

每小时一次,我想运行一个脚本来检查 Node1 和 Node2 是否启动。该脚本将通过 TaskScheduler 运行。我正在使用以下命令在 Node1 和 Node2 上执行脚本:

wmic /node:NODE1,NODE2 process call create "C:\ClusterCheck.bat"

ClusterCheck.bat 脚本内容如下:

NLB Query | findstr /i /R /C:"host . is stopped"
IF %ERRORLEVEL% EQU 0 (ECHO %COMPUTERNAME%_down)>DOWN.txt
IF %ERRORLEVEL% EQU 1 (ECHO %COMPUTERNAME%_up)>UP.txt
code here

当我使用wmic /node:"%1" process call create "C:\ClusterCheck.bat"时没有输出。当我进入服务器并手动双击 ClusterCheck.bat 文件时,它会给我适当的输出,具体取决于节点是打开还是关闭。

有谁知道如何让这些文件输出?

4

1 回答 1

4

第一个问题,当你wmic process call create应该在你的命令前加上cmd /c.

接下来,你是对的。 wmic不会在本地控制台上显示远程创建的进程的结果输出。您要么需要使用专为此类事情设计的psexec ,要么通过将命令输出传送到日志文件然后读取日志文件来破解解决方法。类似于以下脚本。

我不太清楚,如果这将是一个计划任务,为什么你关心结果可用于标准输出。我怀疑您打算将输出重定向到某种日志。所以我也把它放在这里。

@echo off
setlocal

set "user=domainadmin"
set "pass=password"

for /f %%I in ('wmic os get localdatetime') do set "timestamp=%%I"
set "today=%timestamp:~0,8%"

set logfile=c:\users\me\Desktop\logs\%today%.log

if not exist "%logfile%" mkdir "%logfile%\.." 2>NUL
>>"%logfile%" echo %time%

for %%I in (NODE1 NODE2) do (
    (ping -n 1 %%I >NUL && (
        net use \\%%I /user:%user% %pass% >NUL 2>NUL
        wmic /node:%%I /user:%user% /password:%pass% process call create "cmd /c c:\clustercheck.bat >c:\cc.log"
        type \\%%I\c$\cc.log && del \\%%I\c$\cc.log
        net use \\%%I /delete >NUL 2>NUL
    ) || echo %%I unresponsive
)>>"%logfile%"

forfiles /p "%logfile%\.." /M *.log  /d -30 /c "cmd /c del @path"

Desktop\logs如果它不存在,这应该创建,然后创建或附加到run on andDesktop\logs\YYYYMMDD.log的输出。最后,它会删除超过 30 天的日志文件。C:\clustercheck.batNODE1NODE2

于 2013-04-18T01:25:35.950 回答