检查Web服务器,并且不从同一台服务器上的configuration文件parsing端口80和端口8080

今天的研究结果在这..

REF = 如何批量分析xml文件(CMD)注意:jeb中的注释有助于从xml中parsing出端口号

SET results=%CD%\somelog.log IF EXIST %results% DEL %results% REM NOTE: THIS IS ALL ONE LINE!!!! ALL THE WAY DOWN TO THE PAUSE STATMENT. FOR /F "usebackq tokens=1" %%q in (`reg query \\some_server\HKLM\SYSTEM\CurrentControlSet\services ^| find /i "tomcat"`) DO FOR /F "usebackq tokens=3" %%a in (`reg query \\some_server\HKLM\SYSTEM\CurrentControlSet\services\%%~nxq /v ImagePath`) DO FOR /F "tokens=1-2,* delims=:\" %%1 IN ("%%a") DO FOR /F tokens^=1^,2^ delims^=^" %%A IN ('..\grep -m 1 "\<Connector port\=" \\some_server\%%1$\%%2\conf\server.xml') DO ECHO "CHECKING WEB PAGE CONTENT FROM URL http://some_server:%%B/server_page.htm" 1>> %results% && ..\WGET -q "http://some_server:%%B/server_page.htm" -O - | ..\GREP "Configuration framework is not loaded" 2>> %results% && ..\WGET -q "http://some_server:%%B/server_page.htm" -O - | ..\GREP "Successfully acquired a database connection" 3>> %results% pause 

当前结果:结果数据是否被redirect到日志文件,但WGET与Pipe使用GREP的结果没有捕获到日志中。

已经试过了:result >> log result 1 >> log result2 2 >> log result3 3 >> log

只是在最后的结果中捕捉到ECHO命令的结果。

起点: 2014-12-05

让我们来弄清楚为什么我们没有得到服务器端口。 我已经知道了这一点,但现在我需要弄清楚如何到达第一个%serverport%。 根据要求,我已经删除了FINDSTR,并已经与GREP。

特别:

 REM >> here is the problem: if we want to break out for the first port SET serverport=%%B && GOTO :BREAK) :break SET serverport=%serverport: protocol=% SET serverport=%serverport:"=% 

而且是因为我们打破了脚本,因此无法继续对Apache Tomcat的二次实例:

 FOR /F "tokens=1-2* delims==" %%A IN ('..\grep "\<Connector port\=" %tpath%') DO ( SET serverport=%%B goto :break ) :break SET serverport=%serverport: protocol=% SET serverport=%serverport:"=% 

所以我们来看看这里发生了什么

第1步 ,我们创build一个DEBUG批处理脚本。 这将获取Windows服务名称的服务器密钥。 例如,当您运行NET STOP tomcat6或NET START tomcat6 ..我们不希望完整的registrypath,而只是键名。 当试图确定文件系统中的文件夹名称时,我们可以使用相同的结构,但是这是来自registry。

 echo test 1 FOR /F "usebackq tokens=1" %%q in (`reg query \\some_server\HKLM\SYSTEM\CurrentControlSet\services ^| find /i "tomcat"`) DO echo %%~nxq echo end of test 1 

第1步的结果,让我们看看这是什么..如果我们把tester.bat> results.txt我们看到:

 D:\WORK\Scripts\test>echo test 1 test 1 D:\WORK\Scripts\test>FOR /F "usebackq tokens=1" %q in (`reg query \\some_server\HKLM\SYSTEM\CurrentControlSet\services | find /i "tomcat"`) DO echo %~nxq D:\WORK\Scripts\test>echo tomcat6_1 tomcat6_1 D:\WORK\Scripts\test>echo tomcat6_2 tomcat6_2 D:\WORK\Scripts\test>echo end of test 1 end of test 1 

第2步 ,让我们看看我们开始寻找服务器端口时得到什么..注意:每个FOR线都是一条线.. FOR .. IN .. DO .. FOR .. IN .. DO .. FOR .. IN .. DO .. FOR .. IN .. DO …(是的,这四个都在一行中)

 echo test 2 FOR /F "usebackq tokens=1" %%q in (`reg query \\some_server\HKLM\SYSTEM\CurrentControlSet\services ^| find /i "tomcat"`) DO FOR /F "usebackq tokens=3" %%a in (`reg query \\some_server\HKLM\SYSTEM\CurrentControlSet\services\%%~nxq /v ImagePath`) DO FOR /F "tokens=1-2,* delims=:\" %%1 IN ("%%a") DO FOR /F "tokens=1-2* delims==" %%A IN ('..\grep "\<Connector port\=" \\some_server\%%1$\%%2\conf\server.xml') DO (SET serverport=%%B) echo end of test 2 echo we are done 

