Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
6 changed files
with
311 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,264 @@ | ||
@echo off | ||
set _Debug=0 | ||
|
||
%windir%\system32\reg.exe query "HKU\S-1-5-19" >nul 2>&1 || ( | ||
set "msg=ERROR: right click on the script and 'Run as administrator'" | ||
goto :end | ||
) | ||
|
||
if %_Debug% EQU 0 ( | ||
set "_Nul_1=1>nul" | ||
set "_Nul_2=2>nul" | ||
set "_Nul_2e=2^>nul" | ||
set "_Nul_1_2=1>nul 2>nul" | ||
call :Begin | ||
exit /b | ||
) else ( | ||
set "_Nul_1=" | ||
set "_Nul_2=" | ||
set "_Nul_2e=" | ||
set "_Nul_1_2=" | ||
echo. | ||
echo Running in Debug Mode... | ||
echo The window will be closed when finished | ||
@echo on | ||
@prompt $G | ||
@call :Begin >"%~dpn0.tmp" 2>&1 &cmd /u /c type "%~dpn0.tmp">"%~dpn0_Debug.log"&del "%~dpn0.tmp" | ||
) | ||
exit | ||
|
||
:Begin | ||
color 1F | ||
title Office Click-to-Run Retail-to-Volume | ||
for /f "tokens=6 delims=[]. " %%G in ('ver') do set winbuild=%%G | ||
if /i "%PROCESSOR_ARCHITECTURE%" equ "AMD64" (set arch=x64) else (set arch=x86) | ||
set "_SLMGR=%SystemRoot%\System32\slmgr.vbs" | ||
|
||
if %winbuild% LSS 7601 ( | ||
set "msg=Windows 7 SP1 is the minimum supported OS..." | ||
goto :end | ||
) | ||
sc query ClickToRunSvc %_Nul_1_2% | ||
set error1=%errorlevel% | ||
sc query OfficeSvc %_Nul_1_2% | ||
set error2=%errorlevel% | ||
if %error1% equ 1060 if %error2% equ 1060 ( | ||
set "msg=Could not detect Office ClickToRun service..." | ||
goto :end | ||
) | ||
|
||
set _Office16=0 | ||
for /f "skip=2 tokens=2*" %%a in ('"reg query HKLM\SOFTWARE\Microsoft\Office\ClickToRun /v InstallPath" %_Nul_2e%') do if exist "%%b\Office16\OSPP.VBS" ( | ||
set _Office16=1&set "_OSPP=%%b\Office16\OSPP.VBS" | ||
) | ||
if exist "%ProgramFiles%\Microsoft Office\Office16\OSPP.VBS" ( | ||
set _Office16=1&set "_OSPP=%ProgramFiles%\Microsoft Office\Office16\OSPP.VBS" | ||
) else if exist "%ProgramFiles(x86)%\Microsoft Office\Office16\OSPP.VBS" ( | ||
set _Office16=1&set "_OSPP=%ProgramFiles(x86)%\Microsoft Office\Office16\OSPP.VBS" | ||
) | ||
if %_Office16% equ 0 ( | ||
set "msg=No installed Office 2016/2019 product detected..." | ||
goto :end | ||
) | ||
|
||
for /f "skip=2 tokens=2*" %%a in ('"reg query HKLM\SOFTWARE\Microsoft\Office\ClickToRun /v InstallPath" %_Nul_2e%') do if not errorlevel 1 (set "_InstallRoot=%%b\root") | ||
if "%_InstallRoot%" neq "" ( | ||
for /f "skip=2 tokens=2*" %%a in ('"reg query HKLM\SOFTWARE\Microsoft\Office\ClickToRun /v PackageGUID" %_Nul_2e%') do if not errorlevel 1 (set "_GUID=%%b") | ||
for /f "skip=2 tokens=2*" %%a in ('"reg query HKLM\SOFTWARE\Microsoft\Office\ClickToRun\Configuration /v ProductReleaseIds" %_Nul_2e%') do if not errorlevel 1 (set "ProductIds=%%b") | ||
set "_Config=HKLM\SOFTWARE\Microsoft\Office\ClickToRun\Configuration" | ||
set "_PRIDs=HKLM\SOFTWARE\Microsoft\Office\ClickToRun\ProductReleaseIDs" | ||
) else ( | ||
for /f "skip=2 tokens=2*" %%a in ('"reg query HKLM\SOFTWARE\WOW6432Node\Microsoft\Office\ClickToRun /v InstallPath" %_Nul_2e%') do if not errorlevel 1 (set "_InstallRoot=%%b\root") | ||
for /f "skip=2 tokens=2*" %%a in ('"reg query HKLM\SOFTWARE\WOW6432Node\Microsoft\Office\ClickToRun /v PackageGUID" %_Nul_2e%') do if not errorlevel 1 (set "_GUID=%%b") | ||
for /f "skip=2 tokens=2*" %%a in ('"reg query HKLM\SOFTWARE\WOW6432Node\Microsoft\Office\ClickToRun\Configuration /v ProductReleaseIds" %_Nul_2e%') do if not errorlevel 1 (set "ProductIds=%%b") | ||
set "_Config=HKLM\SOFTWARE\WOW6432Node\Microsoft\Office\ClickToRun\Configuration" | ||
set "_PRIDs=HKLM\SOFTWARE\WOW6432Node\Microsoft\Office\ClickToRun\ProductReleaseIDs" | ||
) | ||
set "_LicensesPath=%_InstallRoot%\Licenses16" | ||
set "_Integrator=%_InstallRoot%\integration\integrator.exe" | ||
for /f "skip=2 tokens=2*" %%a in ('"reg query %_PRIDs% /v ActiveConfiguration" %_Nul_2e%') do set "_PRIDs=%_PRIDs%\%%b" | ||
|
||
if "%ProductIds%" equ "" ( | ||
set "msg=Could not detect Office ProductIDs..." | ||
goto :end | ||
) | ||
if not exist "%_LicensesPath%\*.xrm-ms" ( | ||
set "msg=Could not detect Office Licenses files..." | ||
goto :end | ||
) | ||
if not exist "%_Integrator%" ( | ||
set "msg=Could not detect Office Licenses Integrator..." | ||
goto :end | ||
) | ||
if %winbuild% lss 9200 if not exist "%_OSPP%" ( | ||
set "msg=Could not detect Licensing tool OSPP.vbs..." | ||
goto :end | ||
) | ||
|
||
:Check | ||
echo. | ||
echo ============================================================ | ||
echo Checking Office Licenses... | ||
echo ============================================================ | ||
if %winbuild% geq 9200 ( | ||
set spp=SoftwareLicensingProduct | ||
set sps=SoftwareLicensingService | ||
) else ( | ||
set spp=OfficeSoftwareProtectionProduct | ||
set sps=OfficeSoftwareProtectionService | ||
) | ||
for /f "tokens=2 delims==" %%a in ('"wmic path %sps% get version /value" %_Nul_2e%') do set ver=%%a | ||
wmic path %spp% where (Description like '%%KMSCLIENT%%' AND not LicenseFamily='Office16MondoR_KMS_Automation') get LicenseFamily %_Nul_2% | findstr /i /C:"Office" %_Nul_1% && (set _KMS=1) || (set _KMS=0) | ||
wmic path %spp% where (Description like '%%TIMEBASED%%') get LicenseFamily %_Nul_2% | findstr /i /C:"Office" %_Nul_1% && (set _Time=1) || (set _Time=0) | ||
wmic path %spp% where (Description like '%%Grace%%') get LicenseFamily %_Nul_2% | findstr /i /C:"Office" %_Nul_1% && (set _Grace=1) || (set _Grace=0) | ||
if %_Time% equ 0 if %_Grace% equ 0 if %_KMS% equ 1 ( | ||
set "msg=No Conversion or Cleanup Required..." | ||
goto :end | ||
) | ||
|
||
:Retail2Volume | ||
echo. | ||
echo ============================================================ | ||
echo Cleaning Current Office Licenses... | ||
echo ============================================================ | ||
cd /d "%~dp0" | ||
%arch%\cleanospp.exe -Licenses %_Nul_1_2% | ||
echo. | ||
echo ============================================================ | ||
echo Installing Office Volume Licenses... | ||
echo ============================================================ | ||
echo. | ||
set O19Ids=ProPlus2019,ProjectPro2019,VisioPro2019,Standard2019,ProjectStd2019,VisioStd2019 | ||
set SkuIds=ProjectPro,VisioPro,Standard,ProjectStd,VisioStd | ||
set A19Ids=Excel2019,Outlook2019,PowerPoint2019,Publisher2019,Word2019 | ||
set AppIds=Excel,OneNote,Outlook,PowerPoint,Publisher,Word | ||
|
||
for %%a in (Mondo,%O19Ids%,%A19Ids%,Access2019,SkypeforBusiness2019,Professional2019,O365ProPlus,Professional,%SkuIds%,%AppIds%,Access,SkypeforBusiness,ProPlus) do ( | ||
set _%%a=0 | ||
) | ||
for %%a in (Mondo,%O19Ids%,%A19Ids%,Access2019,SkypeforBusiness2019,Professional2019,O365ProPlus,Professional,%SkuIds%,%AppIds%,Access,SkypeforBusiness) do ( | ||
echo %ProductIds%| findstr /I /C:"%%aRetail" %_Nul_1% && set _%%a=1 | ||
) | ||
wmic path %spp% get LicenseFamily > sppchk.txt | ||
for %%a in (Mondo,%O19Ids%,%A19Ids%,Access2019,SkypeforBusiness2019,%SkuIds%,%AppIds%,Access,SkypeforBusiness) do ( | ||
echo %ProductIds%| findstr /I /C:"%%aVolume" %_Nul_1% && ( | ||
find /i "%%aVL_KMS_Client" sppchk.txt %_Nul_1% && (set _%%a=0) || (set _%%a=1) | ||
) | ||
) | ||
reg query %_PRIDs%\ProPlusRetail.16 %_Nul_1_2% && set _ProPlus=1 | ||
reg query %_PRIDs%\ProPlusVolume.16 %_Nul_1_2% && ( | ||
find /i "Office16ProPlusVL_KMS_Client" sppchk.txt %_Nul_1% && (set _ProPlus=0) || (set _ProPlus=1) | ||
) | ||
|
||
setlocal EnableDelayedExpansion | ||
if !_Mondo! equ 1 ( | ||
echo Mondo Suite | ||
echo. | ||
call :InsLic Mondo | ||
goto :GVLK | ||
) | ||
if !_O365ProPlus! equ 1 ( | ||
echo O365ProPlus Suite -^> Mondo Licenses | ||
echo. | ||
call :InsLic Mondo | ||
) | ||
if !_ProPlus2019! equ 1 if !_O365ProPlus! equ 0 ( | ||
echo ProPlus2019 Suite | ||
echo. | ||
call :InsLic ProPlus2019 | ||
) | ||
if !_ProPlus! equ 1 if !_ProPlus2019! equ 0 if !_O365ProPlus! equ 0 ( | ||
echo ProPlus Suite | ||
echo. | ||
call :InsLic ProPlus | ||
) | ||
if !_Professional2019! equ 1 if !_ProPlus2019! equ 0 if !_O365ProPlus! equ 0 if !_ProPlus! equ 0 ( | ||
echo Professional2019 Suite -^> ProPlus2019 Licenses | ||
echo. | ||
call :InsLic ProPlus2019 | ||
) | ||
if !_Professional! equ 1 if !_ProPlus2019! equ 0 if !_O365ProPlus! equ 0 if !_ProPlus! equ 0 if !_Professional2019! equ 0 ( | ||
echo Professional Suite -^> ProPlus Licenses | ||
echo. | ||
call :InsLic ProPlus | ||
) | ||
if !_Standard2019! equ 1 if !_ProPlus2019! equ 0 if !_O365ProPlus! equ 0 if !_ProPlus! equ 0 if !_Professional2019! equ 0 if !_Professional! equ 0 ( | ||
echo Standard2019 Suite | ||
echo. | ||
call :InsLic Standard2019 | ||
) | ||
if !_Standard! equ 1 if !_ProPlus2019! equ 0 if !_O365ProPlus! equ 0 if !_ProPlus! equ 0 if !_Professional2019! equ 0 if !_Professional! equ 0 if !_Standard2019! equ 0 ( | ||
echo Standard Suite | ||
echo. | ||
call :InsLic Standard | ||
) | ||
for %%a in (ProjectPro2019,VisioPro2019,ProjectStd2019,VisioStd2019) do if !_%%a! equ 1 ( | ||
echo %%a SKU | ||
echo. | ||
call :InsLic %%a | ||
) | ||
for %%a in (ProjectPro,ProjectStd,VisioPro,VisioStd) do if !_%%a! equ 1 ( | ||
if !_%%a2019! equ 0 (echo %%a SKU&echo.&call :InsLic %%aX) | ||
) | ||
for %%a in (%A19Ids%,%AppIds%) do if !_%%a! equ 1 ( | ||
if !_ProPlus2019! equ 0 if !_O365ProPlus! equ 0 if !_ProPlus! equ 0 if !_Professional2019! equ 0 if !_Professional! equ 0 if !_Standard2019! equ 0 if !_Standard! equ 0 (echo %%a App&echo.&call :InsLic %%a) | ||
) | ||
for %%a in (Access2019,Access) do if !_%%a! equ 1 ( | ||
if !_ProPlus2019! equ 0 if !_O365ProPlus! equ 0 if !_ProPlus! equ 0 if !_Professional2019! equ 0 if !_Professional! equ 0 (echo %%a App&echo.&call :InsLic %%a) | ||
) | ||
for %%a in (SkypeforBusiness2019,SkypeforBusiness) do if !_%%a! equ 1 ( | ||
if !_ProPlus2019! equ 0 if !_O365ProPlus! equ 0 if !_ProPlus! equ 0 (echo %%a App&echo.&call :InsLic %%a) | ||
) | ||
goto :GVLK | ||
|
||
:InsLic | ||
set "_ID=%1Volume" | ||
reg delete %_Config% /f /v %_ID%.OSPPReady %_Nul_1_2% | ||
"%_Integrator%" /I /License PRIDName=%_ID%.16 PackageGUID="%_GUID%" PackageRoot="%_InstallRoot%" %_Nul_1% | ||
reg add %_Config% /f /v %_ID%.OSPPReady /t REG_SZ /d 1 %_Nul_1% | ||
reg query %_Config% /v ProductReleaseIds | findstr /I "%_ID%" %_Nul_1% | ||
if %errorlevel% neq 0 ( | ||
for /f "skip=2 tokens=2*" %%a in ('reg query %_Config% /v ProductReleaseIds') do reg add %_Config% /f /v ProductReleaseIds /t REG_SZ /d "%%b,%_ID%" %_Nul_1% | ||
) | ||
exit /b | ||
|
||
:GVLK | ||
echo ============================================================ | ||
echo Installing Missing KMS Client Keys... | ||
echo ============================================================ | ||
echo. | ||
for /f "tokens=2 delims==" %%G in ('"wmic path %spp% where (Description like '%%KMSCLIENT%%' AND LicenseFamily like 'Office%%' AND PartialProductKey=NULL) get ID /value" %_Nul_2e%') do (set app=%%G&call :InsKey) | ||
if exist "%SystemRoot%\System32\spp\store_test\2.0\tokens.dat" ( | ||
echo. | ||
echo ============================================================ | ||
echo Refreshing Windows Insider Preview Licenses... | ||
echo ============================================================ | ||
echo. | ||
cscript //Nologo //B %_SLMGR% /rilc | ||
) | ||
set "msg=Finished" | ||
goto :end | ||
|
||
:InsKey | ||
if /i '%app%' equ 'e914ea6e-a5fa-4439-a394-a9bb3293ca09' exit /b | ||
if /i '%app%' equ '0bc88885-718c-491d-921f-6f214349e79c' exit /b | ||
if /i '%app%' equ 'fc7c4d0c-2e85-4bb9-afd4-01ed1476b5e9' exit /b | ||
if /i '%app%' equ '500f6619-ef93-4b75-bcb4-82819998a3ca' exit /b | ||
set "key=" | ||
for /f "tokens=2 delims==" %%A in ('"wmic path %spp% where ID='%app%' get LicenseFamily /value"') do echo %%A | ||
for /f %%A in ('cscript //Nologo x86\key.vbs %app%') do set "key=%%A" | ||
if "%key%" equ "" (echo Could not find matching gVLK&echo.&exit /b) | ||
wmic path %sps% where version='%ver%' call InstallProductKey ProductKey="%key%" %_Nul_1_2% | ||
echo. | ||
exit /b | ||
|
||
:end | ||
del /f /q sppchk.txt %_Nul_1_2% | ||
echo. | ||
echo ============================================================ | ||
echo %msg% | ||
echo ============================================================ | ||
echo. | ||
echo Press any key to exit... | ||
if %_Debug% EQU 0 pause >nul | ||
goto :eof |
Binary file not shown.
Binary file not shown.
Binary file not shown.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,47 @@ | ||
Dim edition | ||
edition = WScript.Arguments(0) | ||
Set keys = CreateObject ("Scripting.Dictionary") | ||
|
||
'Office 2019 | ||
keys.Add "0bc88885-718c-491d-921f-6f214349e79c", "VQ9DP-NVHPH-T9HJC-J9PDT-KTQRG" 'Professional Plus C2R-P | ||
keys.Add "fc7c4d0c-2e85-4bb9-afd4-01ed1476b5e9", "XM2V9-DN9HH-QB449-XDGKC-W2RMW" 'Project Professional C2R-P | ||
keys.Add "500f6619-ef93-4b75-bcb4-82819998a3ca", "N2CG9-YD3YK-936X4-3WR82-Q3X4H" 'Visio Professional C2R-P | ||
keys.Add "85dd8b5f-eaa4-4af3-a628-cce9e77c9a03", "NMMKJ-6RK4F-KMJVX-8D9MJ-6MWKP" 'Professional Plus | ||
keys.Add "6912a74b-a5fb-401a-bfdb-2e3ab46f4b02", "6NWWJ-YQWMR-QKGCB-6TMB3-9D9HK" 'Standard | ||
keys.Add "2ca2bf3f-949e-446a-82c7-e25a15ec78c4", "B4NPR-3FKK7-T2MBV-FRQ4W-PKD2B" 'Project Professional | ||
keys.Add "1777f0e3-7392-4198-97ea-8ae4de6f6381", "C4F7P-NCP8C-6CQPT-MQHV9-JXD2M" 'Project Standard | ||
keys.Add "5b5cf08f-b81a-431d-b080-3450d8620565", "9BGNQ-K37YR-RQHF2-38RQ3-7VCBB" 'Visio Professional | ||
keys.Add "e06d7df3-aad0-419d-8dfb-0ac37e2bdf39", "7TQNQ-K3YQQ-3PFH7-CCPPM-X4VQ2" 'Visio Standard | ||
keys.Add "9e9bceeb-e736-4f26-88de-763f87dcc485", "9N9PT-27V4Y-VJ2PD-YXFMF-YTFQT" 'Access | ||
keys.Add "237854e9-79fc-4497-a0c1-a70969691c6b", "TMJWT-YYNMB-3BKTF-644FC-RVXBD" 'Excel | ||
keys.Add "c8f8a301-19f5-4132-96ce-2de9d4adbd33", "7HD7K-N4PVK-BHBCQ-YWQRW-XW4VK" 'Outlook | ||
keys.Add "3131fd61-5e4f-4308-8d6d-62be1987c92c", "RRNCX-C64HY-W2MM7-MCH9G-TJHMQ" 'PowerPoint | ||
keys.Add "9d3e4cca-e172-46f1-a2f4-1d2107051444", "G2KWX-3NW6P-PY93R-JXK2T-C9Y9V" 'Publisher | ||
keys.Add "734c6c6e-b0ba-4298-a891-671772b2bd1b", "NCJ33-JHBBY-HTK98-MYCV8-HMKHJ" 'Skype for Business | ||
keys.Add "059834fe-a8ea-4bff-b67b-4d006b5447d3", "PBX3G-NWMT6-Q7XBW-PYJGG-WXD33" 'Word | ||
|
||
'Office 2016 | ||
keys.Add "829b8110-0e6f-4349-bca4-42803577788d", "WGT24-HCNMF-FQ7XH-6M8K7-DRTW9" 'Project Professional C2R-P | ||
keys.Add "cbbaca45-556a-4416-ad03-bda598eaa7c8", "D8NRQ-JTYM3-7J2DX-646CT-6836M" 'Project Standard C2R-P | ||
keys.Add "b234abe3-0857-4f9c-b05a-4dc314f85557", "69WXN-MBYV6-22PQG-3WGHK-RM6XC" 'Visio Professional C2R-P | ||
keys.Add "361fe620-64f4-41b5-ba77-84f8e079b1f7", "NY48V-PPYYH-3F4PX-XJRKJ-W4423" 'Visio Standard C2R-P | ||
keys.Add "e914ea6e-a5fa-4439-a394-a9bb3293ca09", "DMTCJ-KNRKX-26982-JYCKT-P7KB6" 'MondoR | ||
keys.Add "9caabccb-61b1-4b4b-8bec-d10a3c3ac2ce", "HFTND-W9MK4-8B7MJ-B6C4G-XQBR2" 'Mondo | ||
keys.Add "d450596f-894d-49e0-966a-fd39ed4c4c64", "XQNVK-8JYDB-WJ9W3-YJ8YR-WFG99" 'Professional Plus | ||
keys.Add "dedfa23d-6ed1-45a6-85dc-63cae0546de6", "JNRGM-WHDWX-FJJG3-K47QV-DRTFM" 'Standard | ||
keys.Add "4f414197-0fc2-4c01-b68a-86cbb9ac254c", "YG9NW-3K39V-2T3HJ-93F3Q-G83KT" 'Project Professional | ||
keys.Add "da7ddabc-3fbe-4447-9e01-6ab7440b4cd4", "GNFHQ-F6YQM-KQDGJ-327XX-KQBVC" 'Project Standard | ||
keys.Add "6bf301c1-b94a-43e9-ba31-d494598c47fb", "PD3PC-RHNGV-FXJ29-8JK7D-RJRJK" 'Visio Professional | ||
keys.Add "aa2a7821-1827-4c2c-8f1d-4513a34dda97", "7WHWN-4T7MP-G96JF-G33KR-W8GF4" 'Visio Standard | ||
keys.Add "67c0fc0c-deba-401b-bf8b-9c8ad8395804", "GNH9Y-D2J4T-FJHGG-QRVH7-QPFDW" 'Access | ||
keys.Add "c3e65d36-141f-4d2f-a303-a842ee756a29", "9C2PK-NWTVB-JMPW8-BFT28-7FTBF" 'Excel | ||
keys.Add "d8cace59-33d2-4ac7-9b1b-9b72339c51c8", "DR92N-9HTF2-97XKM-XW2WJ-XW3J6" 'OneNote | ||
keys.Add "ec9d9265-9d1e-4ed0-838a-cdc20f2551a1", "R69KK-NTPKF-7M3Q4-QYBHW-6MT9B" 'Outlook | ||
keys.Add "d70b1bba-b893-4544-96e2-b7a318091c33", "J7MQP-HNJ4Y-WJ7YM-PFYGF-BY6C6" 'Powerpoint | ||
keys.Add "041a06cb-c5b8-4772-809f-416d03d16654", "F47MM-N3XJP-TQXJ9-BP99D-8K837" 'Publisher | ||
keys.Add "83e04ee1-fa8d-436d-8994-d31a862cab77", "869NQ-FJ69K-466HW-QYCP2-DDBV6" 'Skype for Business | ||
keys.Add "bb11badf-d8aa-470e-9311-20eaf80fe5cc", "WXY84-JN2Q9-RBCCQ-3Q3J3-3PFJ6" 'Word | ||
|
||
if keys.Exists(edition) then | ||
WScript.Echo keys.Item(edition) | ||
End If |
Binary file not shown.