2017-02-15 52 views
-1

我試圖編寫一個腳本,在腳本執行後,從服務器列表中的哪個位置顯示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 - 許可

服務器ÿ - 許可

+0

由於輸出是空的,的'%的值STATUS%'沒有被改變,只是報告前一個服務器的狀態。在'for'命令之前添加'set STATUS = NONE'或類似的參數來設置默認值。 –

+0

@HarryJohnston出於這個原因,我試着將「Not Activated」服務器作爲列表中的第一個服務器,這樣就沒有冗餘。 –

+0

除非您打開一個新的命令窗口,否則該變量可能仍然是從以前的腳本運行中設置的。 –

回答

0

一些提示:

  • 如果您使用"delims=",則整個輸入行只有一個令牌,一個令牌是默認值。
  • 如果每行只有一個服務器,並且服務器名稱不能包含空格,則不需要定義分隔符。
  • 如果文件名不包含空格(而不是UTF)如果你調用一個子程序可以傳遞參數,無需在瓦爾存儲,那麼你不需要type文件
  • 如果您在冒號中解析slmgr.vbs輸出分裂,則在許可證狀態前會有空格,因此要麼修剪或與這些空格進行比較。
  • 將var內容與qoutes中的字符串進行比較時,您還必須引用var內容。
  • 當設置一個var不使用Set %varname%=content時,這將創建一個var作爲var的內容作爲名稱的新var。
  • 調試時使用開放cmd窗口和temporily回波設置

具有不同語言環境我不能測試文本" 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 
+0

一切工作正常,但是當我在整個環境中運行此腳本時,它仍然會給出錯誤的結果。 –

+0

是否有非英文語言環境? Slmgr.vbs將返回本地化的字符串。 – LotPings

+0

請詳細說明一下? –