我试图编写一个脚本,在脚本执行后,从服务器列表中的哪个位置显示Windows“已许可”或“未经许可”。我已经编写了这个脚本,但问题是,未激活的服务器也会给出“许可”输出。获取所有“已激活”和“未激活”Windows服务器的列表
这里是脚本 -
@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 - 未获得许可
服务器Ÿ - 许可
但我得到的输出 -
服务器X - 许可
服务器ÿ - 许可
由于输出是空的,的'%的值STATUS%'没有被改变,只是报告前一个服务器的状态。在'for'命令之前添加'set STATUS = NONE'或类似的参数来设置默认值。 –
@HarryJohnston出于这个原因,我试着将“Not Activated”服务器作为列表中的第一个服务器,这样就没有冗余。 –
除非您打开一个新的命令窗口,否则该变量可能仍然是从以前的脚本运行中设置的。 –