第2步的结果 ,让我们看看这样做..如果我们把tester.bat> results.txt我们看到:

 D:\WORK\Scripts\test>echo test 2 test 2 D:\WORK\Scripts\test>FOR /F "usebackq tokens=1" %q in (`reg query \\some_server\HKLM\SYSTEM\CurrentControlSet\services | find /i "tomcat"`) DO FOR /F "usebackq tokens=3" %a in (`reg query \\some_server\HKLM\SYSTEM\CurrentControlSet\services\%~nxq /v ImagePath`) DO FOR /F "tokens=1-2,* delims=:\" %1 IN ("%a") DO FOR /F "tokens=1-2* delims==" %A IN ('..\grep "\<Connector port\=" \\some_server\%1$\%2\conf\server.xml') DO (SET serverport=%B ) D:\WORK\Scripts\test>FOR /F "usebackq tokens=3" %a in (`reg query \\some_server\HKLM\SYSTEM\CurrentControlSet\services\tomcat6_1 /v ImagePath`) DO FOR /F "tokens=1-2,* delims=:\" %1 IN ("%a") DO FOR /F "tokens=1-2* delims==" %A IN ('..\grep "\<Connector port\=" \\some_server\%1$\%2\conf\server.xml') DO (SET serverport=%B ) D:\WORK\Scripts\test>FOR /F "tokens=1-2,* delims=:\" %1 IN ("d:\tomcat_1\bin\tomcat6.exe") DO FOR /F "tokens=1-2* delims==" %A IN ('..\grep "\<Connector port\=" \\some_server\%1$\%2\conf\server.xml') DO (SET serverport=%B ) D:\WORK\Scripts\test>FOR /F "tokens=1-2* delims==" %A IN ('..\grep "\<Connector port\=" \\some_server\d$\tomcat_1\conf\server.xml') DO (SET serverport=%B ) D:\WORK\Scripts\test>(SET serverport="80" protocol ) D:\WORK\Scripts\test>(SET serverport="8443" protocol ) D:\WORK\Scripts\test>(SET serverport="8009" protocol ) D:\WORK\Scripts\test>FOR /F "usebackq tokens=3" %a in (`reg query \\some_server\HKLM\SYSTEM\CurrentControlSet\services\tomcat6_2 /v ImagePath`) DO FOR /F "tokens=1-2,* delims=:\" %1 IN ("%a") DO FOR /F "tokens=1-2* delims==" %A IN ('..\grep "\<Connector port\=" \\some_server\%1$\%2\conf\server.xml') DO (SET serverport=%B ) D:\WORK\Scripts\test>FOR /F "tokens=1-2,* delims=:\" %1 IN ("d:\tomcat_2\bin\tomcat6.exe") DO FOR /F "tokens=1-2* delims==" %A IN ('..\grep "\<Connector port\=" \\some_server\%1$\%2\conf\server.xml') DO (SET serverport=%B ) D:\WORK\Scripts\test>FOR /F "tokens=1-2* delims==" %A IN ('..\grep "\<Connector port\=" \\some_server\d$\tomcat_2\conf\server.xml') DO (SET serverport=%B ) D:\WORK\Scripts\test>(SET serverport="8080" protocol ) D:\WORK\Scripts\test>(SET serverport="8443" protocol ) D:\WORK\Scripts\test>(SET serverport="8010" protocol ) D:\WORK\Scripts\test>echo end of test 2 end of test 2 D:\WORK\Scripts\test>echo we are done we are done 

我只想要服务器端口的第一个实例。

该服务器有两个tomcat实例:端口80端口8080

如果只是这一台服务器,那很简单,但我有30台服务器要报告。

好。 我很确定,我可以为此创建一个答案。 使用嵌套的FOR..IN..DO结构四次,我认为这就是为什么我不能运行WGET,只有第一个ECHO工作。下面是我们在这个代码的位置。

REF 如何批量分析xml文件(CMD) 注意:来自@jeb的评论帮助从xml解析出端口号

 SET servers=%CD%\monitored_computers.txt SET results=%CD%\somelog.log IF EXIST %results% DEL %results% FOR /f "tokens=2-8 delims=.:/ " %%a IN ("%date% %time: =0%") DO ECHO PROCESS CHECK STARTED %%a/%%b/%%c %%d:%%e:%%f.%%g >> %results% FOR /F "tokens=1-2* delims=," %%A IN (%servers%) DO ( REM NOTE: THIS IS ALL ONE LINE!!!! ALL THE WAY DOWN TO THE PAUSE STATMENT. FOR /F "usebackq tokens=1" %%q in (`reg query \\%%A\HKLM\SYSTEM\CurrentControlSet\services ^| find /i "tomcat"`) DO FOR /F "usebackq tokens=3" %%a in (`reg query \\%%A\HKLM\SYSTEM\CurrentControlSet\services\%%~nxq /v ImagePath`) DO FOR /F "tokens=1-2,* delims=:\" %%1 IN ("%%a") DO FOR /F tokens^=1^,2^ delims^=^" %%H IN ('..\grep -m 1 "\<Connector port\=" \\%%A\%%1$\%%2\conf\server.xml') DO ECHO "http://%%A:%%I/some_page.htm" >> %CD%\servers.txt pause ) 

希望这有助于某人。