我正在尝试编写一个脚本,从服务器列表中,在执行脚本时,显示窗口所在的服务器数量"许可"或"未获得许可"。我写过这个脚本,但问题是,未激活的服务器也会输出" Licensed"。
这是脚本 -
@echo off
Set RESULTFILE=C:\users\v7t7adm\desktop\result.txt
Set SERVERLIST=C:\users\v7t7adm\desktop\server.txt
:START-SCRIPT
@for /F "tokens=1-10 delims=" %%a in ('type %SERVERLIST%') do (
Set SERVERNAME=%%a
Call :SCRIPT
)
:SCRIPT
@for /F "tokens=1-10 delims=:" %%a in ('cscript c:\Windows\System32\slmgr.vbs %SERVERNAME% /dli ^| findstr /I /C:"License Status:"') do Set STATUS=%%b
Call :ECHO-RESULT
Goto :EOF
:ECHO-RESULT
IF %STATUS% neq "Licensed " set %STATUS% = "Not Licensed"
echo %SERVERNAME% - %STATUS% >> %RESULTFILE%
echo %SERVERNAME% - %STATUS%
Goto :EOF
当我远程运行" cscript c:\ Windows \ System32 \ slmgr.vbs%SERVERNAME%/ dli"在未激活的服务器上,它输出为 -
已连接到服务器x
(空白)
所需的输出是 -
服务器x - 未获得许可
服务器y - 许可
但我得到了输出 -
服务器x - 许可
服务器y - 许可
答案 0 :(得分:0)
一些提示:
"delims="
,整个输入行只有一个标记,则默认为一个标记。 type
文件Set %varname%=content
,这会创建一个以var的内容为名的新var。拥有不同的区域设置我无法测试文本" Licensed"
@echo off
Set "RESULTFILE=C:\users\v7t7adm\desktop\result.txt"
Set "SERVERLIST=C:\users\v7t7adm\desktop\server.txt"
Set "SlMgr=cscript c:\Windows\System32\slmgr.vbs"
:START-SCRIPT
@for /F %%a in (%SERVERLIST%) do Call :SCRIPT %%a
Goto :eof
:SCRIPT
Set "STATUS="
@for /F "tokens=1-2 delims=:" %%a in (
'%SlMgr% %1 /dli ^|findstr /I /C:"License Status:"'
) do Set STATUS=%%b
IF not defined STATUS Echo couldn't evaluate License status for %1 &Goto :Eof
IF /I "%STATUS%" neq " Licensed" set "STATUS=Not Licensed"
echo %1 - [%STATUS%]
echo %1 - [%STATUS%] >> %RESULTFILE%
Goto :EOF