Guest User

Untitled

a guest
Aug 13th, 2019
1,927
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 15.34 KB | None | 0 0
  1. @echo off
  2. :: Licenses used for converting Office 365 ProPlus:
  3. :: set _O365asO2019=0 -> use Office 2016 Mondo (if you want some Office 365 features)
  4. :: set _O365asO2019=1 -> use Office 2019 ProPlus (should only be used for Windows 7 and 8.1)
  5. set _O365asO2019=0
  6.  
  7.  
  8. set _Debug=0
  9. set "SysPath=%Windir%\System32"
  10. if exist "%Windir%\Sysnative\reg.exe" (set "SysPath=%Windir%\Sysnative")
  11. set "Path=%SysPath%;%Windir%;%SysPath%\Wbem;%SysPath%\WindowsPowerShell\v1.0\"
  12. fsutil dirty query %systemdrive% >nul 2>&1 || (
  13. set "msg=ERROR: right click on the script and 'Run as administrator'"
  14. goto :end
  15. )
  16.  
  17. set xOS=x64
  18. if /i %PROCESSOR_ARCHITECTURE%==x86 (if "%PROCESSOR_ARCHITEW6432%"=="" set xOS=x86)
  19. set "_tempdir=%SystemRoot%\Temp"
  20. set "_logpath=%~dpn0"
  21. set "_workdir=%~dp0"
  22. if "%_workdir:~-1%"=="\" set "_workdir=%_workdir:~0,-1%"
  23. setlocal EnableExtensions EnableDelayedExpansion
  24.  
  25. if %_Debug% EQU 0 (
  26. set "_Nul_1=1>nul"
  27. set "_Nul_2=2>nul"
  28. set "_Nul_2e=2^>nul"
  29. set "_Nul_1_2=1>nul 2>nul"
  30. call :Begin
  31. ) else (
  32. set "_Nul_1="
  33. set "_Nul_2="
  34. set "_Nul_2e="
  35. set "_Nul_1_2="
  36. echo.
  37. echo Running in Debug Mode...
  38. echo The window will be closed when finished
  39. copy /y nul "!_workdir!\#.rw" 1>nul 2>nul && (if exist "!_workdir!\#.rw" del /f /q "!_workdir!\#.rw") || (set "_logpath=!_tempdir!\%~n0")
  40. @echo on
  41. @prompt $G
  42. @call :Begin >"!_logpath!.tmp" 2>&1 &cmd /u /c type "!_logpath!.tmp">"!_logpath!_Debug.log"&del "!_logpath!.tmp"
  43. )
  44. exit /b
  45.  
  46. :Begin
  47. color 1F
  48. title Office Click-to-Run Retail-to-Volume
  49. for /f "tokens=6 delims=[]. " %%# in ('ver') do set winbuild=%%#
  50. set "_SLMGR=%SystemRoot%\System32\slmgr.vbs"
  51.  
  52. if %winbuild% lss 7601 (
  53. set "msg=Windows 7 SP1 is the minimum supported OS..."
  54. goto :end
  55. )
  56. sc query ClickToRunSvc %_Nul_1_2%
  57. set error1=%errorlevel%
  58. sc query OfficeSvc %_Nul_1_2%
  59. set error2=%errorlevel%
  60. if %error1% equ 1060 if %error2% equ 1060 (
  61. set "msg=Could not detect Office ClickToRun service..."
  62. goto :end
  63. )
  64.  
  65. set _Office16=0
  66. 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" (
  67. set _Office16=1&set "_OSPP=%%b\Office16\OSPP.VBS"
  68. )
  69. if exist "%ProgramFiles%\Microsoft Office\Office16\OSPP.VBS" (
  70. set _Office16=1&set "_OSPP=%ProgramFiles%\Microsoft Office\Office16\OSPP.VBS"
  71. ) else if exist "%ProgramFiles(x86)%\Microsoft Office\Office16\OSPP.VBS" (
  72. set _Office16=1&set "_OSPP=%ProgramFiles(x86)%\Microsoft Office\Office16\OSPP.VBS"
  73. )
  74. if %_Office16% equ 0 (
  75. set "msg=No installed Office 2016/2019 product detected..."
  76. goto :end
  77. )
  78.  
  79. 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")
  80. if "%_InstallRoot%" neq "" (
  81. 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")
  82. 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")
  83. set "_Config=HKLM\SOFTWARE\Microsoft\Office\ClickToRun\Configuration"
  84. set "_PRIDs=HKLM\SOFTWARE\Microsoft\Office\ClickToRun\ProductReleaseIDs"
  85. ) else (
  86. 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")
  87. 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")
  88. 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")
  89. set "_Config=HKLM\SOFTWARE\WOW6432Node\Microsoft\Office\ClickToRun\Configuration"
  90. set "_PRIDs=HKLM\SOFTWARE\WOW6432Node\Microsoft\Office\ClickToRun\ProductReleaseIDs"
  91. )
  92. set "_LicensesPath=%_InstallRoot%\Licenses16"
  93. set "_Integrator=%_InstallRoot%\integration\integrator.exe"
  94. for /f "skip=2 tokens=2*" %%a in ('"reg query %_PRIDs% /v ActiveConfiguration" %_Nul_2e%') do set "_PRIDs=%_PRIDs%\%%b"
  95.  
  96. if "%ProductIds%" equ "" (
  97. set "msg=Could not detect Office ProductIDs..."
  98. goto :end
  99. )
  100. if not exist "!_LicensesPath!\*.xrm-ms" (
  101. set "msg=Could not detect Office Licenses files..."
  102. goto :end
  103. )
  104. if not exist "!_Integrator!" (
  105. set "msg=Could not detect Office Licenses Integrator..."
  106. goto :end
  107. )
  108. if %winbuild% lss 9200 if not exist "!_OSPP!" (
  109. set "msg=Could not detect Licensing tool OSPP.vbs..."
  110. goto :end
  111. )
  112. if %winbuild% geq 10240 set _O365asO2019=0
  113. if exist "!_LicensesPath!\Word2019VL_KMS_Client_AE*.xrm-ms" (set "tag=2019") else (set "tag=")
  114.  
  115. :Check
  116. echo.
  117. echo ============================================================
  118. echo Checking Office Licenses...
  119. echo ============================================================
  120. if %winbuild% geq 9200 (
  121. set spp=SoftwareLicensingProduct
  122. set sps=SoftwareLicensingService
  123. ) else (
  124. set spp=OfficeSoftwareProtectionProduct
  125. set sps=OfficeSoftwareProtectionService
  126. )
  127. for /f "tokens=2 delims==" %%# in ('"wmic path %sps% get version /value" %_Nul_2e%') do set ver=%%#
  128. 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)
  129. wmic path %spp% where (Description like '%%TIMEBASED%%') get LicenseFamily %_Nul_2% | findstr /i /C:"Office" %_Nul_1% && (set _Time=1) || (set _Time=0)
  130. wmic path %spp% where (Description like '%%Grace%%') get LicenseFamily %_Nul_2% | findstr /i /C:"Office" %_Nul_1% && (set _Grace=1) || (set _Grace=0)
  131. if %_Time% equ 0 if %_Grace% equ 0 if %_KMS% equ 1 (
  132. set "msg=No Conversion or Cleanup Required..."
  133. goto :end
  134. )
  135.  
  136. :Retail2Volume
  137. echo.
  138. echo ============================================================
  139. echo Cleaning Current Office Licenses...
  140. echo ============================================================
  141.  
  142. echo.
  143. echo ============================================================
  144. echo Installing Office Volume Licenses...
  145. echo ============================================================
  146. echo.
  147. set O19Ids=ProPlus2019,ProjectPro2019,VisioPro2019,Standard2019,ProjectStd2019,VisioStd2019
  148. set O16Ids=ProjectPro,VisioPro,Standard,ProjectStd,VisioStd
  149. set A19Ids=Excel2019,Outlook2019,PowerPoint2019,Publisher2019,Word2019
  150. set A16Ids=Excel,OneNote,Outlook,PowerPoint,Publisher,Word
  151.  
  152. echo %ProductIds%> "!_tempdir!\ProductIds.txt"
  153. for %%a in (Mondo,%O19Ids%,%A19Ids%,Access2019,SkypeforBusiness2019,Professional2019,HomeBusiness2019,HomeStudent2019,O365ProPlus,O365Business,O365SmallBusPrem,O365HomePrem,O365EduCloud,Professional,HomeBusiness,HomeStudent,%O16Ids%,%A16Ids%,Access,SkypeforBusiness,ProPlus) do (
  154. set _%%a=0
  155. )
  156. for %%a in (Mondo,%O19Ids%,%A19Ids%,Access2019,SkypeforBusiness2019,Professional2019,HomeBusiness2019,HomeStudent2019,O365ProPlus,O365Business,O365SmallBusPrem,O365HomePrem,O365EduCloud,Professional,HomeBusiness,HomeStudent,%O16Ids%,%A16Ids%,Access,SkypeforBusiness) do (
  157. findstr /I /C:"%%aRetail" "!_tempdir!\ProductIds.txt" %_Nul_1% && set _%%a=1
  158. )
  159. wmic path %spp% get LicenseFamily > "!_tempdir!\sppchk.txt" 2>&1
  160. for %%a in (Mondo,%O19Ids%,%A19Ids%,Access2019,SkypeforBusiness2019,%O16Ids%,%A16Ids%,Access,SkypeforBusiness) do (
  161. findstr /I /C:"%%aVolume" "!_tempdir!\ProductIds.txt" %_Nul_1% && (
  162. find /i "%%aVL_KMS_Client" "!_tempdir!\sppchk.txt" %_Nul_1% && (set _%%a=0) || (set _%%a=1)
  163. )
  164. )
  165. reg query %_PRIDs%\ProPlusRetail.16 %_Nul_1_2% && set _ProPlus=1
  166. reg query %_PRIDs%\ProPlusVolume.16 %_Nul_1_2% && (
  167. find /i "Office16ProPlusVL_KMS_Client" "!_tempdir!\sppchk.txt" %_Nul_1% && (set _ProPlus=0) || (set _ProPlus=1)
  168. )
  169. del /f /q "!_tempdir!\sppchk.txt" >nul 2>&1
  170. del /f /q "!_tempdir!\ProductIds.txt" >nul 2>&1
  171.  
  172. if !_Mondo! equ 1 (
  173. echo Mondo Suite
  174. echo.
  175. call :InsLic Mondo
  176. )
  177. if !_O365ProPlus! equ 1 (
  178. if !_O365asO2019! equ 1 (
  179. if !_Mondo! equ 0 (
  180. echo O365ProPlus Suite -^> ProPlus%tag% Licenses
  181. echo.
  182. call :InsLic ProPlus%tag%
  183. )
  184. ) else (
  185. echo O365ProPlus Suite -^> Mondo Licenses
  186. echo.
  187. call :InsLic O365ProPlus DRNV7-VGMM2-B3G9T-4BF84-VMFTK
  188. if !_Mondo! equ 0 call :InsLic Mondo
  189. )
  190. )
  191. if !_O365Business! equ 1 if !_O365ProPlus! equ 0 (
  192. set _O365ProPlus=1
  193. echo O365Business Suite -^> Mondo Licenses
  194. echo.
  195. call :InsLic O365Business NCHRJ-3VPGW-X73DM-6B36K-3RQ6B
  196. if !_Mondo! equ 0 call :InsLic Mondo
  197. )
  198. if !_O365SmallBusPrem! equ 1 if !_O365Business! equ 0 if !_O365ProPlus! equ 0 (
  199. set _O365ProPlus=1
  200. echo O365SmallBusPrem Suite -^> Mondo Licenses
  201. echo.
  202. call :InsLic O365SmallBusPrem 3FBRX-NFP7C-6JWVK-F2YGK-H499R
  203. if !_Mondo! equ 0 call :InsLic Mondo
  204. )
  205. if !_O365HomePrem! equ 1 if !_O365SmallBusPrem! equ 0 if !_O365Business! equ 0 if !_O365ProPlus! equ 0 (
  206. set _O365ProPlus=1
  207. echo O365HomePrem Suite -^> Mondo Licenses
  208. echo.
  209. call :InsLic O365HomePrem 9FNY8-PWWTY-8RY4F-GJMTV-KHGM9
  210. if !_Mondo! equ 0 call :InsLic Mondo
  211. )
  212. if !_O365EduCloud! equ 1 if !_O365HomePrem! equ 0 if !_O365SmallBusPrem! equ 0 if !_O365Business! equ 0 if !_O365ProPlus! equ 0 (
  213. set _O365ProPlus=1
  214. echo O365EduCloud Suite -^> Mondo Licenses
  215. echo.
  216. call :InsLic O365EduCloud 8843N-BCXXD-Q84H8-R4Q37-T3CPT
  217. if !_Mondo! equ 0 call :InsLic Mondo
  218. )
  219. if !_Mondo! equ 1 if !_O365ProPlus! equ 0 (
  220. call :InsLic O365ProPlus DRNV7-VGMM2-B3G9T-4BF84-VMFTK
  221. goto :GVLK
  222. )
  223. if !_ProPlus2019! equ 1 if !_O365ProPlus! equ 0 (
  224. echo ProPlus2019 Suite -^> ProPlus%tag% Licenses
  225. echo.
  226. call :InsLic ProPlus%tag%
  227. )
  228. if !_ProPlus! equ 1 if !_O365ProPlus! equ 0 if !_ProPlus2019! equ 0 (
  229. echo ProPlus 2016 Suite -^> ProPlus%tag% Licenses
  230. echo.
  231. call :InsLic ProPlus%tag%
  232. )
  233. if !_Professional2019! equ 1 if !_O365ProPlus! equ 0 if !_ProPlus2019! equ 0 if !_ProPlus! equ 0 (
  234. echo Professional2019 Suite -^> ProPlus%tag% Licenses
  235. echo.
  236. call :InsLic ProPlus%tag%
  237. )
  238. if !_Professional! equ 1 if !_O365ProPlus! equ 0 if !_ProPlus2019! equ 0 if !_ProPlus! equ 0 if !_Professional2019! equ 0 (
  239. echo Professional 2016 Suite -^> ProPlus%tag% Licenses
  240. echo.
  241. call :InsLic ProPlus%tag%
  242. )
  243. if !_Standard2019! equ 1 if !_O365ProPlus! equ 0 if !_ProPlus2019! equ 0 if !_ProPlus! equ 0 if !_Professional2019! equ 0 if !_Professional! equ 0 (
  244. echo Standard2019 Suite -^> Standard2019 Licenses
  245. echo.
  246. call :InsLic Standard2019
  247. )
  248. if !_Standard! equ 1 if !_O365ProPlus! equ 0 if !_ProPlus2019! equ 0 if !_ProPlus! equ 0 if !_Professional2019! equ 0 if !_Professional! equ 0 if !_Standard2019! equ 0 (
  249. echo Standard 2016 Suite -^> Standard%tag% Licenses
  250. echo.
  251. call :InsLic Standard%tag%
  252. )
  253. for %%a in (ProjectPro,VisioPro,ProjectStd,VisioStd) do if !_%%a2019! equ 1 (
  254. echo %%a2019 SKU -^> %%a%tag% Licenses
  255. echo.
  256. if defined tag (call :InsLic %%a2019) else (call :InsLic %%a)
  257. )
  258. for %%a in (ProjectPro,VisioPro,ProjectStd,VisioStd) do if !_%%a! equ 1 (
  259. if !_%%a2019! equ 0 (
  260. echo %%a 2016 SKU -^> %%a%tag% Licenses
  261. echo.
  262. call :InsLic %%a%tag%
  263. )
  264. )
  265. for %%a in (HomeBusiness2019,HomeStudent2019) do if !_%%a! equ 1 (
  266. if !_O365ProPlus! equ 0 if !_ProPlus2019! equ 0 if !_ProPlus! equ 0 if !_Professional2019! equ 0 if !_Professional! equ 0 if !_Standard2019! equ 0 if !_Standard! equ 0 (
  267. set _Standard2019=1
  268. echo %%a Suite -^> Standard2019 Licenses
  269. echo.
  270. call :InsLic Standard2019
  271. )
  272. )
  273. for %%a in (HomeBusiness,HomeStudent) do if !_%%a! equ 1 (
  274. if !_O365ProPlus! equ 0 if !_ProPlus2019! equ 0 if !_ProPlus! equ 0 if !_Professional2019! equ 0 if !_Professional! equ 0 if !_Standard2019! equ 0 if !_Standard! equ 0 if !_%%a2019! equ 0 (
  275. set _Standard2019=1
  276. echo %%a 2016 Suite -^> Standard%tag% Licenses
  277. echo.
  278. call :InsLic Standard%tag%
  279. )
  280. )
  281. for %%a in (%A19Ids%,OneNote) do if !_%%a! equ 1 (
  282. if !_O365ProPlus! equ 0 if !_ProPlus2019! equ 0 if !_ProPlus! equ 0 if !_Professional2019! equ 0 if !_Professional! equ 0 if !_Standard2019! equ 0 if !_Standard! equ 0 (
  283. echo %%a App
  284. echo.
  285. call :InsLic %%a
  286. )
  287. )
  288. for %%a in (Excel,Outlook,PowerPoint,Publisher,Word) do if !_%%a! equ 1 (
  289. if !_O365ProPlus! equ 0 if !_ProPlus2019! equ 0 if !_ProPlus! equ 0 if !_Professional2019! equ 0 if !_Professional! equ 0 if !_Standard2019! equ 0 if !_Standard! equ 0 if !_%%a2019! equ 0 (
  290. echo %%a App
  291. echo.
  292. call :InsLic %%a%tag%
  293. )
  294. )
  295. for %%a in (Access2019) do if !_%%a! equ 1 (
  296. if !_O365ProPlus! equ 0 if !_ProPlus2019! equ 0 if !_ProPlus! equ 0 if !_Professional2019! equ 0 if !_Professional! equ 0 (
  297. echo %%a App
  298. echo.
  299. call :InsLic %%a
  300. )
  301. )
  302. for %%a in (Access) do if !_%%a! equ 1 (
  303. if !_O365ProPlus! equ 0 if !_ProPlus2019! equ 0 if !_ProPlus! equ 0 if !_Professional2019! equ 0 if !_Professional! equ 0 if !_%%a2019! equ 0 (
  304. echo %%a App
  305. echo.
  306. call :InsLic %%a%tag%
  307. )
  308. )
  309. for %%a in (SkypeforBusiness2019) do if !_%%a! equ 1 (
  310. if !_O365ProPlus! equ 0 if !_ProPlus2019! equ 0 if !_ProPlus! equ 0 (
  311. echo %%a App
  312. echo.
  313. call :InsLic %%a
  314. )
  315. )
  316. for %%a in (SkypeforBusiness) do if !_%%a! equ 1 (
  317. if !_O365ProPlus! equ 0 if !_ProPlus2019! equ 0 if !_ProPlus! equ 0 if !_%%a2019! equ 0 (
  318. echo %%a App
  319. echo.
  320. call :InsLic %%a%tag%
  321. )
  322. )
  323. goto :GVLK
  324.  
  325. :InsLic
  326. set "_ID=%1Volume"
  327. set "_pkey="
  328. if not "%2"=="" (
  329. set "_ID=%1Retail"
  330. set "_pkey=PidKey=%2"
  331. )
  332. reg delete %_Config% /f /v %_ID%.OSPPReady %_Nul_1_2%
  333. "!_Integrator!" /I /License PRIDName=%_ID%.16 %_pkey% PackageGUID="%_GUID%" PackageRoot="!_InstallRoot!" %_Nul_1%
  334. reg add %_Config% /f /v %_ID%.OSPPReady /t REG_SZ /d 1 %_Nul_1%
  335. reg query %_Config% /v ProductReleaseIds | findstr /I "%_ID%" %_Nul_1%
  336. if %errorlevel% neq 0 (
  337. 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%
  338. )
  339. exit /b
  340.  
  341. :GVLK
  342. echo ============================================================
  343. echo Installing Missing KMS Client Keys...
  344. echo ============================================================
  345. echo.
  346. for /f "tokens=2 delims==" %%# in ('"wmic path %spp% where (Description like '%%KMSCLIENT%%' AND LicenseFamily like 'Office%%' AND PartialProductKey=NULL) get ID /value" %_Nul_2e%') do (set app=%%#&call :InsKey)
  347. if exist "%SystemRoot%\System32\spp\store_test\2.0\tokens.dat" (
  348. echo.
  349. echo ============================================================
  350. echo Refreshing Windows Insider Preview Licenses...
  351. echo ============================================================
  352. echo.
  353. cscript //Nologo //B %_SLMGR% /rilc
  354. )
  355. set "msg=Finished"
  356. goto :end
  357.  
  358. :InsKey
  359. if /i '%app%' equ 'e914ea6e-a5fa-4439-a394-a9bb3293ca09' exit /b
  360. if /i '%app%' equ '0bc88885-718c-491d-921f-6f214349e79c' exit /b
  361. if /i '%app%' equ 'fc7c4d0c-2e85-4bb9-afd4-01ed1476b5e9' exit /b
  362. if /i '%app%' equ '500f6619-ef93-4b75-bcb4-82819998a3ca' exit /b
  363. set "key="
  364. for /f "tokens=2 delims==" %%# in ('"wmic path %spp% where ID='%app%' get LicenseFamily /value"') do echo %%#
  365. call "!_workdir!\x86\keyOff.cmd" %app%
  366. if "%key%" equ "" (echo Could not find matching gVLK&echo.&exit /b)
  367. wmic path %sps% where version='%ver%' call InstallProductKey ProductKey="%key%" %_Nul_1_2%
  368. set ERRORCODE=%ERRORLEVEL%
  369. if %ERRORCODE% neq 0 (
  370. cmd /c exit /b %ERRORCODE%
  371. echo Failed: 0x!=ExitCode!
  372. )
  373. echo.
  374. exit /b
  375.  
  376. :end
  377. echo.
  378. echo ============================================================
  379. echo %msg%
  380. echo ============================================================
  381. echo.
  382. echo Press any key to exit...
  383. if %_Debug% EQU 0 pause >nul
  384. goto :eof
Advertisement
Add Comment
Please, Sign In to add comment