WindowsとOffice のプロダクトキーを調べるバッチを作った
おはようございます。
特にインフラ管理者という訳ではないんですが
何故か調べさせられることになったのでバッチ作りました。
忘れたころに調べてほしいとかってなることが多いので
バッチとかで残しておくといいですよね。
※Windows 7、8、10でしか確認していません。
スポンサーリンク
目次
Windowsのプロダクトキー
次のコードをテキストエディタなどに貼り付け、名前を付けて保存する。
バッチファイル
GetWinProductId.bat
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 | @echo off SETTM=%TIME:~0,6% SETTM=%TM::=% SETTM=%TM:=0% SETYMD=%Date:~0,4%%Date:~5,2%%Date:~8,2%%TM% SETOUT_FILE=%COMPUTERNAME%_WinProductKey_%YMD%.txt :LA_STARTBATCH cls echo. SET/pchoice=Windowsのプロダクトキーを出力します、よろしいですか?[y,n]⇒ if'%choice%'==''gotoLA_STARTBATCH REM コマンドチェック call:LA_CHECK_COMANDyn if'%choice%'=='n'gotoLA_CANCEL if'%choice%'=='y'gotoLA_EXEXUTE :LA_EXEXUTE echo 処理を開始します。 %DATE% %TIME% > %OUT_FILE% echo. >> %OUT_FILE% echo ホスト名:%COMPUTERNAME% >> %OUT_FILE% callsearch.vbs%OUT_FILE% echo. >> %OUT_FILE% goto:LA_ENDBATCH REM * ========================================================================================================= REM * コマンドチェック REM * ========================================================================================================= :LA_CHECK_COMAND echo %1 > tmp.text SETRET= FOR/F"usebackq"%%tIN(`findstr%choice%tmp.text`)DOSETRET=%%t deltmp.text if'%RET%'==''( gotoLA_INPUT_MISSING ) exit/b REM * ========================================================================================================= REM * 入力ミス REM * ========================================================================================================= :LA_INPUT_MISSING echo. set/pmiss=入力に誤りがあります。 gotoLA_STARTBATCH REM * ========================================================================================================= REM * バッチ終了 REM * ========================================================================================================= :LA_ENDBATCH echo. >> %OUT_FILE% echo =============================================================================================================== >> %OUT_FILE% echo. >> %OUT_FILE% echo 処理を終了します。 %DATE% %TIME% >> %OUT_FILE% echo. SET/pchoise=%CD%\%OUT_FILE%を出力しました。 exit REM * ========================================================================================================= REM * バッチ終了 REM * ========================================================================================================= :LA_CANCEL echo. SET/pchoise=処理をキャンセルしました。 exit |
検索用 VBScript
search.vbs
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 | OptionExplicit '宣言 DimstrKeyPath,strValueName,strComputer,strProductKey,strFinalKey,strAll DimobjReg,WshShell Dimi,k,j DimiValues(),arrDPID,arrChars DimobjFso,objFile SetWshShell=CreateObject("wscript.shell") strComputer="." SetobjReg=GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\default:StdRegProv") const HKEY_LOCAL_MACHINE = &H80000002 'レジストリ取得 strKeyPath = "SOFTWARE\Microsoft\Windows NT\CurrentVersion" strValueName = "DigitalProductId" objReg.GetBinaryValue HKEY_LOCAL_MACHINE, strKeyPath, strValueName, iValues arrDPID = Array() For i = 52 to 66 ReDim Preserve arrDPID( UBound(arrDPID) + 1 ) arrDPID( UBound(arrDPID) ) = iValues(i) Next '展開 arrChars = Array("B","C","D","F","G","H","J","K","M","P","Q","R","T","V","W","X","Y","2","3","4","6","7","8","9") For i = 24 To 0 Step -1 k = 0 For j = 14 To 0 Step -1 k = k * 256 Xor arrDPID(j) arrDPID(j) = Int(k / 24) k = k Mod 24 Next strProductKey = arrChars(k) & strProductKey If i Mod 5 = 0 And i <> 0 Then strProductKey = "-" & strProductKey Next strFinalKey = strProductKey strAll = strAll & strFinalKey Set objFso = CreateObject("Scripting.FileSystemObject") Set objFile = objFso.OpenTextFile(WScript.Arguments(0), 8, True) If Err.Number > 0 Then WScript.Echo "Open Error" Else objFile.WriteLine "プロダクトキー:" & strAll End If objFile.Close Set objFile = Nothing Set objFso = Nothing 'msgBox strAll, , "Microsoft Windows ProductKey" WScript.Quit |
下5ケタのみ調べる
既にプロダクトIDは一覧で管理しているが、
どのPCがどのプロダクトIDかわからない場合は次のコマンドで十分。
コマンドプロンプトから次のコマンドを実行する。
1 2 | slmgr/dlv cscriptc:\windows\system32\slmgr.vbs/dlv |
Microsoft Office
バッチファイル
次のコードをテキストエディタに貼り付け、名前を付けて保存する。
GetOfficeProductKey.bat
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 | @echo off SETTM=%TIME:~0,6% SETTM=%TM::=% SETTM=%TM:=0% SETYMD=%Date:~0,4%%Date:~5,2%%Date:~8,2%%TM% SETOUT_FILE=%COMPUTERNAME%_Office_%YMD%.txt :LA_STARTBATCH cls echo. SET/pchoice=Officeのプロダクトキーを出力します、よろしいですか?[y,n]⇒ if'%choice%'==''gotoLA_STARTBATCH REM コマンドチェック call:LA_CHECK_COMANDyn if'%choice%'=='n'gotoLA_CANCEL if'%choice%'=='y'gotoLA_EXEXUTE :LA_EXEXUTE echo 処理を開始します。 %DATE% %TIME% > %OUT_FILE% echo. >> %OUT_FILE% echo ホスト名:%COMPUTERNAME% >> %OUT_FILE% echo ============================================= Office Information ============================================== >> %OUT_FILE% REM ------------------------------------------------------ REM Officeの情報を出力する REM ------------------------------------------------------ ifExist"%programfiles(x86)%"( ifExist"%programfiles(x86)%\Microsoft Office\Office14\ospp.vbs"( cscript"%programfiles(x86)%\Microsoft Office\Office14\ospp.vbs"/dstatus>>%OUT_FILE% )else( cscript"%programfiles(x86)%\Microsoft Office\Office15\ospp.vbs"/dstatus>>%OUT_FILE% ) )else( ifExist"%programfiles%\Microsoft Office\Office14\ospp.vbs"( cscript"%programfiles%\Microsoft Office\Office14\ospp.vbs"/dstatus>>%OUT_FILE% )else( cscript"%programfiles%\Microsoft Office\Office15\ospp.vbs"/dstatus>>%OUT_FILE% ) ) REM ファイルの内容を読み込んでチェック for/f"delims="%%ain(%OUT_FILE%)do( echo %%a | find "Last 5 characters of installed product key" >NUL IFNOTERRORLEVEL1call:LA_CHECK"%%a" ) goto:LA_ENDBATCH REM * ========================================================================================================= REM * コマンドチェック REM * ========================================================================================================= :LA_CHECK_COMAND echo %1 > tmp.text SETRET= FOR/F"usebackq"%%tIN(`findstr%choice%tmp.text`)DOSETRET=%%t deltmp.text if'%RET%'==''( gotoLA_INPUT_MISSING ) exit/b REM * ========================================================================================================= REM * 入力ミス REM * ========================================================================================================= :LA_INPUT_MISSING echo. set/pmiss=入力に誤りがあります。 gotoLA_STARTBATCH REM * ========================================================================================================= REM * office プロダクトキーの出力 REM * ========================================================================================================= :LA_CHECK setVAL=%~1 echo. >> %OUT_FILE% echo ++++++++++++++ レジストリを検索 +++++++++++++++++ >> %OUT_FILE% echo. >> %OUT_FILE% regquery"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office"/f*%VAL:~-5%*/s>>%OUT_FILE% exit/b REM * ========================================================================================================= REM * バッチ終了 REM * ========================================================================================================= :LA_ENDBATCH echo. >> %OUT_FILE% echo =============================================================================================================== >> %OUT_FILE% echo. >> %OUT_FILE% echo 処理を終了します。 %DATE% %TIME% >> %OUT_FILE% echo. SET/pchoise=%CD%\%OUT_FILE%を出力しました。 exit REM * ========================================================================================================= REM * バッチ終了 REM * ========================================================================================================= :LA_CANCEL echo. SET/pchoise=処理をキャンセルしました。 exit |
まとめ
あまり使いどころがあるものではありませんが、
どこかの誰かのお役に立てれば幸いです。
ではでは。
ディスカッション
コメント一覧
有益な情報ありがとうございます。
GetWinProductId.bat のコード、25 行目 seach は search のタイポじゃないかなと思います。
クリボウ様
いつも記事を見ていただきありがとうございます。
ご指摘の件、ありがとうございます。(くだらないミスでスミマセン。)
記事を修正いたしました。
今後もよろしくお願いします。