Я пытаюсь написать сценарий, из которого из списка серверов после выполнения скрипта отображается количество серверов, на которых «Лицензировано» 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%/дли" на сервере, который не активирован, он дает выход а -
Подключен к серверу х
(пустой)
Нужный выход -
сервер х - не лицензирован
сервер у - Лицензия
Но я получаю выход -
сервер х - Лицензионный
сервера у - Лицензия
Поскольку выход пуст, то значение '% STATUS% 'не изменяется и просто сообщает о статусе предыдущего сервера. Добавьте 'set STATUS = NONE' или подобное перед командой' for', чтобы установить значение по умолчанию. –
@HarryJohnston по этой причине я пробовал с сервером, который «не активирован», как первый сервер в списке, так что нет избыточности. –
Если вы не открыли новое окно команд, переменная все еще может быть установлена из предыдущих прогонов скрипта. –