2017-04-05 60 views
0

Dears,批处理:“如果输出中的字符串”在psexec(发送命令链)内

我希望你可以帮我用我的小项目。 一段时间以来,我一直在创造一种工具,以较少的工作量更快地处理我的工作,但效率相同。

下面是部分我遇到的麻烦:

@echo off 
title Hardware Check 
color f 
echo """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" 
echo " _ _    _       ____ _    _ " 
echo "| | | | __ _ _ __ __| __  ____ _ _ __ ___/___| |__ ___ ___| | __" 
echo "| |_| |/ _` | '__/ _` \ \ /\// _` | '__/ _ | | | '_ \/_ \/ __| |/ /" 
echo "| _ | (_| | | | (_| |\ V V | (_| | | | __| |___| | | | __| (__| < " 
echo "|_| |_|\__,_|_| \__,_| \_/\_/ \__,_|_| \___|\____|_| |_|\___|\___|_|\_\" 
echo """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" 
echo "                   " 
echo """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" 
echo. 
echo "Which server do you want to check?" 
echo. 
set /p ans="Machine: " 
echo. 
psexec \\%ans% cmd /c (^ omreport system^ ^& echo.^ ^& omreport chassis^ ^& echo.^ ^& omreport storage pdisk controller=0^ ^& echo.^ ^& uptime^ ^& echo.^ ^& pause^ ^& echo.^) 
echo. | findstr /I /B /C:"status" | findstr /I /C:"critical" 
if %errorlevel%==0 (color c) else (color a) 
echo. 
pause 

的想法是,发送命令后,分批应该如果输出数据包含单词“关键”检查,如果是这样,颜色的所有文本,红色,否则颜色为绿色。

文字的例子应该找到并由于条件红色:

Status       : Non-Critical 

当我运行这个,好像批并不真正关心,如果条件满足与否,它总是色绿。 如果你可以看到哪里是错误的,并有想法如何解决它,并使其工作,我会很感激。

+0

我想这应该读'PSEXEC \\%ANS%CMD/C ^(omreport ...'(注意'^('但你有'(^')...顺便说一下,用引号四周后,命令'CMD/C'避免了需要逃避什么... – aschipfl

+0

在代码这一小部分“”而不是(的)是真实的,但它的代码只是一小部分,而其他部分,其中服务和流程正如我说,不行的部分是一个用着色文字:( – mgj1993

回答

0

您正在寻找echo.的输出中的“状态”和“关键”,而不是输出psexec。由于echo.从来没有输出超过行尾的内容,因此批处理文件将永远不会找到“状态”和“关键”两个字,并且颜色始终为绿色。简而言之,代码:

echo. | findstr /I /B /C:"status" | findstr /I /C:"critical" 
if %errorlevel%==0 (color c) else (color a) 

严格等于color a

也许您应该在远程系统的文件中捕获远程命令的输出,将该文件复制到本地系统,并使用findstr查看复制的文件。

+0

到目前为止,我花了很多时间思考如何解决它,你显示它的方式启动需要quatation标记。 。 PSEXEC后添加任何路过的命令,PSEXEC后甚至没有启动 – mgj1993

+0

@ mgj1993:我承认我没有确切地读过你传递给'cmd'的命令,因为问题是为什么颜色总是绿色的。答案是q uestion是正确的 - 你用一种非常复杂的方式来说'颜色a'。对于特定的用例,您应该在远程系统的文件中捕获远程命令的输出,将该文件复制到本地系统,并使用'findstr'来查看复制的文件。 – AlexP

+0

我希望我能。另一个限制是我不能把任何机器上:( – mgj1993