gpt4 book ai didi

windows - WMI Process Call Create 将无法正确运行批处理脚本

转载 作者:可可西里 更新时间:2023-11-01 10:00:01 26 4
gpt4 key购买 nike

这就是我想要做的:我有一个 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 文件时,它会根据节点是启动还是关闭为我提供适当的输出。

有没有人知道如何输出这些文件?

最佳答案

第一个问题,当您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 如果它不存在,然后创建或附加到 Desktop\logs\YYYYMMDD.log C 的输出:\clustercheck.batNODE1NODE2 上运行。最后,它会删除超过 30 天的日志文件。

关于windows - WMI Process Call Create 将无法正确运行批处理脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16069724/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com