\{$id\}" -and -not ($file.Name -match 'Beta|Test')) {
- $fileIds += $id
- }
- }
- }
- }
- }
-
- if ($kmsCountedIdCounts.Count -gt 0) {
- $idWithMostIds = $kmsCountedIdCounts.GetEnumerator() | Sort-Object Value -Descending
- $fileIds = $idWithMostIds | Select-Object -ExpandProperty Key
- }
- else {
- if ($fileIds.Count -eq 0) {
- $fileIds = $orderedLicenses
- }
-
- $fileIds = $orderedLicenses | Where-Object { $fileIds -contains $_ -and $muiLockedIds -notcontains $_ } | Select-Object -Unique
- }
-
- [void]$w::SLClose($hSLC)
-
- $pkeyconfig = "$SysPath\spp\tokens\pkeyconfig\pkeyconfig.xrm-ms"
- if ($keytype -eq 'kmshost') {
- $csvlkPath = "$SysPath\spp\tokens\pkeyconfig\pkeyconfig-csvlk.xrm-ms"
- if (Test-Path $csvlkPath) {
- $pkeyconfig = $csvlkPath
- }
- }
-
- $data = [xml][Text.Encoding]::UTF8.GetString([Convert]::FromBase64String(([xml](get-content $pkeyconfig)).licenseGroup.license.otherInfo.infoTables.infoList.infoBin.InnerText))
-
- $betaIds = @()
- $excludedIds = @()
- $checkedIds = @()
-
- foreach ($id in $fileIds) {
- $actConfig = $data.ProductKeyConfiguration.Configurations.Configuration | Where-Object { $_.ActConfigId -eq "{$id}" }
- if ($actConfig) {
- $productDescription = $actConfig.ProductDescription
- $productEditionID = $actConfig.EditionID
- if ($productDescription -match 'MUI locked|Tencent|Qihoo|WAU') {
- $excludedIds += $id
- continue
- }
-
- if ($productDescription -match 'Beta|RC |Next |Test|Pre-') {
- $betaIds += $id
- continue
- }
-
- if ($keytype -ne 'kmshost' -and $productEditionID -eq '$edition') {
- $checkedIds += $id
- continue
- }
-
- $refGroupId = $actConfig.RefGroupId
- $publicKey = $data.ProductKeyConfiguration.PublicKeys.PublicKey | Where-Object { $_.GroupId -eq $refGroupId -and $_.AlgorithmId -eq 'msft:rm/algorithm/pkey/2009' }
- if ($publicKey) {
- $keyRanges = $data.ProductKeyConfiguration.KeyRanges.KeyRange | Where-Object { $_.RefActConfigId -eq "{$id}" }
- foreach ($keyRange in $keyRanges) {
- if ($keyRange.EulaType -match 'WAU') {
- $excludedIds += $id
- break
- }
- }
- }
- }
- }
-
- $prefinalIds = @()
- $finalIds = @()
-
- $prefinalIds = $fileIds | Where-Object { $excludedIds -notcontains $_ } | Select-Object -Unique
- $finalIds = $prefinalIds | Where-Object { $betaIds -notcontains $_ } | Select-Object -Unique
-
- if ($finalIds.Count -eq 0) {
- $finalIds = $prefinalIds
- }
-
- if ($checkedIds.Count -gt 0) {
- $finalIds = $checkedIds + $finalIds
- }
-
- $firstId = $finalIds | Select-Object -First 1
- return $firstId.ToLower()
-}
-
-Windows-ActID -edition "$env:tsedition" -keytype "$env:keytype"
-:wintsid:
-
-::========================================================================================================================================
-
-:: Get Office Activation ID
-
-:offtsid:
-function Office-ActID {
- param (
- [string]$pkeypath,
- [string]$edition,
- [string]$keytype
- )
-
- switch ($keytype) {
- "zero" { $productKeyTypes = @("OEM:NONSLP","Volume:MAK","Retail") }
- "ks" { $productKeyTypes = @("Volume:GVLK") }
- }
-
- $data = [xml][Text.Encoding]::UTF8.GetString([Convert]::FromBase64String(([xml](Get-Content $pkeypath)).licenseGroup.license.otherInfo.infoTables.infoList.infoBin.InnerText))
- $configurations = $data.ProductKeyConfiguration.Configurations.Configuration
-
- $filteredConfigs = @()
- foreach ($type in $productKeyTypes) {
- $filteredConfigs += $configurations | Where-Object {
- $_.EditionId -eq $edition -and
- $_.ProductKeyType -eq $type -and
- $_.ProductDescription -notmatch 'demo|MSDN|PIN'
- }
- }
-
- $filterPreview = $filteredConfigs | Where-Object { $_.ProductDescription -notmatch 'preview|c2r' }
-
- if ($filterPreview.Count -ne 0) {
- $filteredConfigs = $filterPreview
- }
-
- $firstConfig = ($filteredConfigs | Select-Object -First 1).ActConfigID -replace '^\{|\}$', ''
- return $firstConfig.ToLower()
-}
-
-Office-ActID -pkeypath "$env:pkeypath" -edition "$env:_License" -keytype "$env:keytype"
-:offtsid:
-
-::========================================================================================================================================
-
-:: 1st column = Office version number
-:: 2nd column = Activation ID
-:: 3rd column = Product ID from branding.xml
-:: 4th column = Edition
-:: 5th column = Other Edition IDs if they are part of the same primary product (For reference only)
-:: Separator = "_"
-
-:msiofficedata
-
-for %%# in (
-14_4d463c2c-0505-4626-8cdb-a4da82e2d8ed_0015_AccessR
-14_745fb377-0a59-4ca9-b9a9-c359557a2c4e_001C_AccessRuntimeR
-14_95ab3ec8-4106-4f9d-b632-03c019d1d23f_0015_AccessVL
-14_4eaff0d0-c6cb-4187-94f3-c7656d49a0aa_0016_ExcelR_[HSExcelR]
-14_71dc86ff-f056-40d0-8ffb-9592705c9b76_0016_ExcelVL
-14_7004b7f0-6407-4f45-8eac-966e5f868bde_00BA_GrooveR
-14_fdad0dfa-417d-4b4f-93e4-64ea8867b7fd_00BA_GrooveVL
-14_7b7d1f17-fdcb-4820-9789-9bec6e377821_0013_HomeBusinessR_[HomeBusinessDemoR]
-14_19316117-30a8-4773-8fd9-7f7231f4e060_011E_HomeBusinessSubR
-14_09e2d37e-474b-4121-8626-58ad9be5776f_002F_HomeStudentR_[HomeStudentDemoR]
-14_ef1da464-01c8-43a6-91af-e4e5713744f9_0044_InfoPathR
-14_85e22450-b741-430c-a172-a37962c938af_0044_InfoPathVL
-14_14f5946a-debc-4716-babc-7e2c240fec08_000F_MondoR
-14_533b656a-4425-480b-8e30-1a2358898350_000F_MondoVL
-14_c1ceda8b-c578-4d5d-a4aa-23626be4e234_003D_ProfessionalR_[OEM-SingleImage]Exception
-14_3f7aa693-9a7e-44fc-9309-bb3d8e604925_00A1_OneNoteR_[HSOneNoteR]
-14_6860b31f-6a67-48b8-84b9-e312b3485c4b_00A1_OneNoteVL
-14_fbf4ac36-31c8-4340-8666-79873129cf40_001A_OutlookR
-14_a9aeabd8-63b8-4079-a28e-f531807fd6b8_001A_OutlookVL
-14_acb51361-c0db-4895-9497-1831c41f31a6_0033_PersonalR_[PersonalDemoR,PersonalPrepaidR]
-14_133c8359-4e93-4241-8118-30bb18737ea0_0018_PowerPointR_[HSPowerPointR]
-14_38252940-718c-4aa6-81a4-135398e53851_0018_PowerPointVL
-14_8b559c37-0117-413e-921b-b853aeb6e210_0014_ProfessionalR_[ProfessionalAcadR,ProfessionalDemoR]
-14_725714d7-d58f-4d12-9fa8-35873c6f7215_003B_ProjectProR_[ProjectProMSDNR]
-14_4d06f72e-fd50-4bc2-a24b-d448d7f17ef2_011F_ProjectProSubR
-14_1cf57a59-c532-4e56-9a7d-ffa2fe94b474_003B_ProjectProVL
-14_688f6589-2bd9-424e-a152-b13f36aa6de1_003A_ProjectStdR
-14_11b39439-6b93-4642-9570-f2eb81be2238_003A_ProjectStdVL
-14_71af7e84-93e6-4363-9b69-699e04e74071_0011_ProPlusR_[ProPlusAcadR,ProPlusMSDNR,Sub4R]
-14_e98ef0c0-71c4-42ce-8305-287d8721e26c_011D_ProPlusSubR
-14_fdf3ecb9-b56f-43b2-a9b8-1b48b6bae1a7_0011_ProPlusVL_[ProPlusAcadVL]
-14_98677603-a668-4fa4-9980-3f1f05f78f69_0019_PublisherR
-14_3d014759-b128-4466-9018-e80f6320d9d0_0019_PublisherVL
-14_dbe3aee0-5183-4ff7-8142-66050173cb01_008B_SmallBusBasicsR_[SmallBusBasicsMSDNR]
-14_8090771e-d41a-4482-929e-de87f1f47e46_008B_SmallBusBasicsVL
-14_b78df69e-0966-40b1-ae85-30a5134dedd0_0017_SPDR
-14_d3422cfb-8d8b-4ead-99f9-eab0ccd990d7_0012_StandardR
-14_1f76e346-e0be-49bc-9954-70ec53a4fcfe_0012_StandardVL_[StandardAcadVL]
-14_2745e581-565a-4670-ae90-6bf7c57ffe43_0066_StarterR
-14_66cad568-c2dc-459d-93ec-2f3cb967ee34_0057_VisioSIR_Prem[Pro,Std]Exception
-14_36756cb8-8e69-4d11-9522-68899507cd6a_0057_VisioSIVL_Prem[Pro,Std]Exception
-14_db3bbc9c-ce52-41d1-a46f-1a1d68059119_001B_WordR_[HSWordR]
-14_98d4050e-9c98-49bf-9be1-85e12eb3ab13_001B_WordVL
-:: Office 2013
-15_ab4d047b-97cf-4126-a69f-34df08e2f254_0015_AccessRetail
-15_259de5be-492b-44b3-9d78-9645f848f7b0_001C_AccessRuntimeRetail
-15_4374022d-56b8-48c1-9bb7-d8f2fc726343_0015_AccessVolume
-15_1b1d9bd5-12ea-4063-964c-16e7e87d6e08_0016_ExcelRetail
-15_ac1ae7fd-b949-4e04-a330-849bc40638cf_0016_ExcelVolume
-15_cfaf5356-49e3-48a8-ab3c-e729ab791250_00BA_GrooveRetail
-15_4825ac28-ce41-45a7-9e6e-1fed74057601_00BA_GrooveVolume
-15_c02fb62e-1cd5-4e18-ba25-e0480467ffaa_00E7_HomeBusinessPipcRetail
-15_cd256150-a898-441f-aac0-9f8f33390e45_0013_HomeBusinessRetail
-15_1fdfb4e4-f9c9-41c4-b055-c80daf00697d_00CE_HomeStudentARMRetail
-15_ebef9f05-5273-404a-9253-c5e252f50555_00DA_HomeStudentPlusARMRetail
-15_98685d21-78bd-4c62-bc4f-653344a63035_002F_HomeStudentRetail
-15_44984381-406e-4a35-b1c3-e54f499556e2_0044_InfoPathRetail
-15_9e016989-4007-42a6-8051-64eb97110cf2_0044_InfoPathVolume
-15_9103f3ce-1084-447a-827e-d6097f68c895_00EA_LyncAcademicRetail
-15_ff693bf4-0276-4ddb-bb42-74ef1a0c9f4d_012D_LyncEntryRetail
-15_fada6658-bfc6-4c4e-825a-59a89822cda8_012C_LyncRetail
-15_e1264e10-afaf-4439-a98b-256df8bb156f_012C_LyncVolume
-15_3169c8df-f659-4f95-9cc6-3115e6596e83_000F_MondoRetail
-15_f33485a0-310b-4b72-9a0e-b1d605510dbd_000F_MondoVolume
-15_3391e125-f6e4-4b1e-899c-a25e6092d40d_00A1_OneNoteFreeRetail
-15_8b524bcc-67ea-4876-a509-45e46f6347e8_00A1_OneNoteRetail
-15_b067e965-7521-455b-b9f7-c740204578a2_00A1_OneNoteVolume
-15_12004b48-e6c8-4ffa-ad5a-ac8d4467765a_001A_OutlookRetail
-15_8d577c50-ae5e-47fd-a240-24986f73d503_001A_OutlookVolume
-15_5aab8561-1686-43f7-9ff5-2c861da58d17_00E6_PersonalPipcRetail
-15_17e9df2d-ed91-4382-904b-4fed6a12caf0_0033_PersonalRetail
-15_31743b82-bfbc-44b6-aa12-85d42e644d5b_0018_PowerPointRetail
-15_e40dcb44-1d5c-4085-8e8f-943f33c4f004_0018_PowerPointVolume
-15_4e26cac1-e15a-4467-9069-cb47b67fe191_00E8_ProfessionalPipcRetail
-15_44bc70e2-fb83-4b09-9082-e5557e0c2ede_0014_ProfessionalRetail
-15_f2435de4-5fc0-4e5b-ac97-34f515ec5ee7_003B_ProjectProRetail
-15_ed34dc89-1c27-4ecd-8b2f-63d0f4cedc32_003B_ProjectProVolume
-15_5517e6a2-739b-4822-946f-7f0f1c5934b1_003A_ProjectStdRetail
-15_2b9e4a37-6230-4b42-bee2-e25ce86c8c7a_003A_ProjectStdVolume
-15_064383fa-1538-491c-859b-0ecab169a0ab_0011_ProPlusRetail
-15_2b88c4f2-ea8f-43cd-805e-4d41346e18a7_0011_ProPlusVolume
-15_c3a0814a-70a4-471f-af37-2313a6331111_0019_PublisherRetail
-15_38ea49f6-ad1d-43f1-9888-99a35d7c9409_0019_PublisherVolume
-15_ba3e3833-6a7e-445a-89d0-7802a9a68588_0017_SPDRetail
-15_32255c0a-16b4-4ce2-b388-8a4267e219eb_0012_StandardRetail
-15_a24cca51-3d54-4c41-8a76-4031f5338cb2_0012_StandardVolume
-15_15d12ad4-622d-4257-976c-5eb3282fb93d_0051_VisioProRetail
-15_3e4294dd-a765-49bc-8dbd-cf8b62a4bd3d_0051_VisioProVolume
-15_dae597ce-5823-4c77-9580-7268b93a4b23_0053_VisioStdRetail
-15_44a1f6ff-0876-4edb-9169-dbb43101ee89_0053_VisioStdVolume
-15_191509f2-6977-456f-ab30-cf0492b1e93a_001B_WordRetail
-15_9cedef15-be37-4ff0-a08a-13a045540641_001B_WordVolume
-:: Office 365 - 15.0 version
-15_befee371-a2f5-4648-85db-a2c55fdf324c_00E9_O365BusinessRetail
-15_537ea5b5-7d50-4876-bd38-a53a77caca32_00D6_O365HomePremRetail
-15_149dbce7-a48e-44db-8364-a53386cd4580_00D4_O365ProPlusRetail
-15_bacd4614-5bef-4a5e-bafc-de4c788037a2_00D5_O365SmallBusPremRetail
-:: Office 365 - 16.0 version
-16_6337137e-7c07-4197-8986-bece6a76fc33_00E9_O365BusinessRetail
-16_2f5c71b4-5b7a-4005-bb68-f9fac26f2ea3_00D6_O365EduCloudRetail
-16_537ea5b5-7d50-4876-bd38-a53a77caca32_00D6_O365HomePremRetail
-16_149dbce7-a48e-44db-8364-a53386cd4580_00D4_O365ProPlusRetail
-16_bacd4614-5bef-4a5e-bafc-de4c788037a2_00D5_O365SmallBusPremRetail
-:: Office 2016
-16_bfa358b0-98f1-4125-842e-585fa13032e6_0015_AccessRetail
-16_9d9faf9e-d345-4b49-afce-68cb0a539c7c_001C_AccessRuntimeRetail
-16_3b2fa33f-cd5a-43a5-bd95-f49f3f546b0b_0015_AccessVolume
-16_424d52ff-7ad2-4bc7-8ac6-748d767b455d_0016_ExcelRetail
-16_685062a7-6024-42e7-8c5f-6bb9e63e697f_0016_ExcelVolume
-16_c02fb62e-1cd5-4e18-ba25-e0480467ffaa_00E7_HomeBusinessPipcRetail
-16_86834d00-7896-4a38-8fae-32f20b86fa2b_0013_HomeBusinessRetail
-16_090896a0-ea98-48ac-b545-ba5da0eb0c9c_00CE_HomeStudentARMRetail
-16_6bbe2077-01a4-4269-bf15-5bf4d8efc0b2_00DA_HomeStudentPlusARMRetail
-16_c28acdb8-d8b3-4199-baa4-024d09e97c99_002F_HomeStudentRetail
-16_e2127526-b60c-43e0-bed1-3c9dc3d5a468_002F_HomeStudentVNextRetail
-16_b21367df-9545-4f02-9f24-240691da0e58_000F_MondoRetail
-16_2cd0ea7e-749f-4288-a05e-567c573b2a6c_000F_MondoVolume
-16_436366de-5579-4f24-96db-3893e4400030_00A3_OneNoteFreeRetail
-16_83ac4dd9-1b93-40ed-aa55-ede25bb6af38_00A1_OneNoteRetail
-16_23b672da-a456-4860-a8f3-e062a501d7e8_00A1_OneNoteVolume
-16_5a670809-0983-4c2d-8aad-d3c2c5b7d5d1_001A_OutlookRetail
-16_50059979-ac6f-4458-9e79-710bcb41721a_001A_OutlookVolume
-16_5aab8561-1686-43f7-9ff5-2c861da58d17_00E6_PersonalPipcRetail
-16_a9f645a1-0d6a-4978-926a-abcb363b72a6_0033_PersonalRetail
-16_f32d1284-0792-49da-9ac6-deb2bc9c80b6_0018_PowerPointRetail
-16_9b4060c9-a7f5-4a66-b732-faf248b7240f_0018_PowerPointVolume
-16_4e26cac1-e15a-4467-9069-cb47b67fe191_00E8_ProfessionalPipcRetail
-16_d64edc00-7453-4301-8428-197343fafb16_0014_ProfessionalRetail
-16_0f42f316-00b1-48c5-ada4-2f52b5720ad0_003B_ProjectProRetail
-16_82f502b5-b0b0-4349-bd2c-c560df85b248_003B_ProjectProVolume
-16_16728639-a9ab-4994-b6d8-f81051e69833_003B_ProjectProXVolume
-16_e9f0b3fc-962f-4944-ad06-05c10b6bcd5e_003A_ProjectStdRetail
-16_82e6b314-2a62-4e51-9220-61358dd230e6_003A_ProjectStdVolume
-16_431058f0-c059-44c5-b9e7-ed2dd46b6789_003A_ProjectStdXVolume
-16_de52bd50-9564-4adc-8fcb-a345c17f84f9_0011_ProPlusRetail
-16_c47456e3-265d-47b6-8ca0-c30abbd0ca36_0011_ProPlusVolume
-16_6e0c1d99-c72e-4968-bcb7-ab79e03e201e_0019_PublisherRetail
-16_fcc1757b-5d5f-486a-87cf-c4d6dedb6032_0019_PublisherVolume
-16_971cd368-f2e1-49c1-aedd-330909ce18b6_012D_SkypeforBusinessEntryRetail
-16_418d2b9f-b491-4d7f-84f1-49e27cc66597_012C_SkypeforBusinessRetail
-16_03ca3b9a-0869-4749-8988-3cbc9d9f51bb_012C_SkypeforBusinessVolume
-16_9103f3ce-1084-447a-827e-d6097f68c895_012C_SkypeServiceBypassRetail
-16_4a31c291-3a12-4c64-b8ab-cd79212be45e_0012_StandardRetail
-16_0ed94aac-2234-4309-ba29-74bdbb887083_0012_StandardVolume
-16_2dfe2075-2d04-4e43-816a-eb60bbb77574_0051_VisioProRetail
-16_295b2c03-4b1c-4221-b292-1411f468bd02_0051_VisioProVolume
-16_0594dc12-8444-4912-936a-747ca742dbdb_0051_VisioProXVolume
-16_c76dbcbc-d71b-4f45-b5b3-b7494cb4e23e_0053_VisioStdRetail
-16_44151c2d-c398-471f-946f-7660542e3369_0053_VisioStdVolume
-16_1d1c6879-39a3-47a5-9a6d-aceefa6a289d_0053_VisioStdXVolume
-16_cacaa1bf-da53-4c3b-9700-11738ef1c2a5_001B_WordRetail
-16_c3000759-551f-4f4a-bcac-a4b42cbf1de2_001B_WordVolume
-) do (
-for /f "tokens=1-5 delims=_" %%A in ("%%#") do (
-
-if "%oVer%"=="%%A" (
-reg query "%1\Registration\{%%B}" /v ProductCode %nul2% | find /i "-%%C-" %nul% && (
-reg query "%1\Common\InstalledPackages" %nul2% | find /i "-%%C-" %nul% && (
-if defined _oIds (set _oIds=!_oIds! %%D) else (set _oIds=%%D)
-if /i 003D==%%C set SingleImage=1
-)
-)
-)
-
-)
-)
-exit /b
-
-::========================================================================================================================================
-
-:: 1st column = Office version
-:: 2nd column = Volume or free retail product
-:: 3rd column = Retail product names that needs to be converted to the Volume product mentioned in 2nd column
-:: Separator = "_"
-
-:tsksdata
-
-set f=
-for %%# in (
-:: Office 2013
-15_AccessVolume_-AccessRetail-
-15_AccessRuntimeRetail
-15_ExcelVolume_-ExcelRetail-
-15_GrooveVolume_-GrooveRetail-
-15_InfoPathVolume_-InfoPathRetail-
-15_LyncAcademicRetail
-15_LyncEntryRetail
-15_LyncVolume_-LyncRetail-
-15_MondoRetail
-15_MondoVolume_-O365BusinessRetail-O365HomePremRetail-O365ProPlusRetail-O365SmallBusPremRetail-
-15_OneNoteFreeRetail
-15_OneNoteVolume_-OneNoteRetail-
-15_OutlookVolume_-OutlookRetail-
-15_PowerPointVolume_-PowerPointRetail-
-15_ProjectProVolume_-ProjectProRetail-
-15_ProjectStdVolume_-ProjectStdRetail-
-15_ProPlusVolume_-ProPlusRetail-ProfessionalPipcRetail-ProfessionalRetail-
-15_PublisherVolume_-PublisherRetail-
-15_SPDRetail
-15_StandardVolume_-StandardRetail-HomeBusinessPipcRetail-HomeBusinessRetail-HomeStudentARMRetail-HomeStudentPlusARMRetail-HomeStudentRetail-PersonalPipcRetail-PersonalRetail-
-15_VisioProVolume_-VisioProRetail-
-15_VisioStdVolume_-VisioStdRetail-
-15_WordVolume_-WordRetail-
-:: Office 2016
-16_AccessRuntimeRetail
-16_AccessVolume_-AccessRetail-
-16_ExcelVolume_-ExcelRetail-
-16_MondoRetail
-16_MondoVolume_-O365AppsBasicRetail-O365BusinessRetail-O365EduCloudRetail-O365HomePremRetail-O365ProPlusRetail-O365SmallBusPremRetail-
-16_OneNoteFreeRetail
-16_OneNoteVolume_-OneNoteRetail-OneNote2021Retail-
-16_OutlookVolume_-OutlookRetail-
-16_PowerPointVolume_-PowerPointRetail-
-16_ProjectProVolume_-ProjectProRetail-
-16_ProjectProXVolume
-16_ProjectStdVolume_-ProjectStdRetail-
-16_ProjectStdXVolume
-16_ProPlusVolume_-ProPlusRetail-ProfessionalPipcRetail-ProfessionalRetail-
-16_PublisherVolume_-PublisherRetail-
-16_SkypeServiceBypassRetail
-16_SkypeforBusinessEntryRetail
-16_SkypeforBusinessVolume_-SkypeforBusinessRetail-
-16_StandardVolume_-StandardRetail-HomeBusinessPipcRetail-HomeBusinessRetail-HomeStudentARMRetail-HomeStudentPlusARMRetail-HomeStudentRetail-HomeStudentVNextRetail-PersonalPipcRetail-PersonalRetail-
-16_VisioProVolume_-VisioProRetail-
-16_VisioProXVolume
-16_VisioStdVolume_-VisioStdRetail-
-16_VisioStdXVolume
-16_WordVolume_-WordRetail-
-:: Office 2019
-16_AccessRuntime2019Retail
-16_Access2019Volume_-Access2019Retail-
-16_Excel2019Volume_-Excel2019Retail-
-16_Outlook2019Volume_-Outlook2019Retail-
-16_PowerPoint2019Volume_-PowerPoint2019Retail-
-16_ProjectPro2019Volume_-ProjectPro2019Retail-
-16_ProjectStd2019Volume_-ProjectStd2019Retail-
-16_ProPlus2019Volume_-ProPlus2019Retail-Professional2019Retail-
-16_Publisher2019Volume_-Publisher2019Retail-
-16_SkypeforBusiness2019Volume_-SkypeforBusiness2019Retail-
-16_SkypeforBusinessEntry2019Retail
-16_Standard2019Volume_-Standard2019Retail-HomeBusiness2019Retail-HomeStudentARM2019Retail-HomeStudentPlusARM2019Retail-HomeStudent2019Retail-Personal2019Retail-
-16_VisioPro2019Volume_-VisioPro2019Retail-
-16_VisioStd2019Volume_-VisioStd2019Retail-
-16_Word2019Volume_-Word2019Retail-
-:: Office 2021
-:: OneNote2021Volume KMS license is not available
-16_AccessRuntime2021Retail
-16_Access2021Volume_-Access2021Retail-
-16_Excel2021Volume_-Excel2021Retail-
-16_Outlook2021Volume_-Outlook2021Retail-
-16_OneNoteFree2021Retail
-16_PowerPoint2021Volume_-PowerPoint2021Retail-
-16_ProjectPro2021Volume_-ProjectPro2021Retail-
-16_ProjectStd2021Volume_-ProjectStd2021Retail-
-16_ProPlus2021Volume_-ProPlus2021Retail-Professional2021Retail-
-16_Publisher2021Volume_-Publisher2021Retail-
-16_SkypeforBusiness2021Volume_-SkypeforBusiness2021Retail-
-16_Standard2021Volume_-Standard2021Retail-HomeBusiness2021Retail-HomeStudent2021Retail-Personal2021Retail-
-16_VisioPro2021Volume_-VisioPro2021Retail-
-16_VisioStd2021Volume_-VisioStd2021Retail-
-16_Word2021Volume_-Word2021Retail-
-:: Office 2024
-16_Access2024Volume_-Access2024Retail-
-16_Excel2024Volume_-Excel2024Retail-
-16_Outlook2024Volume_-Outlook2024Retail-
-16_PowerPoint2024Volume_-PowerPoint2024Retail-
-16_ProjectPro2024Volume_-ProjectPro2024Retail-
-16_ProjectStd2024Volume_-ProjectStd2024Retail-
-16_ProPlus2024Volume_-ProPlus2024Retail-
-16_SkypeforBusiness2024Volume
-16_Standard2024Volume_-Home2024Retail-HomeBusiness2024Retail-
-16_VisioPro2024Volume_-VisioPro2024Retail-
-16_VisioStd2024Volume_-VisioStd2024Retail-
-16_Word2024Volume_-Word2024Retail-
-) do (
-for /f "tokens=1-3 delims=_" %%A in ("%%#") do (
-
-if %1==chkprod if "%oVer%"=="%%A" if not defined foundprod (
-if /i "%%B"=="%2" set foundprod=1
-)
-
-if %1==getinfo if "%oVer%"=="%%A" (
-echo: %%C | find /i "-%2-" %nul% && (
-set _License=%%B
-set _altoffid=%%B
-)
-)
-
-)
-)
-exit /b
-
-::========================================================================================================================================
-
-:ts_getedition
-
-set tsedition=
-set _wtarget=
-
-if %_wmic% EQU 1 set "chkedi=for /f "tokens=2 delims==" %%a in ('"wmic path %spp% where (ApplicationID='55c92734-d682-4d71-983e-d6ec3f16059f' AND LicenseDependsOn is NULL) get LicenseFamily /VALUE" %nul6%')"
-if %_wmic% EQU 0 set "chkedi=for /f "tokens=2 delims==" %%a in ('%psc% "(([WMISEARCHER]'SELECT LicenseFamily FROM %spp% WHERE ApplicationID=''55c92734-d682-4d71-983e-d6ec3f16059f'' AND LicenseDependsOn is NULL').Get()).LicenseFamily ^| %% {echo ('LicenseFamily='+$_)}" %nul6%')"
-%chkedi% do if not errorlevel 1 call set "_wtarget= !_wtarget! %%a "
-
-:: SKU and Edition ID database
-
-for %%# in (
-1:Ultimate
-2:HomeBasic
-3:HomePremium
-4:Enterprise
-5:HomeBasicN
-6:Business
-7:ServerStandard
-8:ServerDatacenter
-9:ServerSBSStandard
-10:ServerEnterprise
-11:Starter
-12:ServerDatacenterCore
-13:ServerStandardCore
-14:ServerEnterpriseCore
-15:ServerEnterpriseIA64
-16:BusinessN
-17:ServerWeb
-18:ServerHPC
-19:ServerHomeStandard
-20:ServerStorageExpress
-21:ServerStorageStandard
-22:ServerStorageWorkgroup
-23:ServerStorageEnterprise
-24:ServerWinSB
-25:ServerSBSPremium
-26:HomePremiumN
-27:EnterpriseN
-28:UltimateN
-29:ServerWebCore
-30:ServerMediumBusinessManagement
-31:ServerMediumBusinessSecurity
-32:ServerMediumBusinessMessaging
-33:ServerWinFoundation
-34:ServerHomePremium
-35:ServerWinSBV
-36:ServerStandardV
-37:ServerDatacenterV
-38:ServerEnterpriseV
-39:ServerDatacenterVCore
-40:ServerStandardVCore
-41:ServerEnterpriseVCore
-42:ServerHyperCore
-43:ServerStorageExpressCore
-44:ServerStorageStandardCore
-45:ServerStorageWorkgroupCore
-46:ServerStorageEnterpriseCore
-47:StarterN
-48:Professional
-49:ProfessionalN
-50:ServerSolution
-51:ServerForSBSolutions
-52:ServerSolutionsPremium
-53:ServerSolutionsPremiumCore
-54:ServerSolutionEM
-55:ServerForSBSolutionsEM
-56:ServerEmbeddedSolution
-57:ServerEmbeddedSolutionCore
-58:ProfessionalEmbedded
-59:ServerEssentialManagement
-60:ServerEssentialAdditional
-61:ServerEssentialManagementSvc
-62:ServerEssentialAdditionalSvc
-63:ServerSBSPremiumCore
-64:ServerHPCV
-65:Embedded
-66:StarterE
-67:HomeBasicE
-68:HomePremiumE
-69:ProfessionalE
-70:EnterpriseE
-71:UltimateE
-72:EnterpriseEval
-74:Prerelease
-76:ServerMultiPointStandard
-77:ServerMultiPointPremium
-79:ServerStandardEval
-80:ServerDatacenterEval
-81:PrereleaseARM
-82:PrereleaseN
-84:EnterpriseNEval
-85:EmbeddedAutomotive
-86:EmbeddedIndustryA
-87:ThinPC
-88:EmbeddedA
-89:EmbeddedIndustry
-90:EmbeddedE
-91:EmbeddedIndustryE
-92:EmbeddedIndustryAE
-93:ProfessionalPlus
-95:ServerStorageWorkgroupEval
-96:ServerStorageStandardEval
-97:CoreARM
-98:CoreN
-99:CoreCountrySpecific
-100:CoreSingleLanguage
-101:Core
-103:ProfessionalWMC
-104:MobileCore
-105:EmbeddedIndustryEval
-106:EmbeddedIndustryEEval
-107:EmbeddedEval
-108:EmbeddedEEval
-109:CoreSystemServer
-110:ServerCloudStorage
-111:CoreConnected
-112:ProfessionalStudent
-113:CoreConnectedN
-114:ProfessionalStudentN
-115:CoreConnectedSingleLanguage
-116:CoreConnectedCountrySpecific
-117:ConnectedCar
-118:IndustryHandheld
-119:PPIPRO
-120:ServerARM64
-121:Education
-122:EducationN
-123:IoTUAP
-124:ServerHI
-125:EnterpriseS
-126:EnterpriseSN
-127:ProfessionalS
-128:ProfessionalSN
-129:EnterpriseSEval
-130:EnterpriseSNEval
-131:IoTUAPCommercial
-133:MobileEnterprise
-134:AnalogOneCoreEnterprise
-135:AnalogOneCore
-136:Holographic
-138:ProfessionalSingleLanguage
-139:ProfessionalCountrySpecific
-140:EnterpriseSubscription
-141:EnterpriseSubscriptionN
-143:ServerDatacenterNano
-144:ServerStandardNano
-145:ServerDatacenterACor
-146:ServerStandardACor
-147:ServerDatacenterCor
-148:ServerStandardCor
-149:UtilityVM
-159:ServerDatacenterEvalCor
-160:ServerStandardEvalCor
-161:ProfessionalWorkstation
-162:ProfessionalWorkstationN
-163:ServerAzure
-164:ProfessionalEducation
-165:ProfessionalEducationN
-168:ServerAzureCor
-169:ServerAzureNano
-171:EnterpriseG
-172:EnterpriseGN
-173:BusinessSubscription
-174:BusinessSubscriptionN
-175:ServerRdsh
-178:Cloud
-179:CloudN
-180:HubOS
-182:OneCoreUpdateOS
-183:CloudE
-184:Andromeda
-185:IoTOS
-186:CloudEN
-187:IoTEdgeOS
-188:IoTEnterprise
-189:ModernPC
-191:IoTEnterpriseS
-192:SystemOS
-193:NativeOS
-194:GameCoreXbox
-195:GameOS
-196:DurangoHostOS
-197:ScarlettHostOS
-198:Keystone
-199:CloudHost
-200:CloudMOS
-201:CloudCore
-202:CloudEditionN
-203:CloudEdition
-204:WinVOS
-205:IoTEnterpriseSK
-206:IoTEnterpriseK
-207:IoTEnterpriseSEval
-208:AgentBridge
-209:NanoHost
-210:WNC
-406:ServerAzureStackHCICor
-407:ServerTurbine
-408:ServerTurbineCor
-
-REM Some old edition names with same SKU ID
-
-4:ProEnterprise
-6:ProStandard
-10:ProSBS
-16:ProStandardN
-18:ServerComputeCluster
-19:ServerHome
-30:ServerMidmarketStandard
-31:ServerMidmarketEdge
-32:ServerMidmarketPremium
-33:ServerSBSPrime
-42:ServerHyper
-64:ServerComputeClusterV
-85:EmbeddedIapetus
-86:EmbeddedTethys
-88:EmbeddedDione
-89:EmbeddedRhea
-90:EmbeddedEnceladus
-109:ServerNano
-124:ServerCloudHostInfrastructure
-133:MobileBusiness
-134:HololensEnterprise
-145:ServerDatacenterSCor
-146:ServerStandardSCor
-147:ServerDatacenterWSCor
-148:ServerStandardWSCor
-189:Lite
-) do (
-for /f "tokens=1-2 delims=:" %%A in ("%%#") do if "%osSKU%"=="%%A" if not defined tsedition (
-echo "%_wtarget%" | find /i " %%B " %nul% && set tsedition=%%B
-)
-)
-
-if defined tsedition exit /b
-
-set d1=%ref% [void]$TypeBuilder.DefinePInvokeMethod('GetEditionNameFromId', 'pkeyhelper.dll', 'Public, Static', 1, [int], @([int], [IntPtr].MakeByRefType()), 1, 3);
-set d1=%d1% $out = 0; [void]$TypeBuilder.CreateType()::GetEditionNameFromId(%osSKU%, [ref]$out);$s=[Runtime.InteropServices.Marshal]::PtrToStringUni($out); $s
-
-for %%# in (pkeyhelper.dll) do @if not "%%~$PATH:#"=="" (
-for /f %%a in ('%psc% "%d1%"') do if not errorlevel 1 (
-echo "%_wtarget%" | find /i " %%a " %nul% && set tsedition=%%a
-)
-)
-
-exit /b
-
-::========================================================================================================================================
-:: Leave empty line below
diff --git a/MAS/Separate-Files-Version/Change_Office_Edition.cmd b/MAS/Separate-Files-Version/Change_Office_Edition.cmd
deleted file mode 100644
index fad2060..0000000
--- a/MAS/Separate-Files-Version/Change_Office_Edition.cmd
+++ /dev/null
@@ -1,1672 +0,0 @@
-@set masver=3.10
-@echo off
-
-
-
-::============================================================================
-::
-:: Homepage: m{}assgrave{dot}dev
-::
-::============================================================================
-
-
-
-::========================================================================================================================================
-
-:: Set environment variables, it helps if they are misconfigured in the system
-
-setlocal EnableExtensions
-setlocal DisableDelayedExpansion
-
-set "PathExt=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC"
-
-set "SysPath=%SystemRoot%\System32"
-set "Path=%SystemRoot%\System32;%SystemRoot%;%SystemRoot%\System32\Wbem;%SystemRoot%\System32\WindowsPowerShell\v1.0\"
-if exist "%SystemRoot%\Sysnative\reg.exe" (
-set "SysPath=%SystemRoot%\Sysnative"
-set "Path=%SystemRoot%\Sysnative;%SystemRoot%;%SystemRoot%\Sysnative\Wbem;%SystemRoot%\Sysnative\WindowsPowerShell\v1.0\;%Path%"
-)
-
-set "ComSpec=%SysPath%\cmd.exe"
-set "PSModulePath=%ProgramFiles%\WindowsPowerShell\Modules;%SysPath%\WindowsPowerShell\v1.0\Modules"
-
-set re1=
-set re2=
-set "_cmdf=%~f0"
-for %%# in (%*) do (
-if /i "%%#"=="re1" set re1=1
-if /i "%%#"=="re2" set re2=1
-if /i "%%#"=="-qedit" (set re1=1&set re2=1)
-)
-
-:: Re-launch the script with x64 process if it was initiated by x86 process on x64 bit Windows
-:: or with ARM64 process if it was initiated by x86/ARM32 process on ARM64 Windows
-
-if exist %SystemRoot%\Sysnative\cmd.exe if not defined re1 (
-setlocal EnableDelayedExpansion
-start %SystemRoot%\Sysnative\cmd.exe /c ""!_cmdf!" %* re1"
-exit /b
-)
-
-:: Re-launch the script with ARM32 process if it was initiated by x64 process on ARM64 Windows
-
-if exist %SystemRoot%\SysArm32\cmd.exe if %PROCESSOR_ARCHITECTURE%==AMD64 if not defined re2 (
-setlocal EnableDelayedExpansion
-start %SystemRoot%\SysArm32\cmd.exe /c ""!_cmdf!" %* re2"
-exit /b
-)
-
-::========================================================================================================================================
-
-set "blank="
-set "mas=ht%blank%tps%blank%://m%blank%ass%blank%grave.dev/"
-set "github=ht%blank%tps%blank%://github.com/m%blank%assgra%blank%vel/Micro%blank%soft-Acti%blank%vation-Scripts"
-set "selfgit=ht%blank%tps%blank%://git.acti%blank%vated.win/Micr%blank%osoft-Act%blank%ivation-Scripts"
-
-:: Check if Null service is working, it's important for the batch script
-
-sc query Null | find /i "RUNNING"
-if %errorlevel% NEQ 0 (
-echo:
-echo Null service is not running, script may crash...
-echo:
-echo:
-echo Check this webpage for help - %mas%fix_service
-echo:
-echo:
-ping 127.0.0.1 -n 20
-)
-cls
-
-:: Check LF line ending
-
-pushd "%~dp0"
->nul findstr /v "$" "%~nx0" && (
-echo:
-echo Error - Script either has LF line ending issue or an empty line at the end of the script is missing.
-echo:
-echo:
-echo Check this webpage for help - %mas%troubleshoot
-echo:
-echo:
-ping 127.0.0.1 -n 20 >nul
-popd
-exit /b
-)
-popd
-
-::========================================================================================================================================
-
-cls
-color 07
-title Change Office Edition %masver%
-
-set _args=
-set _elev=
-set _unattended=0
-
-set _args=%*
-if defined _args set _args=%_args:"=%
-if defined _args set _args=%_args:re1=%
-if defined _args set _args=%_args:re2=%
-if defined _args (
-for %%A in (%_args%) do (
-if /i "%%A"=="-el" set _elev=1
-)
-)
-
-set "nul1=1>nul"
-set "nul2=2>nul"
-set "nul6=2^>nul"
-set "nul=>nul 2>&1"
-
-call :dk_setvar
-set "line=echo ___________________________________________________________________________________________"
-
-::========================================================================================================================================
-
-if %winbuild% EQU 1 (
-%eline%
-echo Failed to detect Windows build number.
-echo:
-setlocal EnableDelayedExpansion
-set fixes=%fixes% %mas%troubleshoot
-call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%troubleshoot"
-goto dk_done
-)
-
-if exist "%Systemdrive%\Users\WDAGUtilityAccount" (
-sc query gcs | find /i "RUNNING" %nul% && (
-%eline%
-echo Windows Sandbox detected.
-echo The script cannot run due to missing licensing components. Aborting...
-echo:
-goto dk_done
-)
-)
-
-if %winbuild% LSS 7600 (
-%eline%
-echo Unsupported OS version detected [%winbuild%].
-echo This option is supported only for Windows 7/8/8.1/10/11 and their Server equivalents.
-goto dk_done
-)
-
-::========================================================================================================================================
-
-:: Fix special character limitations in path name
-
-set "_work=%~dp0"
-if "%_work:~-1%"=="\" set "_work=%_work:~0,-1%"
-
-set "_batf=%~f0"
-set "_batp=%_batf:'=''%"
-
-set _PSarg="""%~f0""" -el %_args%
-set _PSarg=%_PSarg:'=''%
-
-set "_ttemp=%userprofile%\AppData\Local\Temp"
-
-setlocal EnableDelayedExpansion
-
-::========================================================================================================================================
-
-echo "!_batf!" | find /i "!_ttemp!" %nul1% && (
-if /i not "!_work!"=="!_ttemp!" (
-%eline%
-echo The script was launched from the temp folder.
-echo You are most likely running the script directly from the archive file.
-echo:
-echo Extract the archive file and launch the script from the extracted folder.
-goto dk_done
-)
-)
-
-::========================================================================================================================================
-
-:: Elevate script as admin and pass arguments and preventing loop
-
-%nul1% fltmc || (
-if not defined _elev %psc% "start cmd.exe -arg '/c \"!_PSarg!\"' -verb runas" && exit /b
-%eline%
-echo This script needs admin rights.
-echo Right click on this script and select 'Run as administrator'.
-goto dk_done
-)
-
-::========================================================================================================================================
-
-:: Check PowerShell
-
-::pstst $ExecutionContext.SessionState.LanguageMode :pstst
-
-for /f "delims=" %%a in ('%psc% "if ($PSVersionTable.PSEdition -ne 'Core') {$f=[System.IO.File]::ReadAllText('!_batp!') -split ':pstst';. ([scriptblock]::Create($f[1]))}" %nul6%') do (set tstresult=%%a)
-
-if /i not "%tstresult%"=="FullLanguage" (
-%eline%
-for /f "delims=" %%a in ('%psc% "$ExecutionContext.SessionState.LanguageMode" %nul6%') do (set tstresult2=%%a)
-echo Test 1 - %tstresult%
-echo Test 2 - !tstresult2!
-echo:
-
-REM check LanguageMode
-
-echo: !tstresult2! | findstr /i "ConstrainedLanguage RestrictedLanguage NoLanguage" %nul1% && (
-echo FullLanguage mode not found in PowerShell. Aborting...
-echo If you have applied restrictions on Powershell then undo those changes.
-set fixes=%fixes% %mas%fix_powershell
-call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%fix_powershell"
-goto dk_done
-)
-
-REM check Powershell core version
-
-cmd /c "%psc% "$PSVersionTable.PSEdition"" | find /i "Core" %nul1% && (
-echo Windows Powershell is needed for MAS but it seems to be replaced with Powershell core. Aborting...
-set fixes=%fixes% %mas%in-place_repair_upgrade
-call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%in-place_repair_upgrade"
-goto dk_done
-)
-
-REM check for Mal-ware that may cause issues with Powershell
-
-for /r "%ProgramFiles%\" %%f in (secureboot.exe) do if exist "%%f" (
-echo "%%f"
-echo Mal%blank%ware found, PowerShell is not working properly.
-set fixes=%fixes% %mas%remove_mal%w%ware
-call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%remove_mal%w%ware"
-goto dk_done
-)
-
-REM check if .NET is working properly
-
-if /i "!tstresult2!"=="FullLanguage" (
-cmd /c "%psc% ""try {[System.AppDomain]::CurrentDomain.GetAssemblies(); [System.Math]::Sqrt(144)} catch {Exit 3}""" %nul%
-if !errorlevel!==3 (
-echo Windows Powershell failed to load .NET command. Aborting...
-set fixes=%fixes% %mas%in-place_repair_upgrade
-call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%in-place_repair_upgrade"
-goto dk_done
-)
-)
-
-REM check antivirus and other errors
-
-echo PowerShell is not working properly. Aborting...
-
-if /i "!tstresult2!"=="FullLanguage" (
-echo:
-echo Your antivirus software might be blocking the script.
-echo:
-sc query sense | find /i "RUNNING" %nul% && (
-echo Installed Antivirus - Microsoft Defender for Endpoint
-)
-cmd /c "%psc% ""$av = Get-WmiObject -Namespace root\SecurityCenter2 -Class AntiVirusProduct; $n = @(); foreach ($i in $av) { $n += $i.displayName }; if ($n) { Write-Host ('Installed Antivirus - ' + ($n -join ', '))}"""
-)
-
-set fixes=%fixes% %mas%troubleshoot
-call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%troubleshoot"
-goto dk_done
-)
-
-::========================================================================================================================================
-
-:: Disable QuickEdit and launch from conhost.exe to avoid Terminal app
-
-if %winbuild% GEQ 17763 (
-set terminal=1
-) else (
-set terminal=
-)
-
-:: Check if script is running in Terminal app
-
-if defined terminal (
-set lines=0
-for /f "skip=3 tokens=* delims=" %%A in ('mode con') do if "!lines!"=="0" (
-for %%B in (%%A) do set lines=%%B
-)
-if !lines! GEQ 100 set terminal=
-)
-
-if %_unattended%==1 goto :skipQE
-for %%# in (%_args%) do (if /i "%%#"=="-qedit" goto :skipQE)
-
-:: Relaunch to disable QuickEdit in the current session and use conhost.exe instead of the Terminal app
-:: This code disables QuickEdit for the current cmd.exe session without making permanent registry changes
-:: It is included because clicking on the script window can pause execution, causing confusion that the script has stopped due to an error
-
-set resetQE=1
-reg query HKCU\Console /v QuickEdit %nul2% | find /i "0x0" %nul1% && set resetQE=0
-reg add HKCU\Console /v QuickEdit /t REG_DWORD /d 0 /f %nul1%
-
-if defined terminal (
-start conhost.exe "!_batf!" %_args% -qedit
-start reg add HKCU\Console /v QuickEdit /t REG_DWORD /d %resetQE% /f %nul1%
-exit /b
-) else if %resetQE% EQU 1 (
-start cmd.exe /c ""!_batf!" %_args% -qedit"
-start reg add HKCU\Console /v QuickEdit /t REG_DWORD /d %resetQE% /f %nul1%
-exit /b
-)
-
-:skipQE
-
-::========================================================================================================================================
-
-:: Check for updates
-
-set -=
-set old=
-set pingp=
-set upver=%masver:.=%
-
-for %%A in (
-activ%-%ated.win
-mass%-%grave.dev
-) do if not defined pingp (
-for /f "delims=[] tokens=2" %%B in ('ping -n 1 %%A') do (
-if not "%%B"=="" (set old=1& set pingp=1)
-for /f "delims=[] tokens=2" %%C in ('ping -n 1 updatecheck%upver%.%%A') do (
-if not "%%C"=="" set old=
-)
-)
-)
-
-if defined old (
-echo ________________________________________________
-%eline%
-echo Your version of MAS [%masver%] is outdated.
-echo ________________________________________________
-echo:
-if not %_unattended%==1 (
-echo [1] Get Latest MAS
-echo [0] Continue Anyway
-echo:
-call :dk_color %_Green% "Choose a menu option using your keyboard [1,0] :"
-choice /C:10 /N
-if !errorlevel!==2 rem
-if !errorlevel!==1 (start %selfgit% & start %github% & start %mas% & exit /b)
-)
-)
-
-::========================================================================================================================================
-
-cls
-if not defined terminal mode 98, 30
-title Change Office Edition %masver%
-
-echo:
-echo Initializing...
-echo:
-
-::========================================================================================================================================
-
-set spp=SoftwareLicensingProduct
-set sps=SoftwareLicensingService
-
-call :dk_reflection
-call :dk_ckeckwmic
-call :dk_sppissue
-
-for /f "tokens=6-7 delims=[]. " %%i in ('ver') do if not "%%j"=="" (
-set fullbuild=%%i.%%j
-) else (
-for /f "tokens=3" %%G in ('"reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v UBR" %nul6%') do if not errorlevel 1 set /a "UBR=%%G"
-for /f "skip=2 tokens=3,4 delims=. " %%G in ('reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v BuildLabEx') do (
-if defined UBR (set "fullbuild=%%G.!UBR!") else (set "fullbuild=%%G.%%H")
-)
-)
-
-::========================================================================================================================================
-
-:: Check Windows Edition
-:: This is just to ensure that SPP/WMI are functional
-
-cls
-set osedition=0
-if %_wmic% EQU 1 set "chkedi=for /f "tokens=2 delims==" %%a in ('"wmic path %spp% where (ApplicationID='55c92734-d682-4d71-983e-d6ec3f16059f' AND LicenseDependsOn is NULL AND PartialProductKey IS NOT NULL) get LicenseFamily /VALUE" %nul6%')"
-if %_wmic% EQU 0 set "chkedi=for /f "tokens=2 delims==" %%a in ('%psc% "(([WMISEARCHER]'SELECT LicenseFamily FROM %spp% WHERE ApplicationID=''55c92734-d682-4d71-983e-d6ec3f16059f'' AND LicenseDependsOn is NULL AND PartialProductKey IS NOT NULL').Get()).LicenseFamily ^| %% {echo ('LicenseFamily='+$_)}" %nul6%')"
-%chkedi% do if not errorlevel 1 (call set "osedition=%%a")
-
-if %osedition%==0 (
-%eline%
-echo Failed to detect OS Edition. Aborting...
-call :dk_color %Blue% "To fix this issue, activate Windows from the main menu."
-goto dk_done
-)
-
-::========================================================================================================================================
-
-:: Check installed Office 16.0 C2R
-
-set o16c2r=
-set _68=HKLM\SOFTWARE\Microsoft\Office
-set _86=HKLM\SOFTWARE\Wow6432Node\Microsoft\Office
-
-for /f "skip=2 tokens=2*" %%a in ('"reg query %_86%\ClickToRun /v InstallPath" %nul6%') do if exist "%%b\root\Licenses16\ProPlus*.xrm-ms" (set o16c2r=1&set o16c2r_reg=%_86%\ClickToRun)
-for /f "skip=2 tokens=2*" %%a in ('"reg query %_68%\ClickToRun /v InstallPath" %nul6%') do if exist "%%b\root\Licenses16\ProPlus*.xrm-ms" (set o16c2r=1&set o16c2r_reg=%_68%\ClickToRun)
-
-if not defined o16c2r_reg (
-%eline%
-echo Office C2R 2016 or later is not installed, which is required for this script.
-echo Download and install Office from below URL and try again.
-set fixes=%fixes% %mas%genuine-installation-media
-call :dk_color %_Yellow% "%mas%genuine-installation-media"
-goto dk_done
-)
-
-call :ch_getinfo
-
-::========================================================================================================================================
-
-:: Check minimum required details
-
-if %verchk% LSS 9029 (
-%eline%
-echo Installed Office version is %_version%.
-echo Minimum required version is 16.0.9029.2167
-echo Aborting...
-call :dk_color %Blue% "Download and install latest Office from below URL and try again."
-set fixes=%fixes% %mas%genuine-installation-media
-call :dk_color %_Yellow% "%mas%genuine-installation-media"
-goto dk_done
-)
-
-for %%A in (
-_oArch
-_updch
-_lang
-_clversion
-_version
-_AudienceData
-_oIds
-_c2rXml
-_c2rExe
-_c2rCexe
-_masterxml
-) do (
-if not defined %%A (
-%eline%
-echo Failed to find %%A. Aborting...
-call :dk_color %Blue% "Download and install Office from below URL and try again."
-set fixes=%fixes% %mas%genuine-installation-media
-call :dk_color %_Yellow% "%mas%genuine-installation-media"
-goto dk_done
-)
-)
-
-if %winbuild% LSS 10240 if defined ltscfound (
-%eline%
-echo Installed Office appears to be from the Volume channel %ltsc19%%ltsc21%%ltsc24%,
-echo which is not officially supported on your Windows build version %winbuild%.
-echo Aborting...
-set fixes=%fixes% %mas%troubleshoot
-call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%troubleshoot"
-goto dk_done
-)
-
-set unsupbuild=
-if %winbuild% LSS 10240 if %winbuild% GEQ 9200 if %verchk% GTR 16026 set unsupbuild=1
-if %winbuild% LSS 9200 if %verchk% GTR 12527 set unsupbuild=1
-
-if defined unsupbuild (
-%eline%
-echo Unsupported Office %verchk% is installed on your Windows build version %winbuild%.
-echo Aborting...
-set fixes=%fixes% %mas%troubleshoot
-call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%troubleshoot"
-goto dk_done
-)
-
-::========================================================================================================================================
-
-:oemenu
-
-cls
-set fixes=
-if not defined terminal mode 76, 25
-title Change Office Edition %masver%
-echo:
-echo:
-echo:
-echo:
-echo ____________________________________________________________
-echo:
-echo [1] Change all editions
-echo [2] Add edition
-echo [3] Remove edition
-echo:
-echo [4] Add/Remove apps
-echo ____________________________________________
-echo:
-echo [5] Change Office Update Channel
-echo [0] %_exitmsg%
-echo ____________________________________________________________
-echo:
-call :dk_color2 %_White% " " %_Green% "Choose a menu option using your keyboard [1,2,3,4,5,0]"
-choice /C:123450 /N
-set _el=!errorlevel!
-if !_el!==6 exit /b
-if !_el!==5 goto :oe_changeupdchnl
-if !_el!==4 goto :oe_editedition
-if !_el!==3 goto :oe_removeedition
-if !_el!==2 set change=0& goto :oe_edition
-if !_el!==1 set change=1& goto :oe_edition
-goto :oemenu
-
-::========================================================================================================================================
-
-:oe_edition
-
-cls
-call :oe_chkinternet
-if not defined _int (
-goto :oe_goback
-)
-
-cls
-if not defined terminal mode 76, 25
-if %change%==1 (
-title Change all editions %masver%
-) else (
-title Add edition %masver%
-)
-
-echo:
-echo:
-echo:
-echo:
-echo O365/Mondo editions have the latest features.
-echo ____________________________________________________________
-echo:
-echo [1] Office Suites - Retail
-echo [2] Office Suites - Volume
-echo [3] Office SingleApps - Retail
-echo [4] Office SingleApps - Volume
-echo ____________________________________________
-echo:
-echo [0] Go Back
-echo ____________________________________________________________
-echo:
-call :dk_color2 %_White% " " %_Green% "Choose a menu option using your keyboard [1,2,3,4,0]"
-choice /C:12340 /N
-set _el=!errorlevel!
-if !_el!==5 goto :oemenu
-if !_el!==4 set list=SingleApps_Volume&goto :oe_editionchangepre
-if !_el!==3 set list=SingleApps_Retail&goto :oe_editionchangepre
-if !_el!==2 set list=Suites_Volume&goto :oe_editionchangepre
-if !_el!==1 set list=Suites_Retail&goto :oe_editionchangepre
-goto :oe_edition
-
-::========================================================================================================================================
-
-:oe_editionchangepre
-
-cls
-set editedition=
-call :ch_getinfo
-call :oe_tempcleanup
-%psc% "$f=[System.IO.File]::ReadAllText('!_batp!') -split ':getlist\:.*';. ([scriptblock]::Create($f[1]))"
-
-:oe_editionchange
-
-cls
-if not defined terminal (
-mode 98, 45
-%psc% "&{$W=$Host.UI.RawUI.WindowSize;$B=$Host.UI.RawUI.BufferSize;$W.Height=44;$B.Height=100;$Host.UI.RawUI.WindowSize=$W;$Host.UI.RawUI.BufferSize=$B;}" %nul%
-)
-
-if not exist %SystemRoot%\Temp\%list%.txt (
-%eline%
-echo Failed to generate available editions list.
-set fixes=%fixes% %mas%troubleshoot
-call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%troubleshoot"
-goto :oe_goback
-)
-
-set inpt=
-set counter=0
-set verified=0
-set _notfound=
-set targetedition=
-
-%line%
-echo:
-call :dk_color %Gray% "Installed Office editions: %_oIds%"
-call :dk_color %Gray% "You can select one of the following Office Editions."
-if %winbuild% LSS 10240 (
-echo Unsupported products such as 2019/2021/2024 are excluded from this list.
-) else (
-for %%# in (2019 2021 2024) do (
-find /i "%%#" "%SystemRoot%\Temp\%list%.txt" %nul1% || (
-if defined _notfound (set _notfound=%%#, !_notfound!) else (set _notfound=%%#)
-)
-)
-if defined _notfound call :dk_color %Gray% "Office !_notfound! is not in this list because old version [%_version%] of Office is installed."
-)
-%line%
-echo:
-
-for /f "usebackq delims=" %%A in (%SystemRoot%\Temp\%list%.txt) do (
-set /a counter+=1
-if !counter! LSS 10 (
-echo [!counter!] %%A
-) else (
-echo [!counter!] %%A
-)
-set targetedition!counter!=%%A
-)
-
-%line%
-echo:
-echo [0] Go Back
-echo:
-call :dk_color %_Green% "Enter an option number using your keyboard and press Enter to confirm:"
-set /p inpt=
-if "%inpt%"=="" goto :oe_editionchange
-if "%inpt%"=="0" (call :oe_tempcleanup & goto :oe_edition)
-for /l %%i in (1,1,%counter%) do (if "%inpt%"=="%%i" set verified=1)
-set targetedition=!targetedition%inpt%!
-if %verified%==0 goto :oe_editionchange
-
-::========================================================================================================================================
-
-:: Set app exclusions
-
-:oe_excludeappspre
-
-cls
-set suites=
-echo %list% | find /i "Suites" %nul1% && (
-set suites=1
-%psc% "$f=[System.IO.File]::ReadAllText('!_batp!') -split ':getappnames\:.*';. ([scriptblock]::Create($f[1]))"
-if not exist %SystemRoot%\Temp\getAppIds.txt (
-%eline%
-echo Failed to generate available apps list.
-set fixes=%fixes% %mas%troubleshoot
-call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%troubleshoot"
-goto :oe_goback
-)
-)
-
-for %%# in (
-Access
-Excel
-Lync
-OneNote
-Outlook
-PowerPoint
-Project
-Publisher
-Visio
-Word
-) do (
-if defined suites (
-find /i "%%#" "%SystemRoot%\Temp\getAppIds.txt" %nul1% && (set %%#_st=On) || (set %%#_st=)
-) else (
-set %%#_st=
-)
-)
-
-if defined Lync_st set Lync_st=Off
-set OneDrive_st=Off
-if defined suites (set Teams_st=Off) else (set Teams_st=)
-
-:oe_excludeapps
-
-cls
-if not defined terminal mode 98, 32
-
-%line%
-echo:
-call :dk_color %Gray% "Target edition: %targetedition%"
-call :dk_color %Gray% "To exclude the apps listed below from installation, toggle them from On to Off."
-if defined editedition call :dk_color %Gray% "Note: The On/Off status below does not reflect the current status of the installed apps."
-%line%
-if defined suites echo:
-if defined Access_st echo [A] Access : %Access_st%
-if defined Excel_st echo [E] Excel : %Excel_st%
-if defined OneNote_st echo [N] OneNote : %OneNote_st%
-if defined Outlook_st echo [O] Outlook : %Outlook_st%
-if defined PowerPoint_st echo [P] PowerPoint : %PowerPoint_st%
-if defined Project_st echo [J] Project : %Project_st%
-if defined Publisher_st echo [R] Publisher : %Publisher_st%
-if defined Visio_st echo [V] Visio : %Visio_st%
-if defined Word_st echo [W] Word : %Word_st%
-echo:
-if defined Lync_st echo [L] SkypeForBusiness : %Lync_st%
-if defined OneDrive_st echo [D] OneDrive : %OneDrive_st%
-if defined Teams_st echo [T] Teams : %Teams_st%
-%line%
-echo:
-echo [1] Continue
-echo [0] Go Back
-%line%
-echo:
-call :dk_color %_Green% "Choose a menu option using your keyboard:"
-choice /C:AENOPJRVWLDT10 /N
-set _el=!errorlevel!
-if !_el!==14 goto :oemenu
-if !_el!==13 call :excludelist & goto :oe_editionchangefinal
-if !_el!==12 if defined Teams_st (if "%Teams_st%"=="Off" (set Teams_st=ON) else (set Teams_st=Off))
-if !_el!==11 if defined OneDrive_st (if "%OneDrive_st%"=="Off" (set OneDrive_st=ON) else (set OneDrive_st=Off))
-if !_el!==10 if defined Lync_st (if "%Lync_st%"=="Off" (set Lync_st=ON) else (set Lync_st=Off))
-if !_el!==9 if defined Word_st (if "%Word_st%"=="Off" (set Word_st=ON) else (set Word_st=Off))
-if !_el!==8 if defined Visio_st (if "%Visio_st%"=="Off" (set Visio_st=ON) else (set Visio_st=Off))
-if !_el!==7 if defined Publisher_st (if "%Publisher_st%"=="Off" (set Publisher_st=ON) else (set Publisher_st=Off))
-if !_el!==6 if defined Project_st (if "%Project_st%"=="Off" (set Project_st=ON) else (set Project_st=Off))
-if !_el!==5 if defined PowerPoint_st (if "%PowerPoint_st%"=="Off" (set PowerPoint_st=ON) else (set PowerPoint_st=Off))
-if !_el!==4 if defined Outlook_st (if "%Outlook_st%"=="Off" (set Outlook_st=ON) else (set Outlook_st=Off))
-if !_el!==3 if defined OneNote_st (if "%OneNote_st%"=="Off" (set OneNote_st=ON) else (set OneNote_st=Off))
-if !_el!==2 if defined Excel_st (if "%Excel_st%"=="Off" (set Excel_st=ON) else (set Excel_st=Off))
-if !_el!==1 if defined Access_st (if "%Access_st%"=="Off" (set Access_st=ON) else (set Access_st=Off))
-goto :oe_excludeapps
-
-:excludelist
-
-set excludelist=
-for %%# in (
-access
-excel
-onenote
-outlook
-powerpoint
-project
-publisher
-visio
-word
-lync
-onedrive
-teams
-) do (
-if /i "!%%#_st!"=="Off" if defined excludelist (set excludelist=!excludelist!,%%#) else (set excludelist=,%%#)
-)
-exit /b
-
-::========================================================================================================================================
-
-:: Final command to change/add edition
-
-:oe_editionchangefinal
-
-cls
-if not defined terminal mode 105, 32
-
-:: Check for Project and Visio with unsupported language
-
-set projvis=
-set langmatched=
-echo: %Project_st% %Visio_st% | find /i "ON" %nul% && set projvis=1
-echo: %targetedition% | findstr /i "Project Visio" %nul% && set projvis=1
-
-if defined projvis (
-for %%# in (
-ar-sa
-cs-cz
-da-dk
-de-de
-el-gr
-en-us
-es-es
-fi-fi
-fr-fr
-he-il
-hu-hu
-it-it
-ja-jp
-ko-kr
-nb-no
-nl-nl
-pl-pl
-pt-br
-pt-pt
-ro-ro
-ru-ru
-sk-sk
-sl-si
-sv-se
-tr-tr
-uk-ua
-zh-cn
-zh-tw
-) do (
-if /i "%_lang%"=="%%#" set langmatched=1
-)
-if not defined langmatched (
-%eline%
-echo %_lang% language is not available for Project/Visio apps.
-call :dk_color %Blue% "Install Office in the supported language for Project/Visio from the below URL."
-set fixes=%fixes% %mas%genuine-installation-media
-call :dk_color %_Yellow% "%mas%genuine-installation-media"
-goto :oe_goback
-)
-)
-
-:: Thanks to @abbodi1406 for first discovering OfficeClickToRun.exe uses
-:: Thanks to @may for the suggestion to use it to change edition with CDN as a source
-:: OfficeClickToRun.exe with productstoadd method is used here to add editions
-:: It uses delta updates, meaning that since it's using same installed build, it will consume very less Internet
-
-call :oe_getlangs
-
-set "c2rcommand="%_c2rExe%" platform=%_oArch% culture=%_lang% productstoadd=%targetedition%.16_%_allLangs% cdnbaseurl.16=http://officecdn.microsoft.com/pr/%_updch% baseurl.16=http://officecdn.microsoft.com/pr/%_updch% version.16=%_version% mediatype.16=CDN sourcetype.16=CDN deliverymechanism=%_updch% %targetedition%.excludedapps.16=groove%excludelist% flt.useteamsaddon=disabled flt.usebingaddononinstall=disabled flt.usebingaddononupdate=disabled"
-
-if %change%==1 (
-set "c2rcommand=!c2rcommand! productstoremove=AllProducts"
-)
-
-echo:
-echo Running the below command, please wait...
-echo:
-echo %c2rcommand%
-%c2rcommand%
-set errorcode=%errorlevel%
-timeout /t 10 %nul%
-
-echo:
-set suggestchannel=
-
-if %errorcode% EQU 0 (
-if %change%==1 (
-echo %targetedition% | find /i "2019Volume" %nul% && (
-if not defined ltsc19 set suggestchannel=Production::LTSC
-if /i not %_AudienceData%==Production::LTSC set suggestchannel=Production::LTSC
-if /i not %_updch%==F2E724C1-748F-4B47-8FB8-8E0D210E9208 set suggestchannel=Production::LTSC
-)
-
-echo %targetedition% | find /i "2021Volume" %nul% && (
-if not defined ltsc21 set suggestchannel=Production::LTSC2021
-if /i not %_AudienceData%==Production::LTSC2021 set suggestchannel=Production::LTSC2021
-if /i not %_updch%==5030841D-C919-4594-8D2D-84AE4F96E58E set suggestchannel=Production::LTSC2021
-)
-
-echo %targetedition% | find /i "2024Volume" %nul% && (
-if not defined ltsc24 set suggestchannel=Production::LTSC2024
-if /i not %_AudienceData%==Production::LTSC2024 set suggestchannel=Production::LTSC2024
-if /i not %_updch%==7983BAC0-E531-40CF-BE00-FD24FE66619C set suggestchannel=Production::LTSC2024
-)
-
-echo %targetedition% | findstr /R "20.*Volume" %nul% || (
-if defined ltscfound set suggestchannel=Production::CC
-echo %_AudienceData% | find /i "LTSC" %nul% && set suggestchannel=Production::CC
-)
-
-if defined suggestchannel (
-call :dk_color %Gray% "Mismatch found in update channel and installed product."
-call :dk_color %Blue% "It is recommended to change the update channel to [!suggestchannel!] from the previous menu."
-)
-echo:
-)
-call :dk_color %Gray% "To activate Office, run the activation option from the main menu."
-) else (
-set fixes=%fixes% %mas%troubleshoot
-call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%troubleshoot"
-)
-
-call :oe_tempcleanup
-goto :oe_goback
-
-::========================================================================================================================================
-
-:: Edit Office edition
-
-:oe_editedition
-
-cls
-title Add/Remove Apps %masver%
-
-call :oe_chkinternet
-if not defined _int (
-goto :oe_goback
-)
-
-set change=0
-set editedition=1
-call :ch_getinfo
-cls
-
-if not defined terminal (
-mode 98, 35
-)
-
-set inpt=
-set counter=0
-set verified=0
-set targetedition=
-
-%line%
-echo:
-call :dk_color %Gray% "You can edit [add/remove apps] one of the following Office editions."
-%line%
-echo:
-
-for %%A in (%_oIds%) do (
-set /a counter+=1
-echo [!counter!] %%A
-set targetedition!counter!=%%A
-)
-
-%line%
-echo:
-echo [0] Go Back
-echo:
-call :dk_color %_Green% "Enter an option number using your keyboard and press Enter to confirm:"
-set /p inpt=
-if "%inpt%"=="" goto :oe_editedition
-if "%inpt%"=="0" goto :oemenu
-for /l %%i in (1,1,%counter%) do (if "%inpt%"=="%%i" set verified=1)
-set targetedition=!targetedition%inpt%!
-if %verified%==0 goto :oe_editedition
-
-::===============
-
-cls
-if not defined terminal mode 98, 32
-
-echo %targetedition% | findstr /i "Access Excel OneNote Outlook PowerPoint Project Publisher Skype Visio Word" %nul% && (set list=SingleApps) || (set list=Suites)
-goto :oe_excludeappspre
-
-::========================================================================================================================================
-
-:: Remove Office editions
-
-:oe_removeedition
-
-title Remove Office editions %masver%
-
-call :ch_getinfo
-
-cls
-if not defined terminal (
-mode 98, 35
-)
-
-set counter=0
-for %%A in (%_oIds%) do (set /a counter+=1)
-
-if !counter! LEQ 1 (
-echo:
-echo Only "%_oIds%" product is installed.
-echo This option is available only when multiple products are installed.
-goto :oe_goback
-)
-
-::===============
-
-set inpt=
-set counter=0
-set verified=0
-set targetedition=
-
-%line%
-echo:
-call :dk_color %Gray% "You can uninstall one of the following Office editions."
-%line%
-echo:
-
-for %%A in (%_oIds%) do (
-set /a counter+=1
-echo [!counter!] %%A
-set targetedition!counter!=%%A
-)
-
-%line%
-echo:
-echo [0] Go Back
-echo:
-call :dk_color %_Green% "Enter an option number using your keyboard and press Enter to confirm:"
-set /p inpt=
-if "%inpt%"=="" goto :oe_removeedition
-if "%inpt%"=="0" goto :oemenu
-for /l %%i in (1,1,%counter%) do (if "%inpt%"=="%%i" set verified=1)
-set targetedition=!targetedition%inpt%!
-if %verified%==0 goto :oe_removeedition
-
-::===============
-
-cls
-if not defined terminal mode 105, 32
-
-call :oe_getlangs %targetedition%
-set "c2rcommand="%_c2rExe%" platform=%_oArch% productstoremove=%targetedition%.16_%_allLangs%"
-
-echo:
-echo Running the below command, please wait...
-echo:
-echo %c2rcommand%
-%c2rcommand%
-
-if %errorlevel% NEQ 0 (
-echo:
-set fixes=%fixes% %mas%troubleshoot
-call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%troubleshoot"
-)
-
-goto :oe_goback
-
-::========================================================================================================================================
-
-:: Change Office update channel
-
-:oe_changeupdchnl
-
-title Change Office update channel %masver%
-call :ch_getinfo
-
-cls
-if not defined terminal (
-mode 98, 33
-)
-
-call :oe_chkinternet
-if not defined _int (
-goto :oe_goback
-)
-
-if %winbuild% LSS 10240 (
-echo %_oIds% | findstr "2019 2021 2024" %nul% && (
-%eline%
-echo Installed Office editions: %_oIds%
-echo Unsupported Office edition is installed on your Windows build version %winbuild%.
-goto :oe_goback
-)
-if defined ltscfound (
-%eline%
-echo Installed Office update channel: %ltsc19%%ltsc21%%ltsc24%
-echo Unsupported Office update channel is installed on your Windows build version %winbuild%.
-goto :oe_goback
-)
-)
-
-::===============
-
-set inpt=
-set counter=0
-set verified=0
-set targetFFN=
-set bypassFFN=
-set targetchannel=
-
-%line%
-echo:
-call :dk_color %Gray% "Installed update channel: %_AudienceData%, %_version%, Client: %_clversion%"
-call :dk_color %Gray% "Installed Office editions: %_oIds%"
-%line%
-echo:
-
-for %%# in (
-"5440fd1f-7ecb-4221-8110-145efaa6372f_Beta / Insider Fast - Insiders::DevMain -"
-"64256afe-f5d9-4f86-8936-8840a6a4f5be_Current / Monthly Preview - Insiders::CC -"
-"492350f6-3a01-4f97-b9c0-c7c6ddf67d60_Current / Monthly - Production::CC -"
-"55336b82-a18d-4dd6-b5f6-9e5095c314a6_Monthly Enterprise - Production::MEC -"
-"7ffbc6bf-bc32-4f92-8982-f9dd17fd3114_Semi Annual Enterprise - Production::DC -"
-"ea4a4090-de26-49d7-93c1-91bff9e53fc3_DevMain Channel - Dogfood::DevMain -"
-"b61285dd-d9f7-41f2-9757-8f61cba4e9c8_Microsoft Elite - Microsoft::DevMain -"
-"f2e724c1-748f-4b47-8fb8-8e0d210e9208_Perpetual2019 VL - Production::LTSC -"
-"1d2d2ea6-1680-4c56-ac58-a441c8c24ff9_Microsoft2019 VL - Microsoft::LTSC -"
-"5030841d-c919-4594-8d2d-84ae4f96e58e_Perpetual2021 VL - Production::LTSC2021 -"
-"86752282-5841-4120-ac80-db03ae6b5fdb_Microsoft2021 VL - Microsoft::LTSC2021 -"
-"7983bac0-e531-40cf-be00-fd24fe66619c_Perpetual2024 VL - Production::LTSC2024 -"
-"c02d8fe6-5242-4da8-972f-82ee55e00671_Microsoft2024 VL - Microsoft::LTSC2024 -"
-) do (
-for /f "tokens=1-2 delims=_" %%A in ("%%~#") do (
-set bypass=
-set supported=
-if %winbuild% LSS 10240 (echo %%B | findstr /i "LTSC DevMain" %nul% || set supported=1) else (set supported=1)
-if %winbuild% GEQ 10240 (
-if defined ltsc19 echo %%B | find /i "2019 VL" %nul% || set bypass=1
-if defined ltsc21 echo %%B | find /i "2021 VL" %nul% || set bypass=1
-if defined ltsc24 echo %%B | find /i "2024 VL" %nul% || set bypass=1
-if not defined ltscfound echo %%B | find /i "LTSC" %nul% && set bypass=1
-)
-if defined supported (
-set /a counter+=1
-if !counter! LSS 10 (
-if defined bypass (echo [!counter!] %%B Unofficial change method will be used) else (echo [!counter!] %%B)
-) else (
-if defined bypass (echo [!counter!] %%B Unofficial change method will be used) else (echo [!counter!] %%B)
-)
-set targetFFN!counter!=%%A
-set targetchannel!counter!=%%B
-if defined bypass set bypassFFN=!bypassFFN!%%A
-)
-)
-)
-
-%line%
-echo:
-echo [R] Learn about update channels
-echo [0] Go back
-echo:
-call :dk_color %_Green% "Enter an option number using your keyboard and press Enter to confirm:"
-set /p inpt=
-if "%inpt%"=="" goto :oe_changeupdchnl
-if "%inpt%"=="0" goto :oemenu
-if /i "%inpt%"=="R" start https://learn.microsoft.com/en-us/microsoft-365-apps/updates/overview-update-channels & goto :oe_changeupdchnl
-for /l %%i in (1,1,%counter%) do (if "%inpt%"=="%%i" set verified=1)
-set targetFFN=!targetFFN%inpt%!
-set targetchannel=!targetchannel%inpt%!
-if %verified%==0 goto :oe_changeupdchnl
-
-::=======================
-
-cls
-if not defined terminal mode 105, 32
-
-:: Get build number for the target FFN, using build number with OfficeC2RClient.exe command to trigger updates provides accurate results
-
-set build=
-for /f "delims=" %%a in ('%psc% "$f=[System.IO.File]::ReadAllText('!_batp!') -split ':getbuild\:.*';. ([scriptblock]::Create($f[1]))" %nul6%') do (set build=%%a)
-echo "%build%" | find /i "16." %nul% || set build=
-
-echo:
-for /f "tokens=1 delims=-" %%A in ("%targetchannel%") do (echo Target update channel: %%A)
-echo Target build number: %build%
-echo: %bypassFFN% | find /i "%targetFFN%" %nul% && goto :oe_changeunoff
-
-call :oe_cleanupreg
-
-if not defined build (
-if %winbuild% GEQ 9200 call :dk_color %Gray% "Failed to detect build number for the target FFN."
-set "updcommand="%_c2rCexe%" /update user"
-) else (
-set "updcommand="%_c2rCexe%" /update user updatetoversion=%build%"
-)
-echo Running the below command to trigger updates...
-echo:
-echo %updcommand%
-%updcommand%
-echo:
-echo Check this webpage for help - %mas%troubleshoot
-goto :oe_goback
-
-::=======================
-
-:: Unofficial method to change channel
-
-:oe_changeunoff
-
-set abortchange=
-echo %targetchannel% | find /i "2019 VL" %nul% && (for %%A in (%_oIds%) do (echo %%A | find /i "2019Volume" %nul% || set abortchange=1))
-echo %targetchannel% | find /i "2021 VL" %nul% && (for %%A in (%_oIds%) do (echo %%A | find /i "2021Volume" %nul% || set abortchange=1))
-echo %targetchannel% | find /i "2024 VL" %nul% && (for %%A in (%_oIds%) do (echo %%A | find /i "2024Volume" %nul% || set abortchange=1))
-
-if defined abortchange (
-%eline%
-echo Mismatch found in installed Office products and target update channel. Aborting...
-echo Non-perpetual Office products are not suppported with Perpetual VL update channels.
-goto :oe_goback
-)
-
-if not defined build (
-%eline%
-call :dk_color %Red% "Failed to detect build number for the target FFN."
-set fixes=%fixes% %mas%troubleshoot
-call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%troubleshoot"
-goto :oe_goback
-)
-
-set buildchk=0
-for /f "tokens=3 delims=." %%a in ("%build%") do set "buildchk=%%a"
-
-call :oe_getlangs %_firstoId%
-
-echo %targetchannel% | find /i "2019 VL" %nul% && (
-for %%A in (en-gb es-mx fr-ca) do (
-echo %_allLangs% | find /i "%%A" %nul% && (
-%eline%
-echo [%%A] language is not supported on the Office 2019 Perpetual VL update channel. Aborting...
-goto :oe_goback
-)
-)
-)
-
-set "c2rcommand="%_c2rExe%" platform=%_oArch% culture=%_lang% productstoadd=%_firstoId%.16_%_allLangs% cdnbaseurl.16=http://officecdn.microsoft.com/pr/%targetFFN% baseurl.16=http://officecdn.microsoft.com/pr/%targetFFN% version.16=%build% mediatype.16=CDN sourcetype.16=CDN deliverymechanism=%targetFFN% %_firstoId%.excludedapps.16=%_firstoIdExcludelist% flt.useteamsaddon=disabled flt.usebingaddononinstall=disabled flt.usebingaddononupdate=disabled"
-set "c2rclientupdate=!c2rcommand! scenario=CLIENTUPDATE"
-
-if %clverchk% LSS %buildchk% (
-echo:
-call :dk_color %Blue% "Do not terminate the operation before it completes..."
-echo:
-echo Updating Office C2R client with the command below, please wait...
-echo:
-echo %c2rclientupdate%
-%c2rclientupdate%
-for /l %%i in (1,1,30) do (if !clverchk! LSS %buildchk% (call :ch_getinfo&timeout /t 10 %nul%))
-)
-
-if %clverchk% LSS %buildchk% (
-echo:
-call :dk_color %Red% "Failed to update Office C2R client. Aborting..."
-set fixes=%fixes% %mas%troubleshoot
-call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%troubleshoot"
-goto :oe_goback
-)
-
-call :oe_cleanupreg
-
-echo Running the below command to change update channel, please wait...
-echo:
-echo %c2rcommand%
-%c2rcommand%
-set errorcode=%errorlevel%
-timeout /t 10 %nul%
-
-echo:
-if %errorcode% EQU 0 (
-call :dk_color %Gray% "Now run the Office activation option from the main menu."
-) else (
-set fixes=%fixes% %mas%troubleshoot
-call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%troubleshoot"
-)
-
-::========================================================================================================================================
-
-:oe_goback
-
-call :oe_tempcleanup
-
-echo:
-if defined fixes (
-call :dk_color %White% "Follow ALL the ABOVE blue lines. "
-call :dk_color2 %Blue% "Press [1] to Open Support Webpage " %Gray% " Press [0] to Ignore"
-choice /C:10 /N
-if !errorlevel!==2 goto :oemenu
-if !errorlevel!==1 (start %selfgit% & start %github% & for %%# in (%fixes%) do (start %%#))
-)
-
-if defined terminal (
-call :dk_color %_Yellow% "Press [0] key to go back..."
-choice /c 0 /n
-) else (
-call :dk_color %_Yellow% "Press any key to go back..."
-pause %nul1%
-)
-goto :oemenu
-
-::========================================================================================================================================
-
-:oe_cleanupreg
-
-:: Cleanup Office update related registries, thanks to @abbodi1406
-:: https://techcommunity.microsoft.com/t5/office-365-blog/how-to-manage-office-365-proplus-channels-for-it-pros/ba-p/795813
-:: https://learn.microsoft.com/en-us/microsoft-365-apps/updates/change-update-channels#considerations-when-changing-channels
-
-echo:
-echo Cleaning Office update registry keys...
-echo Adding new update channel to registry keys...
-echo:
-
-%nul% reg add %o16c2r_reg%\Configuration /v CDNBaseUrl /t REG_SZ /d "https://officecdn.microsoft.com/pr/%targetFFN%" /f
-%nul% reg add %o16c2r_reg%\Configuration /v UpdateChannel /t REG_SZ /d "https://officecdn.microsoft.com/pr/%targetFFN%" /f
-%nul% reg add %o16c2r_reg%\Configuration /v UpdateChannelChanged /t REG_SZ /d "True" /f
-%nul% reg delete %o16c2r_reg%\Configuration /v UnmanagedUpdateURL /f
-%nul% reg delete %o16c2r_reg%\Configuration /v UpdateUrl /f
-%nul% reg delete %o16c2r_reg%\Configuration /v UpdatePath /f
-%nul% reg delete %o16c2r_reg%\Configuration /v UpdateToVersion /f
-%nul% reg delete %o16c2r_reg%\Updates /v UpdateToVersion /f
-%nul% reg delete HKLM\SOFTWARE\Policies\Microsoft\office\16.0\common\officeupdate /f
-%nul% reg delete HKLM\SOFTWARE\Policies\Microsoft\office\16.0\common\officeupdate /f /reg:32
-%nul% reg delete HKCU\SOFTWARE\Policies\Microsoft\office\16.0\common\officeupdate /f
-%nul% reg delete HKLM\SOFTWARE\Policies\Microsoft\cloud\office\16.0\Common\officeupdate /f
-%nul% reg delete HKLM\SOFTWARE\Policies\Microsoft\cloud\office\16.0\Common\officeupdate /f /reg:32
-%nul% reg delete HKCU\Software\Policies\Microsoft\cloud\office\16.0\Common\officeupdate /f
-
-exit /b
-
-::========================================================================================================================================
-
-:oe_tempcleanup
-
-del /f /q %SystemRoot%\Temp\SingleApps_Volume.txt %nul%
-del /f /q %SystemRoot%\Temp\SingleApps_Retail.txt %nul%
-del /f /q %SystemRoot%\Temp\Suites_Volume.txt %nul%
-del /f /q %SystemRoot%\Temp\Suites_Retail.txt %nul%
-del /f /q %SystemRoot%\Temp\getAppIds.txt %nul%
-exit /b
-
-::========================================================================================================================================
-
-:: Fetch required info
-
-:ch_getinfo
-
-set _oRoot=
-set _oArch=
-set _updch=
-set _oIds=
-set _firstoId=
-set _lang=
-set _cfolder=
-set _version=
-set _clversion=
-set _AudienceData=
-set _actconfig=
-set _c2rXml=
-set _c2rExe=
-set _c2rCexe=
-set _masterxml=
-set ltsc19=
-set ltsc21=
-set ltsc24=
-set ltscfound=
-
-for /f "skip=2 tokens=2*" %%a in ('"reg query %o16c2r_reg% /v InstallPath" %nul6%') do (set "_oRoot=%%b\root")
-for /f "skip=2 tokens=2*" %%a in ('"reg query %o16c2r_reg%\Configuration /v Platform" %nul6%') do (set "_oArch=%%b")
-for /f "skip=2 tokens=2*" %%a in ('"reg query %o16c2r_reg%\Configuration /v ClientFolder" %nul6%') do (set "_cfolder=%%b")
-for /f "skip=2 tokens=2*" %%a in ('"reg query %o16c2r_reg%\Configuration /v AudienceId" %nul6%') do (set "_updch=%%b")
-for /f "skip=2 tokens=2*" %%a in ('"reg query %o16c2r_reg%\Configuration /v ClientCulture" %nul6%') do (set "_lang=%%b")
-for /f "skip=2 tokens=2*" %%a in ('"reg query %o16c2r_reg%\Configuration /v ClientVersionToReport" %nul6%') do (set "_clversion=%%b")
-for /f "skip=2 tokens=2*" %%a in ('"reg query %o16c2r_reg%\Configuration /v VersionToReport" %nul6%') do (set "_version=%%b")
-for /f "skip=2 tokens=2*" %%a in ('"reg query %o16c2r_reg%\Configuration /v AudienceData" %nul6%') do (set "_AudienceData=%%b")
-for /f "skip=2 tokens=2*" %%a in ('"reg query %o16c2r_reg%\ProductReleaseIDs /v ActiveConfiguration" %nul6%') do (set "_actconfig=%%b")
-
-echo "%o16c2r_reg%" | find /i "Wow6432Node" %nul1% && (set _tok=9) || (set _tok=8)
-for /f "tokens=%_tok% delims=\" %%a in ('reg query "%o16c2r_reg%\ProductReleaseIDs\%_actconfig%" /f ".16" /k %nul6% ^| findstr /i "Retail Volume"') do (
-if defined _oIds (set "_oIds=!_oIds! %%a") else (set "_oIds=%%a")
-)
-set _oIds=%_oIds:.16=%
-for /f "tokens=1" %%A in ("%_oIds%") do set _firstoId=%%A
-for /f "skip=2 tokens=2*" %%a in ('"reg query %o16c2r_reg%\Configuration /v %_firstoId%.ExcludedApps" %nul6%') do (set "_firstoIdExcludelist=%%b")
-
-set verchk=0
-set clverchk=0
-for /f "tokens=3 delims=." %%a in ("%_version%") do set "verchk=%%a"
-for /f "tokens=3 delims=." %%a in ("%_clversion%") do set "clverchk=%%a"
-
-if exist "%_oRoot%\Licenses16\c2rpridslicensefiles_auto.xml" set "_c2rXml=%_oRoot%\Licenses16\c2rpridslicensefiles_auto.xml"
-
-if exist "%ProgramData%\Microsoft\ClickToRun\ProductReleases\%_actconfig%\x-none.16\MasterDescriptor.x-none.xml" (
-set "_masterxml=%ProgramData%\Microsoft\ClickToRun\ProductReleases\%_actconfig%\x-none.16\MasterDescriptor.x-none.xml"
-)
-
-if exist "%_cfolder%\OfficeClickToRun.exe" (
-set "_c2rExe=%_cfolder%\OfficeClickToRun.exe"
-)
-
-if exist "%_cfolder%\OfficeC2RClient.exe" (
-set "_c2rCexe=%_cfolder%\OfficeC2RClient.exe"
-)
-
-:: Check LTSC version files
-
-for /f "skip=2 tokens=2*" %%a in ('"reg query %o16c2r_reg%\ProductReleaseIDs\%_actconfig%" /s %nul6%') do (
-echo "%%b" %nul2% | findstr "16.0.103 16.0.104 16.0.105" %nul% && set ltsc19=LTSC
-echo "%%b" %nul2% | findstr "16.0.14332" %nul% && set ltsc21=LTSC2021
-echo "%%b" %nul2% | findstr "16.0.17932" %nul% && set ltsc24=LTSC2024
-)
-
-if not "%ltsc19%%ltsc21%%ltsc24%"=="" set ltscfound=1
-
-exit /b
-
-::========================================================================================================================================
-
-:: Check all the installed languages
-
-:oe_getlangs
-
-if "%1"=="" (
-set langreg=culture
-) else (
-set langreg=%1.16
-)
-
-set _allLangs=
-echo "%o16c2r_reg%" | find /i "Wow6432Node" %nul1% && (set _tok=10) || (set _tok=9)
-for /f "tokens=%_tok% delims=\" %%a in ('reg query "%o16c2r_reg%\ProductReleaseIDs\%_actconfig%\%langreg%" /f "-" /k ^| findstr /i "%langreg%\\.*-.*"') do (
-if defined _allLangs (set "_allLangs=!_allLangs!_%%a") else (set "_allLangs=%%a")
-)
-
-set _allLangs=%_allLangs:.16=%
-exit /b
-
-::========================================================================================================================================
-
-:: Check Internet connection
-
-:oe_chkinternet
-
-set _int=
-for %%a in (l.root-servers.net resolver1.opendns.com download.windowsupdate.com google.com) do if not defined _int (
-for /f "delims=[] tokens=2" %%# in ('ping -n 1 %%a') do (if not "%%#"=="" set _int=1)
-)
-
-if not defined _int (
-%psc% "If([Activator]::CreateInstance([Type]::GetTypeFromCLSID([Guid]'{DCB00C01-570F-4A9B-8D69-199FDBA5723B}')).IsConnectedToInternet){Exit 0}Else{Exit 1}"
-if !errorlevel!==0 (set _int=1)
-)
-
-if not defined _int (
-%eline%
-call :dk_color %Red% "Internet is not connected."
-call :dk_color %Blue% "Internet is required for this operation."
-)
-exit /b
-
-::========================================================================================================================================
-
-:: Get available build number for a FFN
-
-:getbuild:
-$Tls12 = [Enum]::ToObject([System.Net.SecurityProtocolType], 3072)
-[System.Net.ServicePointManager]::SecurityProtocol = $Tls12
-
-$FFN = $env:targetFFN
-$windowsBuild = [System.Environment]::OSVersion.Version.Build
-
-$baseUrl = "https://mrodevicemgr.officeapps.live.com/mrodevicemgrsvc/api/v2/C2RReleaseData?audienceFFN=$FFN"
-$url = if ($windowsBuild -lt 9200) { "$baseUrl&osver=Client|6.1" } elseif ($windowsBuild -lt 10240) { "$baseUrl&osver=Client|6.3" } else { $baseUrl }
-
-$response = if ($windowsBuild -ge 9200) { irm -Uri $url -Method Get } else { (New-Object System.Net.WebClient).DownloadString($url) }
-
-if ($windowsBuild -lt 9200) {
- if ($response -match '"AvailableBuild"\s*:\s*"([^"]+)"') { Write-Host $matches[1] }
-} else {
- Write-Host $response.AvailableBuild
-}
-:getbuild:
-
-::========================================================================================================================================
-
-:: Get available edition list from c2rpridslicensefiles_auto.xml
-:: and filter the list using MasterDescriptor.x-none.xml
-:: and exclude unsupported products on Windows 7/8/8.1
-
-:getlist:
-$xmlPath1 = $env:_c2rXml
-$xmlPath2 = $env:_masterxml
-$outputDir = $env:SystemRoot + "\Temp\"
-$buildNumber = [System.Environment]::OSVersion.Version.Build
-$excludedKeywords = @("2019", "2021", "2024")
-$productReleaseIds = @()
-
-if (Test-Path $xmlPath1) {
- $xml1 = New-Object -TypeName System.Xml.XmlDocument
- $xml1.Load($xmlPath1)
- foreach ($node in $xml1.SelectNodes("//ProductReleaseId")) {
- $id = $node.GetAttribute("id")
- $exclude = $false
- if ($buildNumber -lt 10240) {
- foreach ($keyword in $excludedKeywords) {
- if ($id -match $keyword) { $exclude = $true; break }
- }
- }
- if ($id -ne "CommonLicenseFiles" -and -not $exclude) { $productReleaseIds += $id }
- }
-}
-
-$categories = @{
- "Suites_Retail" = @(); "Suites_Volume" = @()
- "SingleApps_Retail" = @(); "SingleApps_Volume" = @()
-}
-
-foreach ($id in $productReleaseIds) {
- $category = if ($id -match "Retail") { "Retail" } else { "Volume" }
- $categories["SingleApps_$category"] += $id
-}
-
-if (Test-Path $xmlPath2) {
- $xml2 = New-Object -TypeName System.Xml.XmlDocument
- $xml2.Load($xmlPath2)
- foreach ($sku in $xml2.SelectNodes("//SKU")) {
- $skuId = $sku.GetAttribute("ID")
- if ($productReleaseIds -contains $skuId) {
- $appIds = $sku.SelectNodes("Apps/App") | ForEach-Object { $_.GetAttribute("id") }
- if ($appIds -contains "Excel" -and $appIds -contains "Word") {
- $category = if ($skuId -match "Retail") { "Retail" } else { "Volume" }
- $categories["Suites_$category"] += $skuId
- $categories["SingleApps_$category"] = $categories["SingleApps_$category"] | Where-Object { $_ -ne $skuId }
- }
- }
- }
-}
-
-foreach ($section in $categories.Keys) {
- $filePath = Join-Path -Path $outputDir -ChildPath "$section.txt"
- $ids = $categories[$section]
- if ($ids.Count -gt 0) { $ids | Out-File -FilePath $filePath -Encoding ASCII }
-}
-:getlist:
-
-::========================================================================================================================================
-
-:: Get App list for a specific product ID using MasterDescriptor.x-none.xml
-
-:getappnames:
-$xmlPath = $env:_masterxml
-$targetSkuId = $env:targetedition
-$outputDir = $env:SystemRoot + "\Temp\"
-$outputFile = Join-Path -Path $outputDir -ChildPath "getAppIds.txt"
-$excludeIds = @("shared", "PowerPivot", "PowerView", "MondoOnly", "OSM", "OSMUX", "Groove", "DCF")
-
-$xml = New-Object -TypeName System.Xml.XmlDocument
-$xml.Load($xmlPath)
-
-$appIdsList = @()
-$skuNodes = $xml.SelectNodes("//SKU[@ID='$targetSkuId']")
-
-foreach ($skuNode in $skuNodes) {
- foreach ($app in $skuNode.SelectNodes("Apps/App")) {
- $appId = $app.GetAttribute("id")
- if ($excludeIds -notcontains $appId) {
- $appIdsList += $appId
- }
- }
-}
-
-if ($appIdsList.Count -gt 0) {
- $appIdsList | Out-File -FilePath $outputFile -Encoding ASCII
-}
-:getappnames:
-
-::========================================================================================================================================
-
-:: Set variables
-
-:dk_setvar
-
-set ps=%SysPath%\WindowsPowerShell\v1.0\powershell.exe
-set psc=%ps% -nop -c
-set winbuild=1
-for /f "tokens=2 delims=[]" %%G in ('ver') do for /f "tokens=2,3,4 delims=. " %%H in ("%%~G") do set "winbuild=%%J"
-
-set _slexe=sppsvc.exe& set _slser=sppsvc
-if %winbuild% LEQ 6300 (set _slexe=SLsvc.exe& set _slser=SLsvc)
-if %winbuild% LSS 7600 if exist "%SysPath%\SLsvc.exe" (set _slexe=SLsvc.exe& set _slser=SLsvc)
-if %_slexe%==SLsvc.exe set _vis=1
-
-set _NCS=1
-if %winbuild% LSS 10586 set _NCS=0
-if %winbuild% GEQ 10586 reg query "HKCU\Console" /v ForceV2 %nul2% | find /i "0x0" %nul1% && (set _NCS=0)
-
-echo "%PROCESSOR_ARCHITECTURE% %PROCESSOR_ARCHITEW6432%" | find /i "ARM64" %nul1% && (if %winbuild% LSS 21277 set ps32onArm=1)
-
-if %_NCS% EQU 1 (
-for /F %%a in ('echo prompt $E ^| cmd') do set "esc=%%a"
-set "Red="41;97m""
-set "Gray="100;97m""
-set "Green="42;97m""
-set "Blue="44;97m""
-set "White="107;91m""
-set "_Red="40;91m""
-set "_White="40;37m""
-set "_Green="40;92m""
-set "_Yellow="40;93m""
-) else (
-set "Red="Red" "white""
-set "Gray="Darkgray" "white""
-set "Green="DarkGreen" "white""
-set "Blue="Blue" "white""
-set "White="White" "Red""
-set "_Red="Black" "Red""
-set "_White="Black" "Gray""
-set "_Green="Black" "Green""
-set "_Yellow="Black" "Yellow""
-)
-
-set "nceline=echo: &echo ==== ERROR ==== &echo:"
-set "eline=echo: &call :dk_color %Red% "==== ERROR ====" &echo:"
-if %~z0 GEQ 200000 (
-set "_exitmsg=Go back"
-set "_fixmsg=Go back to Main Menu, select Troubleshoot and run Fix Licensing option."
-) else (
-set "_exitmsg=Exit"
-set "_fixmsg=In MAS folder, run Troubleshoot script and select Fix Licensing option."
-)
-exit /b
-
-::========================================================================================================================================
-
-:: Check wmic.exe
-
-:dk_ckeckwmic
-
-if %winbuild% LSS 9200 (set _wmic=1&exit /b)
-set _wmic=0
-for %%# in (wmic.exe) do @if not "%%~$PATH:#"=="" (
-cmd /c "wmic path Win32_ComputerSystem get CreationClassName /value" %nul2% | find /i "computersystem" %nul1% && set _wmic=1
-)
-exit /b
-
-:: Show info for potential script stuck scenario
-
-:dk_sppissue
-
-sc start %_slser% %nul%
-set spperror=%errorlevel%
-
-if %spperror% NEQ 1056 if %spperror% NEQ 0 (
-%eline%
-echo sc start %_slser% [Error Code: %spperror%]
-if %spperror% EQU 1053 (
-call :dk_color %Blue% "Reboot your machine using the restart option and try again."
-call :dk_color %Blue% "If it still does not work, go back to Main Menu, select Troubleshoot and run Fix WPA Registry option."
-)
-)
-
-echo:
-%psc% "$job = Start-Job { (Get-WmiObject -Query 'SELECT * FROM %sps%').Version }; if (-not (Wait-Job $job -Timeout 30)) {write-host '%_slser% is not working correctly. Check this webpage for help - %mas%troubleshoot'}"
-exit /b
-
-:: Common lines used in PowerShell reflection code
-
-:dk_reflection
-
-set ref=$AssemblyBuilder = [AppDomain]::CurrentDomain.DefineDynamicAssembly(4, 1);
-set ref=%ref% $ModuleBuilder = $AssemblyBuilder.DefineDynamicModule(2, $False);
-set ref=%ref% $TypeBuilder = $ModuleBuilder.DefineType(0);
-exit /b
-
-::========================================================================================================================================
-
-:dk_color
-
-if %_NCS% EQU 1 (
-echo %esc%[%~1%~2%esc%[0m
-) else if exist %ps% (
-%psc% write-host -back '%1' -fore '%2' '%3'
-) else if not exist %ps% (
-echo %~3
-)
-exit /b
-
-:dk_color2
-
-if %_NCS% EQU 1 (
-echo %esc%[%~1%~2%esc%[%~3%~4%esc%[0m
-) else if exist %ps% (
-%psc% write-host -back '%1' -fore '%2' '%3' -NoNewline; write-host -back '%4' -fore '%5' '%6'
-) else if not exist %ps% (
-echo %~3 %~6
-)
-exit /b
-
-::========================================================================================================================================
-
-:dk_done
-
-echo:
-if %_unattended%==1 timeout /t 2 & exit /b
-
-if defined fixes (
-call :dk_color %White% "Follow ALL the ABOVE blue lines. "
-call :dk_color2 %Blue% "Press [1] to Open Support Webpage " %Gray% " Press [0] to Ignore"
-choice /C:10 /N
-if !errorlevel!==2 exit /b
-if !errorlevel!==1 (start %selfgit% & start %github% & for %%# in (%fixes%) do (start %%#))
-)
-
-if defined terminal (
-call :dk_color %_Yellow% "Press [0] key to %_exitmsg%..."
-choice /c 0 /n
-) else (
-call :dk_color %_Yellow% "Press any key to %_exitmsg%..."
-pause %nul1%
-)
-
-exit /b
-
-::========================================================================================================================================
-:: Leave empty line below
diff --git a/MAS/Separate-Files-Version/Change_Windows_Edition.cmd b/MAS/Separate-Files-Version/Change_Windows_Edition.cmd
deleted file mode 100644
index 4d758ec..0000000
--- a/MAS/Separate-Files-Version/Change_Windows_Edition.cmd
+++ /dev/null
@@ -1,1451 +0,0 @@
-@set masver=3.10
-@echo off
-
-
-
-::============================================================================
-::
-:: Homepage: m{}assgrave{dot}dev
-::
-::============================================================================
-
-
-
-:: To stage current edition while changing edition with CBS Upgrade Method, change 0 to 1 in below line
-set _stg=0
-
-
-
-::========================================================================================================================================
-
-:: Set environment variables, it helps if they are misconfigured in the system
-
-setlocal EnableExtensions
-setlocal DisableDelayedExpansion
-
-set "PathExt=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC"
-
-set "SysPath=%SystemRoot%\System32"
-set "Path=%SystemRoot%\System32;%SystemRoot%;%SystemRoot%\System32\Wbem;%SystemRoot%\System32\WindowsPowerShell\v1.0\"
-if exist "%SystemRoot%\Sysnative\reg.exe" (
-set "SysPath=%SystemRoot%\Sysnative"
-set "Path=%SystemRoot%\Sysnative;%SystemRoot%;%SystemRoot%\Sysnative\Wbem;%SystemRoot%\Sysnative\WindowsPowerShell\v1.0\;%Path%"
-)
-
-set "ComSpec=%SysPath%\cmd.exe"
-set "PSModulePath=%ProgramFiles%\WindowsPowerShell\Modules;%SysPath%\WindowsPowerShell\v1.0\Modules"
-
-set re1=
-set re2=
-set "_cmdf=%~f0"
-for %%# in (%*) do (
-if /i "%%#"=="re1" set re1=1
-if /i "%%#"=="re2" set re2=1
-if /i "%%#"=="-qedit" (set re1=1&set re2=1)
-)
-
-:: Re-launch the script with x64 process if it was initiated by x86 process on x64 bit Windows
-:: or with ARM64 process if it was initiated by x86/ARM32 process on ARM64 Windows
-
-if exist %SystemRoot%\Sysnative\cmd.exe if not defined re1 (
-setlocal EnableDelayedExpansion
-start %SystemRoot%\Sysnative\cmd.exe /c ""!_cmdf!" %* re1"
-exit /b
-)
-
-:: Re-launch the script with ARM32 process if it was initiated by x64 process on ARM64 Windows
-
-if exist %SystemRoot%\SysArm32\cmd.exe if %PROCESSOR_ARCHITECTURE%==AMD64 if not defined re2 (
-setlocal EnableDelayedExpansion
-start %SystemRoot%\SysArm32\cmd.exe /c ""!_cmdf!" %* re2"
-exit /b
-)
-
-::========================================================================================================================================
-
-set "blank="
-set "mas=ht%blank%tps%blank%://m%blank%ass%blank%grave.dev/"
-set "github=ht%blank%tps%blank%://github.com/m%blank%assgra%blank%vel/Micro%blank%soft-Acti%blank%vation-Scripts"
-set "selfgit=ht%blank%tps%blank%://git.acti%blank%vated.win/Micr%blank%osoft-Act%blank%ivation-Scripts"
-
-:: Check if Null service is working, it's important for the batch script
-
-sc query Null | find /i "RUNNING"
-if %errorlevel% NEQ 0 (
-echo:
-echo Null service is not running, script may crash...
-echo:
-echo:
-echo Check this webpage for help - %mas%fix_service
-echo:
-echo:
-ping 127.0.0.1 -n 20
-)
-cls
-
-:: Check LF line ending
-
-pushd "%~dp0"
->nul findstr /v "$" "%~nx0" && (
-echo:
-echo Error - Script either has LF line ending issue or an empty line at the end of the script is missing.
-echo:
-echo:
-echo Check this webpage for help - %mas%troubleshoot
-echo:
-echo:
-ping 127.0.0.1 -n 20 >nul
-popd
-exit /b
-)
-popd
-
-::========================================================================================================================================
-
-cls
-color 07
-title Change Windows Edition %masver%
-
-set _args=
-set _elev=
-set _unattended=0
-
-set _args=%*
-if defined _args set _args=%_args:"=%
-if defined _args set _args=%_args:re1=%
-if defined _args set _args=%_args:re2=%
-if defined _args (
-for %%A in (%_args%) do (
-if /i "%%A"=="-el" set _elev=1
-)
-)
-
-set "nul1=1>nul"
-set "nul2=2>nul"
-set "nul6=2^>nul"
-set "nul=>nul 2>&1"
-
-call :dk_setvar
-set "line=echo ___________________________________________________________________________________________"
-
-::========================================================================================================================================
-
-if %winbuild% EQU 1 (
-%eline%
-echo Failed to detect Windows build number.
-echo:
-setlocal EnableDelayedExpansion
-set fixes=%fixes% %mas%troubleshoot
-call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%troubleshoot"
-goto dk_done
-)
-
-if exist "%Systemdrive%\Users\WDAGUtilityAccount" (
-sc query gcs | find /i "RUNNING" %nul% && (
-%eline%
-echo Windows Sandbox detected.
-echo The script cannot run due to missing licensing components. Aborting...
-echo:
-goto dk_done
-)
-)
-
-if %winbuild% LSS 7600 (
-%eline%
-echo Unsupported OS version detected [%winbuild%].
-echo This option is supported only for Windows 7/8/8.1/10/11 and their Server equivalents.
-goto dk_done
-)
-
-::========================================================================================================================================
-
-:: Fix special character limitations in path name
-
-set "_work=%~dp0"
-if "%_work:~-1%"=="\" set "_work=%_work:~0,-1%"
-
-set "_batf=%~f0"
-set "_batp=%_batf:'=''%"
-
-set _PSarg="""%~f0""" -el %_args%
-set _PSarg=%_PSarg:'=''%
-
-set "_ttemp=%userprofile%\AppData\Local\Temp"
-
-setlocal EnableDelayedExpansion
-
-::========================================================================================================================================
-
-echo "!_batf!" | find /i "!_ttemp!" %nul1% && (
-if /i not "!_work!"=="!_ttemp!" (
-%eline%
-echo The script was launched from the temp folder.
-echo You are most likely running the script directly from the archive file.
-echo:
-echo Extract the archive file and launch the script from the extracted folder.
-goto dk_done
-)
-)
-
-::========================================================================================================================================
-
-:: Elevate script as admin and pass arguments and preventing loop
-
-%nul1% fltmc || (
-if not defined _elev %psc% "start cmd.exe -arg '/c \"!_PSarg!\"' -verb runas" && exit /b
-%eline%
-echo This script needs admin rights.
-echo Right click on this script and select 'Run as administrator'.
-goto dk_done
-)
-
-::========================================================================================================================================
-
-:: Check PowerShell
-
-::pstst $ExecutionContext.SessionState.LanguageMode :pstst
-
-for /f "delims=" %%a in ('%psc% "if ($PSVersionTable.PSEdition -ne 'Core') {$f=[System.IO.File]::ReadAllText('!_batp!') -split ':pstst';. ([scriptblock]::Create($f[1]))}" %nul6%') do (set tstresult=%%a)
-
-if /i not "%tstresult%"=="FullLanguage" (
-%eline%
-for /f "delims=" %%a in ('%psc% "$ExecutionContext.SessionState.LanguageMode" %nul6%') do (set tstresult2=%%a)
-echo Test 1 - %tstresult%
-echo Test 2 - !tstresult2!
-echo:
-
-REM check LanguageMode
-
-echo: !tstresult2! | findstr /i "ConstrainedLanguage RestrictedLanguage NoLanguage" %nul1% && (
-echo FullLanguage mode not found in PowerShell. Aborting...
-echo If you have applied restrictions on Powershell then undo those changes.
-set fixes=%fixes% %mas%fix_powershell
-call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%fix_powershell"
-goto dk_done
-)
-
-REM check Powershell core version
-
-cmd /c "%psc% "$PSVersionTable.PSEdition"" | find /i "Core" %nul1% && (
-echo Windows Powershell is needed for MAS but it seems to be replaced with Powershell core. Aborting...
-set fixes=%fixes% %mas%in-place_repair_upgrade
-call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%in-place_repair_upgrade"
-goto dk_done
-)
-
-REM check for Mal-ware that may cause issues with Powershell
-
-for /r "%ProgramFiles%\" %%f in (secureboot.exe) do if exist "%%f" (
-echo "%%f"
-echo Mal%blank%ware found, PowerShell is not working properly.
-set fixes=%fixes% %mas%remove_mal%w%ware
-call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%remove_mal%w%ware"
-goto dk_done
-)
-
-REM check if .NET is working properly
-
-if /i "!tstresult2!"=="FullLanguage" (
-cmd /c "%psc% ""try {[System.AppDomain]::CurrentDomain.GetAssemblies(); [System.Math]::Sqrt(144)} catch {Exit 3}""" %nul%
-if !errorlevel!==3 (
-echo Windows Powershell failed to load .NET command. Aborting...
-set fixes=%fixes% %mas%in-place_repair_upgrade
-call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%in-place_repair_upgrade"
-goto dk_done
-)
-)
-
-REM check antivirus and other errors
-
-echo PowerShell is not working properly. Aborting...
-
-if /i "!tstresult2!"=="FullLanguage" (
-echo:
-echo Your antivirus software might be blocking the script.
-echo:
-sc query sense | find /i "RUNNING" %nul% && (
-echo Installed Antivirus - Microsoft Defender for Endpoint
-)
-cmd /c "%psc% ""$av = Get-WmiObject -Namespace root\SecurityCenter2 -Class AntiVirusProduct; $n = @(); foreach ($i in $av) { $n += $i.displayName }; if ($n) { Write-Host ('Installed Antivirus - ' + ($n -join ', '))}"""
-)
-
-set fixes=%fixes% %mas%troubleshoot
-call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%troubleshoot"
-goto dk_done
-)
-
-::========================================================================================================================================
-
-:: Disable QuickEdit and launch from conhost.exe to avoid Terminal app
-
-if %winbuild% GEQ 17763 (
-set terminal=1
-) else (
-set terminal=
-)
-
-:: Check if script is running in Terminal app
-
-if defined terminal (
-set lines=0
-for /f "skip=3 tokens=* delims=" %%A in ('mode con') do if "!lines!"=="0" (
-for %%B in (%%A) do set lines=%%B
-)
-if !lines! GEQ 100 set terminal=
-)
-
-if %_unattended%==1 goto :skipQE
-for %%# in (%_args%) do (if /i "%%#"=="-qedit" goto :skipQE)
-
-:: Relaunch to disable QuickEdit in the current session and use conhost.exe instead of the Terminal app
-:: This code disables QuickEdit for the current cmd.exe session without making permanent registry changes
-:: It is included because clicking on the script window can pause execution, causing confusion that the script has stopped due to an error
-
-set resetQE=1
-reg query HKCU\Console /v QuickEdit %nul2% | find /i "0x0" %nul1% && set resetQE=0
-reg add HKCU\Console /v QuickEdit /t REG_DWORD /d 0 /f %nul1%
-
-if defined terminal (
-start conhost.exe "!_batf!" %_args% -qedit
-start reg add HKCU\Console /v QuickEdit /t REG_DWORD /d %resetQE% /f %nul1%
-exit /b
-) else if %resetQE% EQU 1 (
-start cmd.exe /c ""!_batf!" %_args% -qedit"
-start reg add HKCU\Console /v QuickEdit /t REG_DWORD /d %resetQE% /f %nul1%
-exit /b
-)
-
-:skipQE
-
-::========================================================================================================================================
-
-:: Check for updates
-
-set -=
-set old=
-set pingp=
-set upver=%masver:.=%
-
-for %%A in (
-activ%-%ated.win
-mass%-%grave.dev
-) do if not defined pingp (
-for /f "delims=[] tokens=2" %%B in ('ping -n 1 %%A') do (
-if not "%%B"=="" (set old=1& set pingp=1)
-for /f "delims=[] tokens=2" %%C in ('ping -n 1 updatecheck%upver%.%%A') do (
-if not "%%C"=="" set old=
-)
-)
-)
-
-if defined old (
-echo ________________________________________________
-%eline%
-echo Your version of MAS [%masver%] is outdated.
-echo ________________________________________________
-echo:
-if not %_unattended%==1 (
-echo [1] Get Latest MAS
-echo [0] Continue Anyway
-echo:
-call :dk_color %_Green% "Choose a menu option using your keyboard [1,0] :"
-choice /C:10 /N
-if !errorlevel!==2 rem
-if !errorlevel!==1 (start %selfgit% & start %github% & start %mas% & exit /b)
-)
-)
-
-::========================================================================================================================================
-
-setlocal DisableDelayedExpansion
-
-:: Check desktop location
-
-set desktop=
-for /f "skip=2 tokens=2*" %%a in ('reg query "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders" /v Desktop') do call set "desktop=%%b"
-if not defined desktop for /f "delims=" %%a in ('%psc% "& {write-host $([Environment]::GetFolderPath('Desktop'))}"') do call set "desktop=%%a"
-
-if not defined desktop (
-%eline%
-echo Unable to detect Desktop location, aborting...
-goto dk_done
-)
-
-setlocal EnableDelayedExpansion
-
-::========================================================================================================================================
-
-cls
-if not defined terminal mode 98, 30
-title Change Windows Edition %masver%
-
-echo:
-echo Initializing...
-echo:
-
-for %%# in (
-sppsvc.exe
-dism.exe
-) do (
-if not exist %SysPath%\%%# (
-%eline%
-echo [%SysPath%\%%#] file is missing, aborting...
-call :dk_color %Blue% "Go back to Main Menu, select Troubleshoot and run DISM Restore and SFC Scan options."
-call :dk_color %Blue% "After that, restart system and try activation again."
-set fixes=%fixes% %mas%in-place_repair_upgrade
-call :dk_color2 %Blue% "If it still shows the same error, do this - " %_Yellow% " %mas%in-place_repair_upgrade"
-goto dk_done
-)
-)
-
-::========================================================================================================================================
-
-set spp=SoftwareLicensingProduct
-set sps=SoftwareLicensingService
-
-call :dk_reflection
-call :dk_ckeckwmic
-call :dk_sppissue
-
-for /f "tokens=6-7 delims=[]. " %%i in ('ver') do if not "%%j"=="" (
-set fullbuild=%%i.%%j
-) else (
-for /f "tokens=3" %%G in ('"reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v UBR" %nul6%') do if not errorlevel 1 set /a "UBR=%%G"
-for /f "skip=2 tokens=3,4 delims=. " %%G in ('reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v BuildLabEx') do (
-if defined UBR (set "fullbuild=%%G.!UBR!") else (set "fullbuild=%%G.%%H")
-)
-)
-
-::========================================================================================================================================
-
-:: Check Activation IDs
-
-call :dk_actids 55c92734-d682-4d71-983e-d6ec3f16059f
-if not defined allapps (
-%eline%
-echo Failed to find activation IDs. Aborting...
-call :dk_color %Blue% "To fix this issue, activate Windows from the main menu."
-goto dk_done
-)
-
-::========================================================================================================================================
-
-:: Check Windows Edition and branch
-
-set osedition=
-set dismnotworking=
-
-for /f "tokens=3 delims=: " %%a in ('DISM /English /Online /Get-CurrentEdition %nul6% ^| find /i "Current Edition :"') do set "osedition=%%a"
-if not defined osedition set dismnotworking=1
-
-if %_wmic% EQU 1 set "chkedi=for /f "tokens=2 delims==" %%a in ('"wmic path %spp% where (ApplicationID='55c92734-d682-4d71-983e-d6ec3f16059f' AND LicenseDependsOn is NULL AND PartialProductKey IS NOT NULL) get LicenseFamily /VALUE" %nul6%')"
-if %_wmic% EQU 0 set "chkedi=for /f "tokens=2 delims==" %%a in ('%psc% "(([WMISEARCHER]'SELECT LicenseFamily FROM %spp% WHERE ApplicationID=''55c92734-d682-4d71-983e-d6ec3f16059f'' AND LicenseDependsOn is NULL AND PartialProductKey IS NOT NULL').Get()).LicenseFamily ^| %% {echo ('LicenseFamily='+$_)}" %nul6%')"
-if not defined osedition %chkedi% do if not errorlevel 1 (call set "osedition=%%a")
-
-if not defined osedition (
-%eline%
-echo Failed to detect OS edition, aborting...
-call :dk_color %Blue% "To fix this issue, activate Windows from the main menu."
-goto dk_done
-)
-
-for /f "skip=2 tokens=3" %%a in ('reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v EditionID %nul6%') do set "regedition=%%a"
-if /i not "%osedition%"=="%regedition%" (
-set "showeditionerror=call :dk_color %_Yellow% "[%osedition%] [Reg-%regedition%].""
-)
-
-set branch=
-for /f "skip=2 tokens=2*" %%a in ('reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v BuildBranch %nul6%') do set "branch=%%b"
-
-::========================================================================================================================================
-
-:: Get target editions list
-
-set _target=
-set _dtarget=
-set _ptarget=
-set _ntarget=
-set _wtarget=
-
-if %winbuild% GEQ 10240 for /f "tokens=4" %%a in ('dism /online /english /Get-TargetEditions ^| findstr /i /c:"Target Edition : "') do (if defined _dtarget (set "_dtarget= !_dtarget! %%a ") else (set "_dtarget= %%a "))
-if %winbuild% LSS 10240 for /f "tokens=4" %%a in ('%psc% "$f=[System.IO.File]::ReadAllText('!_batp!') -split ':cbsxml\:.*';. ([scriptblock]::Create($f[1])) -GetTargetEditions;" ^| findstr /i /c:"Target Edition : "') do (if defined _ptarget (set "_ptarget= !_ptarget! %%a ") else (set "_ptarget= %%a "))
-
-if %winbuild% GEQ 10240 if not exist "%SystemRoot%\Servicing\Packages\Microsoft-Windows-Server*Edition~*.mum" (
-if %winbuild% GEQ 17063 call :ced_edilist
-if /i "%osedition:~0,4%"=="Core" set _pro=Professional
-if /i "%osedition%"=="CoreN" set _pro=ProfessionalN
-set "_dtarget= %_dtarget% !_wtarget! !_pro! "
-)
-
-::========================================================================================================================================
-
-for %%# in (CloudEdition CloudEditionN ServerRdsh) do if /i %osedition%==%%# (
-cls
-echo:
-call :dk_color %Red% "==== Note ===="
-echo:
-echo [EditionID:%osedition% ^| %fullbuild%]
-echo:
-echo Changing this edition may not remove "%osedition%"-specific features.
-echo:
-call :dk_color %_Yellow% "Press [7] to continue anyway..."
-choice /c 7 /n
-cls
-)
-
-for %%# in ( %_dtarget% %_ptarget% ) do if /i not "%%#"=="%osedition%" (
-echo "!_target!" | find /i " %%# " %nul1% || set "_target= !_target! %%# "
-)
-
-if defined _target (
-for %%# in (%_target%) do (
-echo %%# | findstr /i "CountrySpecific CloudEdition" %nul% || (set "_ntarget=!_ntarget! %%#")
-)
-)
-
-if not defined _ntarget (
-%line%
-echo:
-if defined dismnotworking call :dk_color %Red% "DISM.exe is not working."
-call :dk_color %Gray% "Target editions not found."
-echo Current Edition [%osedition% ^| %winbuild%] can not be changed to any other Edition.
-%line%
-goto dk_done
-)
-
-::========================================================================================================================================
-
-:cedmenu2
-
-cls
-if not defined terminal mode 98, 30
-set inpt=
-set counter=0
-set verified=0
-set targetedition=
-
-%line%
-echo:
-call :dk_color %Gray% "You can change the edition [%osedition%] [%fullbuild%] to one of the following."
-%showeditionerror%
-if defined dismnotworking (
-call :dk_color %_Yellow% "Note - DISM.exe is not working."
-if /i "%osedition:~0,4%"=="Core" call :dk_color %_Yellow% " - You will see more edition options to choose once its changed to Pro."
-)
-%line%
-echo:
-
-for %%A in (%_ntarget%) do (
-set /a counter+=1
-if /i %%A==IoTEnterprise (
-echo [!counter!] %%A [GAC, not LTSC]
-) else (
-echo [!counter!] %%A
-)
-set targetedition!counter!=%%A
-)
-
-%line%
-echo:
-echo [0] %_exitmsg%
-echo:
-call :dk_color %_Green% "Enter an option number using your keyboard and press Enter to confirm:"
-set /p inpt=
-if "%inpt%"=="" goto cedmenu2
-if "%inpt%"=="0" exit /b
-for /l %%i in (1,1,%counter%) do (if "%inpt%"=="%%i" set verified=1)
-set targetedition=!targetedition%inpt%!
-if %verified%==0 goto cedmenu2
-
-::========================================================================================================================================
-
-if %winbuild% LSS 10240 goto :cbsmethod
-if exist "%SystemRoot%\Servicing\Packages\Microsoft-Windows-Server*Edition~*.mum" goto :ced_change_server
-
-cls
-if not defined terminal mode con cols=105 lines=32
-
-if /i "%targetedition%"=="ServerRdsh" (
-echo:
-call :dk_color %Red% "==== Note ===="
-echo:
-echo Once the edition is changed to "%targetedition%",
-echo the system may not be able to properly change edition later.
-echo:
-echo [1] Continue Anyway
-echo [0] Go Back
-echo:
-call :dk_color %_Green% "Choose a menu option using your keyboard [1,0] :"
-choice /C:10 /N
-if !errorlevel!==2 goto cedmenu2
-if !errorlevel!==1 rem
-)
-
-cls
-set key=
-set _chan=
-set _dismapi=0
-
-:: Check if DISM API or slmgr.vbs is required for edition upgrade
-
-if not exist "%SysPath%\spp\tokens\skus\%targetedition%\%targetedition%*.xrm-ms" (
-echo %_wtarget% | find /i " %targetedition% " || (
-set _dismapi=1
-)
-)
-
-set "keyflow=Retail OEM:NONSLP OEM:DM Volume:MAK Volume:GVLK PGS:TB Retail:TB:Eval"
-
-call :ced_targetSKU %targetedition%
-if defined targetSKU call :ced_windowskey
-if defined key if defined pkeychannel set _chan=%pkeychannel%
-if not defined key call :changeeditiondata
-if not defined key if %_dismapi%==1 if /i "%targetedition%"=="Professional" (
-set key=VK7JG-NPHTM-C97JM-9MPGT-3V66T
-set _chan=Retail
-)
-
-if not defined key (
-%eline%
-echo [%targetedition% ^| %winbuild%]
-echo Failed to get product key from pkeyhelper.dll.
-set fixes=%fixes% %mas%troubleshoot
-call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%troubleshoot"
-goto dk_done
-)
-
-::========================================================================================================================================
-
-:: Changing from Core to Non-Core & Changing editions in Windows build older than 17134 requires "changepk /productkey" or DISM Api method and restart
-:: In other cases, editions can be changed instantly with "slmgr /ipk"
-
-if %_dismapi%==1 (
-if not defined terminal mode con cols=105 lines=40
-call :ced_rebootflag
-if defined rebootreq goto dk_done
-)
-
-cls
-%line%
-echo:
-%showeditionerror%
-if defined dismnotworking call :dk_color %_Yellow% "DISM.exe is not working."
-echo Changing the current edition [%osedition%] %fullbuild% to [%targetedition%]...
-echo:
-
-if %_dismapi%==1 (
-call :dk_color %Green% "Notes -"
-echo:
-echo - Save your work before continuing, the system will auto-restart.
-echo:
-echo - You will need to activate with HWID option once the edition is changed.
-%line%
-echo:
-choice /C:21 /N /M "[1] Continue [2] %_exitmsg% : "
-if !errorlevel!==1 exit /b
-)
-
-::========================================================================================================================================
-
-if %_dismapi%==0 (
-echo Installing %_chan% key [%key%]
-echo:
-if %_wmic% EQU 1 wmic path %sps% where __CLASS='%sps%' call InstallProductKey ProductKey="%key%" %nul%
-if %_wmic% EQU 0 %psc% "try { $null=(([WMISEARCHER]'SELECT Version FROM %sps%').Get()).InstallProductKey('%key%'); exit 0 } catch { exit $_.Exception.InnerException.HResult }" %nul%
-set keyerror=!errorlevel!
-cmd /c exit /b !keyerror!
-if !keyerror! NEQ 0 set "keyerror=[0x!=ExitCode!]"
-
-if !keyerror! EQU 0 (
-call :dk_refresh
-call :dk_color %Green% "[Successful]"
-echo:
-call :dk_color %Gray% "Reboot is required to fully change the edition."
-) else (
-call :dk_color %Red% "[Unsuccessful] [Error Code: !keyerror!]"
-set fixes=%fixes% %mas%troubleshoot
-call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%troubleshoot"
-)
-)
-
-if %_dismapi%==1 (
-echo:
-echo Applying the DISM API method with %_chan% key %key%. Please wait...
-echo:
-
-call :ced_prep
-if defined preperror goto dk_done
-
-%psc% "$f=[System.IO.File]::ReadAllText('!_batp!') -split ':dismapi\:.*';. ([scriptblock]::Create($f[1])) %targetedition% %key%"
-call :ced_postprep
-)
-%line%
-
-goto dk_done
-
-::========================================================================================================================================
-
-:cbsmethod
-
-cls
-if not defined terminal (
-mode con cols=105 lines=32
-%psc% "&{$W=$Host.UI.RawUI.WindowSize;$B=$Host.UI.RawUI.BufferSize;$W.Height=31;$B.Height=200;$Host.UI.RawUI.WindowSize=$W;$Host.UI.RawUI.BufferSize=$B;}" %nul%
-)
-
-call :ced_rebootflag
-if defined rebootreq goto dk_done
-
-echo:
-%showeditionerror%
-if defined dismnotworking call :dk_color %_Yellow% "Note - DISM.exe is not working."
-echo Changing the current edition [%osedition%] %fullbuild% to [%targetedition%]...
-echo:
-call :dk_color %Blue% "Important - Save your work before continuing, the system will auto-restart."
-echo:
-choice /C:01 /N /M "[1] Continue [0] %_exitmsg% : "
-if %errorlevel%==1 exit /b
-
-echo:
-echo Initializing...
-echo:
-
-call :ced_prep
-if defined preperror goto dk_done
-
-if %_stg%==0 (set stage=) else (set stage=-StageCurrent)
-%psc% "$f=[System.IO.File]::ReadAllText('!_batp!') -split ':cbsxml\:.*';. ([scriptblock]::Create($f[1])) -SetEdition %targetedition% %stage%"
-call :ced_postprep
-%line%
-
-goto dk_done
-
-::========================================================================================================================================
-
-:ced_change_server
-
-cls
-if not defined terminal (
-mode con cols=105 lines=32
-%psc% "&{$W=$Host.UI.RawUI.WindowSize;$B=$Host.UI.RawUI.BufferSize;$W.Height=31;$B.Height=200;$Host.UI.RawUI.WindowSize=$W;$Host.UI.RawUI.BufferSize=$B;}" %nul%
-)
-
-set key=
-set _chan=
-set "keyflow=Volume:GVLK Retail Volume:MAK OEM:NONSLP OEM:DM PGS:TB Retail:TB:Eval"
-
-call :ced_targetSKU %targetedition%
-if defined targetSKU call :ced_windowskey
-if defined key if defined pkeychannel set _chan=%pkeychannel%
-if not defined key call :changeeditiondata
-
-if not defined key (
-%eline%
-echo [%targetedition% ^| %winbuild%]
-echo Failed to get product key from pkeyhelper.dll.
-set fixes=%fixes% %mas%troubleshoot
-call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%troubleshoot"
-goto dk_done
-)
-
-call :ced_rebootflag
-if defined rebootreq goto dk_done
-
-cls
-echo:
-%showeditionerror%
-if defined dismnotworking call :dk_color %_Yellow% "Note - DISM.exe is not working."
-echo Changing the current edition [%osedition%] %fullbuild% to [%targetedition%]...
-echo:
-
-call :ced_prep
-if defined preperror goto dk_done
-
-echo Applying the command with %_chan% key...
-echo DISM /online /Set-Edition:%targetedition% /ProductKey:%key% /AcceptEula
-DISM /online /Set-Edition:%targetedition% /ProductKey:%key% /AcceptEula
-
-call :ced_postprep
-%line%
-
-goto dk_done
-
-::========================================================================================================================================
-
-:ced_prep
-
-set _time=
-set preperror=
-
-for /f %%a in ('%psc% "(Get-Date).ToString('yyyyMMdd-HHmmssfff')"') do set _time=%%a
-
-%psc% Stop-Service TrustedInstaller -force %nul%
-
-sc query TrustedInstaller | find /i "RUNNING" %nul% && (
-%eline%
-echo Failed to stop the TrustedInstaller service.
-echo Reboot your machine using the restart option and try again.
-set preperror=1
-exit /b
-)
-
-copy /y /b "%SystemRoot%\logs\cbs\cbs.log" "%SystemRoot%\logs\cbs\backup_cbs_%_time%.log" %nul%
-copy /y /b "%SystemRoot%\logs\DISM\dism.log" "%SystemRoot%\logs\DISM\backup_dism_%_time%.log" %nul%
-
-del /f /q "%SystemRoot%\logs\cbs\cbs.log" %nul%
-del /f /q "%SystemRoot%\logs\DISM\dism.log" %nul%
-
-:: Initiate this to appear in fresh logs
-
-dism /online /english /Get-CurrentEdition %nul%
-dism /online /english /Get-TargetEditions %nul%
-exit /b
-
-::========================================================================================================================================
-
-:ced_postprep
-
-timeout /t 5 %nul1%
-copy /y /b "%SystemRoot%\logs\cbs\cbs.log" "%SystemRoot%\logs\cbs\cbs_%_time%.log" %nul%
-copy /y /b "%SystemRoot%\logs\DISM\dism.log" "%SystemRoot%\logs\DISM\dism_%_time%.log" %nul%
-
-if not exist "!desktop!\ChangeEdition_Logs\" md "!desktop!\ChangeEdition_Logs\" %nul%
-call :compresslog cbs\cbs_%_time%.log ChangeEdition_Logs\CBS %nul%
-call :compresslog DISM\dism_%_time%.log ChangeEdition_Logs\DISM %nul%
-
-echo:
-if %winbuild% GEQ 9200 %psc% "if ((Get-WindowsOptionalFeature -Online -FeatureName NetFx3).State -eq 'Enabled') {Write-Host 'Checking .NET Framework 3.5 Status - Enabled'}"
-echo Log files are copied to the ChangeEdition_Logs folder on your desktop.
-echo:
-call :dk_color %Blue% "In case there are errors, you should restart the system before trying again."
-echo:
-set fixes=%fixes% %mas%change_edition_issues
-call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%change_edition_issues"
-exit /b
-
-:compresslog
-
-:: https://stackoverflow.com/a/46268232
-
-set "ddf="%SystemRoot%\Temp\%Random%%Random%%Random%%Random%""
-%nul% del /q /f %ddf%
-echo/.New Cabinet>%ddf%
-echo/.set Cabinet=ON>>%ddf%
-echo/.set CabinetFileCountThreshold=0;>>%ddf%
-echo/.set Compress=ON>>%ddf%
-echo/.set CompressionType=LZX>>%ddf%
-echo/.set CompressionLevel=7;>>%ddf%
-echo/.set CompressionMemory=21;>>%ddf%
-echo/.set FolderFileCountThreshold=0;>>%ddf%
-echo/.set FolderSizeThreshold=0;>>%ddf%
-echo/.set GenerateInf=OFF>>%ddf%
-echo/.set InfFileName=nul>>%ddf%
-echo/.set MaxCabinetSize=0;>>%ddf%
-echo/.set MaxDiskFileCount=0;>>%ddf%
-echo/.set MaxDiskSize=0;>>%ddf%
-echo/.set MaxErrors=1;>>%ddf%
-echo/.set RptFileName=nul>>%ddf%
-echo/.set UniqueFiles=ON>>%ddf%
-for /f "tokens=* delims=" %%D in ('dir /a:-D/b/s "%SystemRoot%\logs\%1"') do (
- echo/"%%~fD" /inf=no;>>%ddf%
-)
-makecab /F %ddf% /D DiskDirectory1="" /D CabinetNameTemplate="!desktop!\%2_%_time%.cab"
-del /q /f %ddf%
-exit /b
-
-::========================================================================================================================================
-
-:: Set variables
-
-:dk_setvar
-
-set ps=%SysPath%\WindowsPowerShell\v1.0\powershell.exe
-set psc=%ps% -nop -c
-set winbuild=1
-for /f "tokens=2 delims=[]" %%G in ('ver') do for /f "tokens=2,3,4 delims=. " %%H in ("%%~G") do set "winbuild=%%J"
-
-set _slexe=sppsvc.exe& set _slser=sppsvc
-if %winbuild% LEQ 6300 (set _slexe=SLsvc.exe& set _slser=SLsvc)
-if %winbuild% LSS 7600 if exist "%SysPath%\SLsvc.exe" (set _slexe=SLsvc.exe& set _slser=SLsvc)
-if %_slexe%==SLsvc.exe set _vis=1
-
-set _NCS=1
-if %winbuild% LSS 10586 set _NCS=0
-if %winbuild% GEQ 10586 reg query "HKCU\Console" /v ForceV2 %nul2% | find /i "0x0" %nul1% && (set _NCS=0)
-
-echo "%PROCESSOR_ARCHITECTURE% %PROCESSOR_ARCHITEW6432%" | find /i "ARM64" %nul1% && (if %winbuild% LSS 21277 set ps32onArm=1)
-
-if %_NCS% EQU 1 (
-for /F %%a in ('echo prompt $E ^| cmd') do set "esc=%%a"
-set "Red="41;97m""
-set "Gray="100;97m""
-set "Green="42;97m""
-set "Blue="44;97m""
-set "White="107;91m""
-set "_Red="40;91m""
-set "_White="40;37m""
-set "_Green="40;92m""
-set "_Yellow="40;93m""
-) else (
-set "Red="Red" "white""
-set "Gray="Darkgray" "white""
-set "Green="DarkGreen" "white""
-set "Blue="Blue" "white""
-set "White="White" "Red""
-set "_Red="Black" "Red""
-set "_White="Black" "Gray""
-set "_Green="Black" "Green""
-set "_Yellow="Black" "Yellow""
-)
-
-set "nceline=echo: &echo ==== ERROR ==== &echo:"
-set "eline=echo: &call :dk_color %Red% "==== ERROR ====" &echo:"
-if %~z0 GEQ 200000 (
-set "_exitmsg=Go back"
-set "_fixmsg=Go back to Main Menu, select Troubleshoot and run Fix Licensing option."
-) else (
-set "_exitmsg=Exit"
-set "_fixmsg=In MAS folder, run Troubleshoot script and select Fix Licensing option."
-)
-exit /b
-
-::========================================================================================================================================
-
-:: Refresh license status
-
-:dk_refresh
-
-if %_wmic% EQU 1 wmic path %sps% where __CLASS='%sps%' call RefreshLicenseStatus %nul%
-if %_wmic% EQU 0 %psc% "$null=(([WMICLASS]'%sps%').GetInstances()).RefreshLicenseStatus()" %nul%
-exit /b
-
-:: Get all products Activation IDs
-
-:dk_actids
-
-set allapps=
-if %_wmic% EQU 1 set "chkapp=for /f "tokens=2 delims==" %%a in ('"wmic path %spp% where (ApplicationID='%1') get ID /VALUE" %nul6%')"
-if %_wmic% EQU 0 set "chkapp=for /f "tokens=2 delims==" %%a in ('%psc% "(([WMISEARCHER]'SELECT ID FROM %spp% WHERE ApplicationID=''%1''').Get()).ID ^| %% {echo ('ID='+$_)}" %nul6%')"
-%chkapp% do (if defined allapps (call set "allapps=!allapps! %%a") else (call set "allapps=%%a"))
-exit /b
-
-:: Get Edition list
-
-:ced_edilist
-
-if %_wmic% EQU 1 set "chkedi=for /f "tokens=2 delims==" %%a in ('"wmic path %spp% where (ApplicationID='55c92734-d682-4d71-983e-d6ec3f16059f' AND LicenseDependsOn is NULL) get LicenseFamily /VALUE" %nul6%')"
-if %_wmic% EQU 0 set "chkedi=for /f "tokens=2 delims==" %%a in ('%psc% "(([WMISEARCHER]'SELECT LicenseFamily FROM %spp% WHERE ApplicationID=''55c92734-d682-4d71-983e-d6ec3f16059f'' AND LicenseDependsOn is NULL').Get()).LicenseFamily ^| %% {echo ('LicenseFamily='+$_)}" %nul6%')"
-%chkedi% do call set "_wtarget= !_wtarget! %%a "
-exit /b
-
-:: Check wmic.exe
-
-:dk_ckeckwmic
-
-if %winbuild% LSS 9200 (set _wmic=1&exit /b)
-set _wmic=0
-for %%# in (wmic.exe) do @if not "%%~$PATH:#"=="" (
-cmd /c "wmic path Win32_ComputerSystem get CreationClassName /value" %nul2% | find /i "computersystem" %nul1% && set _wmic=1
-)
-exit /b
-
-:: Show info for potential script stuck scenario
-
-:dk_sppissue
-
-sc start %_slser% %nul%
-set spperror=%errorlevel%
-
-if %spperror% NEQ 1056 if %spperror% NEQ 0 (
-%eline%
-echo sc start %_slser% [Error Code: %spperror%]
-if %spperror% EQU 1053 (
-call :dk_color %Blue% "Reboot your machine using the restart option and try again."
-call :dk_color %Blue% "If it still does not work, go back to Main Menu, select Troubleshoot and run Fix WPA Registry option."
-)
-)
-
-echo:
-%psc% "$job = Start-Job { (Get-WmiObject -Query 'SELECT * FROM %sps%').Version }; if (-not (Wait-Job $job -Timeout 30)) {write-host '%_slser% is not working correctly. Check this webpage for help - %mas%troubleshoot'}"
-exit /b
-
-:: Common lines used in PowerShell reflection code
-
-:dk_reflection
-
-set ref=$AssemblyBuilder = [AppDomain]::CurrentDomain.DefineDynamicAssembly(4, 1);
-set ref=%ref% $ModuleBuilder = $AssemblyBuilder.DefineDynamicModule(2, $False);
-set ref=%ref% $TypeBuilder = $ModuleBuilder.DefineType(0);
-exit /b
-
-::========================================================================================================================================
-
-:: Check pending reboot flags
-
-:ced_rebootflag
-
-set rebootreq=
-reg query "HKLM\Software\Microsoft\Windows\CurrentVersion\Component Based Servicing\RebootPending" %nul% && set rebootreq=1
-reg query "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate\Auto Update\RebootRequired" %nul% && set rebootreq=1
-
-if defined rebootreq (
-%eline%
-echo Pending reboot flags found.
-echo:
-echo Make sure Windows is fully updated, restart the system and try again.
-)
-exit /b
-
-::========================================================================================================================================
-
-:: Get Product Key from pkeyhelper.dll for future new editions
-:: It works on Windows 10 1803 (17134) and later builds.
-
-:k_pkey
-
-call :dk_reflection
-
-set d1=%ref% [void]$TypeBuilder.DefinePInvokeMethod('SkuGetProductKeyForEdition', 'pkeyhelper.dll', 'Public, Static', 1, [int], @([int], [String], [String].MakeByRefType(), [String].MakeByRefType()), 1, 3);
-set d1=%d1% $out = ''; [void]$TypeBuilder.CreateType()::SkuGetProductKeyForEdition(%1, %2, [ref]$out, [ref]$null); $out
-
-set pkey=
-for /f %%a in ('%psc% "%d1%"') do if not errorlevel 1 (set pkey=%%a)
-exit /b
-
-:: Get channel name for the key which was extracted from pkeyhelper.dll
-
-:k_pkeychannel
-
-set k=%1
-set m=[Runtime.InteropServices.Marshal]
-set p=%SysPath%\spp\tokens\pkeyconfig\pkeyconfig.xrm-ms
-
-set d1=%ref% [void]$TypeBuilder.DefinePInvokeMethod('PidGenX', 'pidgenx.dll', 'Public, Static', 1, [int], @([String], [String], [String], [int], [IntPtr], [IntPtr], [IntPtr]), 1, 3);
-set d1=%d1% $r = [byte[]]::new(0x04F8); $r[0] = 0xF8; $r[1] = 0x04; $f = %m%::AllocHGlobal(0x04F8); %m%::Copy($r, 0, $f, 0x04F8);
-set d1=%d1% [void]$TypeBuilder.CreateType()::PidGenX('%k%', '%p%', '00000', 0, 0, 0, $f); %m%::Copy($f, $r, 0, 0x04F8); %m%::FreeHGlobal($f); [Text.Encoding]::Unicode.GetString($r, 1016, 128)
-
-set pkeychannel=
-for /f %%a in ('%psc% "%d1%"') do if not errorlevel 1 (set pkeychannel=%%a)
-exit /b
-
-:ced_windowskey
-
-for %%# in (pkeyhelper.dll) do @if "%%~$PATH:#"=="" exit /b
-for %%# in (%keyflow%) do (
-call :k_pkey %targetSKU% '%%#'
-if defined pkey call :k_pkeychannel !pkey!
-if /i "!pkeychannel!"=="%%#" (
-set key=!pkey!
-exit /b
-)
-)
-exit /b
-
-::========================================================================================================================================
-
-:ced_targetSKU
-
-set k=%1
-set targetSKU=
-for %%# in (pkeyhelper.dll) do @if "%%~$PATH:#"=="" exit /b
-
-call :dk_reflection
-
-set d1=%ref% [void]$TypeBuilder.DefinePInvokeMethod('GetEditionIdFromName', 'pkeyhelper.dll', 'Public, Static', 1, [int], @([String], [int].MakeByRefType()), 1, 3);
-set d1=%d1% $out = 0; [void]$TypeBuilder.CreateType()::GetEditionIdFromName('%k%', [ref]$out); $out
-
-for /f %%a in ('%psc% "%d1%"') do if not errorlevel 1 (set targetSKU=%%a)
-if "%targetSKU%"=="0" set targetSKU=
-exit /b
-
-::========================================================================================================================================
-
-:dk_color
-
-if %_NCS% EQU 1 (
-echo %esc%[%~1%~2%esc%[0m
-) else if exist %ps% (
-%psc% write-host -back '%1' -fore '%2' '%3'
-) else if not exist %ps% (
-echo %~3
-)
-exit /b
-
-:dk_color2
-
-if %_NCS% EQU 1 (
-echo %esc%[%~1%~2%esc%[%~3%~4%esc%[0m
-) else if exist %ps% (
-%psc% write-host -back '%1' -fore '%2' '%3' -NoNewline; write-host -back '%4' -fore '%5' '%6'
-) else if not exist %ps% (
-echo %~3 %~6
-)
-exit /b
-
-::========================================================================================================================================
-
-:dk_done
-
-echo:
-if %_unattended%==1 timeout /t 2 & exit /b
-
-if defined fixes (
-call :dk_color %White% "Follow ALL the ABOVE blue lines. "
-call :dk_color2 %Blue% "Press [1] to Open Support Webpage " %Gray% " Press [0] to Ignore"
-choice /C:10 /N
-if !errorlevel!==2 exit /b
-if !errorlevel!==1 (start %selfgit% & start %github% & for %%# in (%fixes%) do (start %%#))
-)
-
-if defined terminal (
-call :dk_color %_Yellow% "Press [0] key to %_exitmsg%..."
-choice /c 0 /n
-) else (
-call :dk_color %_Yellow% "Press any key to %_exitmsg%..."
-pause %nul1%
-)
-
-exit /b
-
-::========================================================================================================================================
-
-:: https://github.com/asdcorp/Set-WindowsCbsEdition
-
-:cbsxml:[
-param (
- [Parameter()]
- [String]$SetEdition,
-
- [Parameter()]
- [Switch]$GetTargetEditions,
-
- [Parameter()]
- [Switch]$StageCurrent
-)
-
-function Get-AssemblyIdentity {
- param (
- [String]$PackageName
- )
-
- $PackageName = [String]$PackageName
- $packageData = ($PackageName -split '~')
-
- if($packageData[3] -eq '') {
- $packageData[3] = 'neutral'
- }
-
- return ""
-}
-
-function Get-SxsName {
- param (
- [String]$PackageName
- )
-
- $name = ($PackageName -replace '[^A-z0-9\-\._]', '')
-
- if($name.Length -gt 40) {
- $name = ($name[0..18] -join '') + '\.\.' + ($name[-19..-1] -join '')
- }
-
- return $name.ToLower()
-}
-
-function Find-EditionXmlInSxs {
- param (
- [String]$Edition
- )
-
- $candidates = @($Edition, 'Client', 'Server')
- $winSxs = $Env:SystemRoot + '\WinSxS'
- $allInSxs = Get-ChildItem -Path $winSxs | select Name
-
- foreach($candidate in $candidates) {
- $name = Get-SxsName -PackageName "Microsoft-Windows-Editions-$candidate"
- $packages = $allInSxs | where name -Match ('^.*_'+$name+'_31bf3856ad364e35')
-
- if($packages.Length -eq 0) {
- continue
- }
-
- $package = $packages[-1].Name
- $testPath = $winSxs + "\$package\" + $Edition + 'Edition.xml'
-
- if(Test-Path -Path $testPath -PathType Leaf) {
- return $testPath
- }
- }
-
- return $null
-}
-
-function Find-EditionXml {
- param (
- [String]$Edition
- )
-
- $servicingEditions = $Env:SystemRoot + '\servicing\Editions'
- $editionXml = $Edition + 'Edition.xml'
-
- $editionXmlInServicing = $servicingEditions + '\' + $editionXml
-
- if(Test-Path -Path $editionXmlInServicing -PathType Leaf) {
- return $editionXmlInServicing
- }
-
- return Find-EditionXmlInSxs -Edition $Edition
-}
-
-function Write-UpgradeCandidates {
- param (
- [HashTable]$InstallCandidates
- )
-
- $editionCount = 0
- Write-Host 'Editions that can be upgraded to:'
- foreach($candidate in $InstallCandidates.Keys) {
- Write-Host "Target Edition : $candidate"
- $editionCount++
- }
-
- if($editionCount -eq 0) {
- Write-Host '(no editions are available)'
- }
-}
-
-function Write-UpgradeXml {
- param (
- [Array]$RemovalCandidates,
- [Array]$InstallCandidates,
- [Boolean]$Stage
- )
-
- $removeAction = 'remove'
- if($Stage) {
- $removeAction = 'stage'
- }
-
- Write-Output ''
- Write-Output ''
- Write-Output ''
-
- foreach($package in $InstallCandidates) {
- Write-Output ''
- Write-Output (Get-AssemblyIdentity -PackageName $package)
- Write-Output ''
- }
-
- foreach($package in $RemovalCandidates) {
- Write-Output ""
- Write-Output (Get-AssemblyIdentity -PackageName $package)
- Write-Output ''
- }
-
- Write-Output ''
- Write-Output ''
-}
-
-function Write-Usage {
- Get-Help $script:MyInvocation.MyCommand.Path -detailed
-}
-
-$version = '1.0'
-$getTargetsParam = $GetTargetEditions.IsPresent
-$stageCurrentParam = $StageCurrent.IsPresent
-
-if($SetEdition -eq '' -and ($false -eq $getTargetsParam)) {
- Write-Usage
- Exit 1
-}
-
-$removalCandidates = @();
-$installCandidates = @{};
-
-$packages = Get-ChildItem -Path 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Component Based Servicing\Packages' | select Name | where { $_.name -match '^.*\\Microsoft-Windows-.*Edition~' }
-foreach($package in $packages) {
- $state = (Get-ItemProperty -Path "Registry::$($package.Name)").CurrentState
- $packageName = ($package.Name -split '\\')[-1]
- $packageEdition = (($packageName -split 'Edition~')[0] -split 'Microsoft-Windows-')[-1]
-
- if($state -eq 0x40) {
- if($null -eq $installCandidates[$packageEdition]) {
- $installCandidates[$packageEdition] = @()
- }
-
- if($false -eq ($installCandidates[$packageEdition] -contains $packageName)) {
- $installCandidates[$packageEdition] = $installCandidates[$packageEdition] + @($packageName)
- }
- }
-
- if((($state -eq 0x50) -or ($state -eq 0x70)) -and ($false -eq ($removalCandidates -contains $packageName))) {
- $removalCandidates = $removalCandidates + @($packageName)
- }
-}
-
-if($getTargetsParam) {
- Write-UpgradeCandidates -InstallCandidates $installCandidates
- Exit
-}
-
-if($false -eq ($installCandidates.Keys -contains $SetEdition)) {
- Write-Error "The system cannot be upgraded to `"$SetEdition`""
- Exit 1
-}
-
-$xmlPath = $Env:SystemRoot + '\Temp' + '\CbsUpgrade.xml'
-
-Write-UpgradeXml -RemovalCandidates $removalCandidates `
- -InstallCandidates $installCandidates[$SetEdition] `
- -Stage $stageCurrentParam >$xmlPath
-
-$editionXml = Find-EditionXml -Edition $SetEdition
-if($null -eq $editionXml) {
- Write-Warning 'Unable to find edition specific settings XML. Proceeding without it...'
-}
-
-Write-Host 'Starting the upgrade process. This may take a while...'
-
-DISM.EXE /English /NoRestart /Online /Apply-Unattend:$xmlPath
-$dismError = $LASTEXITCODE
-
-Remove-Item -Path $xmlPath -Force
-
-if(($dismError -ne 0) -and ($dismError -ne 3010)) {
- Write-Error 'Failed to upgrade to the target edition'
- Exit $dismError
-}
-
-if($null -ne $editionXml) {
- $destination = $Env:SystemRoot + '\' + $SetEdition + '.xml'
- Copy-Item -Path $editionXml -Destination $destination
-
- DISM.EXE /English /NoRestart /Online /Apply-Unattend:$editionXml
- $dismError = $LASTEXITCODE
-
- if(($dismError -ne 0) -and ($dismError -ne 3010)) {
- Write-Error 'Failed to apply edition specific settings'
- Exit $dismError
- }
-}
-
-Restart-Computer
-:cbsxml:]
-
-::========================================================================================================================================
-
-:: Change edition using DISM API
-:: Thanks to Alex (aka may, ave9858)
-
-:dismapi:[
-param (
- [Parameter()]
- [String]$TargetEdition,
-
- [Parameter()]
- [String]$Key
-)
-
-$AssemblyBuilder = [AppDomain]::CurrentDomain.DefineDynamicAssembly(4, 1)
-$ModuleBuilder = $AssemblyBuilder.DefineDynamicModule(2, $False)
-$TB = $ModuleBuilder.DefineType(0)
-
-[void]$TB.DefinePInvokeMethod('DismInitialize', 'DismApi.dll', 22, 1, [int], @([int], [IntPtr], [IntPtr]), 1, 3)
-[void]$TB.DefinePInvokeMethod('DismOpenSession', 'DismApi.dll', 22, 1, [int], @([String], [IntPtr], [IntPtr], [UInt32].MakeByRefType()), 1, 3)
-[void]$TB.DefinePInvokeMethod('_DismSetEdition', 'DismApi.dll', 22, 1, [int], @([UInt32], [String], [String], [IntPtr], [IntPtr], [IntPtr]), 1, 3)
-$Dism = $TB.CreateType()
-
-[void]$Dism::DismInitialize(2, 0, 0)
-$Session = 0
-[void]$Dism::DismOpenSession('DISM_{53BFAE52-B167-4E2F-A258-0A37B57FF845}', 0, 0, [ref]$Session)
-if (!$Dism::_DismSetEdition($Session, "$TargetEdition", "$Key", 0, 0, 0)) {
- Restart-Computer
-}
-:dismapi:]
-
-::========================================================================================================================================
-
-:: 1st column = Generic Retail/OEM/MAK/GVLK Key
-:: 2nd column = Key Type
-:: 3rd column = WMI Edition ID
-:: 4th column = Version name incase same Edition ID is used in different OS versions with different key
-:: Separator = _
-
-:: For Windows 10/11 editions, HWID key is listed where ever possible, in Server versions, KMS key is listed where ever possible.
-:: For Windows, generic keys are mentioned till 22000 and for Server, generic keys are mentioned till 17763, later ones are extracted from the pkeyhelper.dll
-
-:changeeditiondata
-
-if exist "%SystemRoot%\Servicing\Packages\Microsoft-Windows-Server*Edition~*.mum" (
-if %winbuild% GTR 17763 exit /b
-) else (
-if %winbuild% GEQ 22000 exit /b
-)
-if exist "%SystemRoot%\Servicing\Packages\Microsoft-Windows-Server*CorEdition~*.mum" (set Cor=Cor) else (set Cor=)
-
-set w=
-for %%# in (
-XGVPP-NMH47-7TTHJ-W3FW7-8HV%w%2C__OEM:NONSLP_Enterprise
-D6RD9-D4N8T-RT9QX-YW6YT-FCW%w%WJ______Retail_Starter
-3V6Q6-NQXCX-V8YXR-9QCYV-QPF%w%CT__Volume:MAK_EnterpriseN
-3NFXW-2T27M-2BDW6-4GHRV-68X%w%RX______Retail_StarterN
-VK7JG-NPHTM-C97JM-9MPGT-3V6%w%6T______Retail_Professional
-2B87N-8KFHP-DKV6R-Y2C8J-PKC%w%KT______Retail_ProfessionalN
-4CPRK-NM3K3-X6XXQ-RXX86-WXC%w%HW______Retail_CoreN
-N2434-X9D7W-8PF6X-8DV9T-8TY%w%MD______Retail_CoreCountrySpecific
-BT79Q-G7N6G-PGBYW-4YWX6-6F4%w%BT______Retail_CoreSingleLanguage
-YTMG3-N6DKC-DKB77-7M9GH-8HV%w%X7______Retail_Core
-XKCNC-J26Q9-KFHD2-FKTHY-KD7%w%2Y__OEM:NONSLP_PPIPro
-YNMGQ-8RYV3-4PGQ3-C8XTP-7CF%w%BY______Retail_Education
-84NGF-MHBT6-FXBX8-QWJK7-DRR%w%8H______Retail_EducationN
-KCNVH-YKWX8-GJJB9-H9FDT-6F7%w%W2__Volume:MAK_EnterpriseS_VB
-43TBQ-NH92J-XKTM7-KT3KK-P39%w%PB__OEM:NONSLP_EnterpriseS_RS5
-NK96Y-D9CD8-W44CQ-R8YTK-DYJ%w%WX__OEM:NONSLP_EnterpriseS_RS1
-FWN7H-PF93Q-4GGP8-M8RF3-MDW%w%WW__OEM:NONSLP_EnterpriseS_TH
-RQFNW-9TPM3-JQ73T-QV4VQ-DV9%w%PT__Volume:MAK_EnterpriseSN_VB
-M33WV-NHY3C-R7FPM-BQGPT-239%w%PG__Volume:MAK_EnterpriseSN_RS5
-2DBW3-N2PJG-MVHW3-G7TDK-9HK%w%R4__Volume:MAK_EnterpriseSN_RS1
-NTX6B-BRYC2-K6786-F6MVQ-M7V%w%2X__Volume:MAK_EnterpriseSN_TH
-G3KNM-CHG6T-R36X3-9QDG6-8M8%w%K9______Retail_ProfessionalSingleLanguage
-HNGCC-Y38KG-QVK8D-WMWRK-X86%w%VK______Retail_ProfessionalCountrySpecific
-DXG7C-N36C4-C4HTG-X4T3X-2YV%w%77______Retail_ProfessionalWorkstation
-WYPNQ-8C467-V2W6J-TX4WX-WT2%w%RQ______Retail_ProfessionalWorkstationN
-8PTT6-RNW4C-6V7J2-C2D3X-MHB%w%PB______Retail_ProfessionalEducation
-GJTYN-HDMQY-FRR76-HVGC7-QPF%w%8P______Retail_ProfessionalEducationN
-C4NTJ-CX6Q2-VXDMR-XVKGM-F9D%w%JC__Volume:MAK_EnterpriseG
-46PN6-R9BK9-CVHKB-HWQ9V-MBJ%w%Y8__Volume:MAK_EnterpriseGN
-NJCF7-PW8QT-3324D-688JX-2YV%w%66______Retail_ServerRdsh
-XQQYW-NFFMW-XJPBH-K8732-CKF%w%FD______OEM:DM_IoTEnterprise
-QPM6N-7J2WJ-P88HH-P3YRH-YY7%w%4H__OEM:NONSLP_IoTEnterpriseS
-K9VKN-3BGWV-Y624W-MCRMQ-BHD%w%CD______Retail_CloudEditionN
-KY7PN-VR6RX-83W6Y-6DDYQ-T6R%w%4W______Retail_CloudEdition
-V3WVW-N2PV2-CGWC3-34QGF-VMJ%w%2C______Retail_Cloud
-NH9J3-68WK7-6FB93-4K3DF-DJ4%w%F6______Retail_CloudN
-2HN6V-HGTM8-6C97C-RK67V-JQP%w%FD______Retail_CloudE
-WC2BQ-8NRM3-FDDYY-2BFGV-KHK%w%QY_Volume:GVLK_ServerStandard%Cor%_RS1
-CB7KF-BWN84-R7R2Y-793K2-8XD%w%DG_Volume:GVLK_ServerDatacenter%Cor%_RS1
-JCKRF-N37P4-C2D82-9YXRT-4M6%w%3B_Volume:GVLK_ServerSolution_RS1
-QN4C6-GBJD2-FB422-GHWJK-GJG%w%2R_Volume:GVLK_ServerCloudStorage_RS1
-VP34G-4NPPG-79JTQ-864T4-R3M%w%QX_Volume:GVLK_ServerAzureCor_RS1
-9JQNQ-V8HQ6-PKB8H-GGHRY-R62%w%H6______Retail_ServerAzureNano_RS1
-VN8D3-PR82H-DB6BJ-J9P4M-92F%w%6J______Retail_ServerStorageStandard_RS1
-48TQX-NVK3R-D8QR3-GTHHM-8FH%w%XC______Retail_ServerStorageWorkgroup_RS1
-2HXDN-KRXHB-GPYC7-YCKFJ-7FV%w%DG_Volume:GVLK_ServerDatacenterACor_RS3
-PTXN8-JFHJM-4WC78-MPCBR-9W4%w%KR_Volume:GVLK_ServerStandardACor_RS3
-) do (
-for /f "tokens=1-4 delims=_" %%A in ("%%#") do if /i %targetedition%==%%C (
-
-if not defined key (
-set 4th=%%D
-if not defined 4th (
-set "key=%%A" & set "_chan=%%B"
-) else (
-echo "%branch%" | find /i "%%D" %nul1% && (set "key=%%A" & set "_chan=%%B")
-)
-)
-)
-)
-exit /b
-
-::========================================================================================================================================
-:: Leave empty line below
diff --git a/MAS/Separate-Files-Version/Extract_OEM_Folder.cmd b/MAS/Separate-Files-Version/Extract_OEM_Folder.cmd
deleted file mode 100644
index 2a95158..0000000
--- a/MAS/Separate-Files-Version/Extract_OEM_Folder.cmd
+++ /dev/null
@@ -1,835 +0,0 @@
-@set masver=3.10
-@echo off
-
-
-
-::============================================================================
-::
-:: Homepage: m{}assgrave{dot}dev
-::
-::============================================================================
-
-
-
-::========================================================================================================================================
-
-:: Set environment variables, it helps if they are misconfigured in the system
-
-setlocal EnableExtensions
-setlocal DisableDelayedExpansion
-
-set "PathExt=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC"
-
-set "SysPath=%SystemRoot%\System32"
-set "Path=%SystemRoot%\System32;%SystemRoot%;%SystemRoot%\System32\Wbem;%SystemRoot%\System32\WindowsPowerShell\v1.0\"
-if exist "%SystemRoot%\Sysnative\reg.exe" (
-set "SysPath=%SystemRoot%\Sysnative"
-set "Path=%SystemRoot%\Sysnative;%SystemRoot%;%SystemRoot%\Sysnative\Wbem;%SystemRoot%\Sysnative\WindowsPowerShell\v1.0\;%Path%"
-)
-
-set "ComSpec=%SysPath%\cmd.exe"
-set "PSModulePath=%ProgramFiles%\WindowsPowerShell\Modules;%SysPath%\WindowsPowerShell\v1.0\Modules"
-
-set re1=
-set re2=
-set "_cmdf=%~f0"
-for %%# in (%*) do (
-if /i "%%#"=="re1" set re1=1
-if /i "%%#"=="re2" set re2=1
-if /i "%%#"=="-qedit" (set re1=1&set re2=1)
-)
-
-:: Re-launch the script with x64 process if it was initiated by x86 process on x64 bit Windows
-:: or with ARM64 process if it was initiated by x86/ARM32 process on ARM64 Windows
-
-if exist %SystemRoot%\Sysnative\cmd.exe if not defined re1 (
-setlocal EnableDelayedExpansion
-start %SystemRoot%\Sysnative\cmd.exe /c ""!_cmdf!" %* re1"
-exit /b
-)
-
-:: Re-launch the script with ARM32 process if it was initiated by x64 process on ARM64 Windows
-
-if exist %SystemRoot%\SysArm32\cmd.exe if %PROCESSOR_ARCHITECTURE%==AMD64 if not defined re2 (
-setlocal EnableDelayedExpansion
-start %SystemRoot%\SysArm32\cmd.exe /c ""!_cmdf!" %* re2"
-exit /b
-)
-
-::========================================================================================================================================
-
-set "blank="
-set "mas=ht%blank%tps%blank%://m%blank%ass%blank%grave.dev/"
-set "github=ht%blank%tps%blank%://github.com/m%blank%assgra%blank%vel/Micro%blank%soft-Acti%blank%vation-Scripts"
-set "selfgit=ht%blank%tps%blank%://git.acti%blank%vated.win/Micr%blank%osoft-Act%blank%ivation-Scripts"
-
-:: Check if Null service is working, it's important for the batch script
-
-sc query Null | find /i "RUNNING"
-if %errorlevel% NEQ 0 (
-echo:
-echo Null service is not running, script may crash...
-echo:
-echo:
-echo Check this webpage for help - %mas%fix_service
-echo:
-echo:
-ping 127.0.0.1 -n 20
-)
-cls
-
-:: Check LF line ending
-
-pushd "%~dp0"
->nul findstr /v "$" "%~nx0" && (
-echo:
-echo Error - Script either has LF line ending issue or an empty line at the end of the script is missing.
-echo:
-echo:
-echo Check this webpage for help - %mas%troubleshoot
-echo:
-echo:
-ping 127.0.0.1 -n 20 >nul
-popd
-exit /b
-)
-popd
-
-::========================================================================================================================================
-
-cls
-color 07
-title Extract $OEM$ Folder %masver%
-
-set _args=
-set _elev=
-set _unattended=0
-
-set _args=%*
-if defined _args set _args=%_args:"=%
-if defined _args set _args=%_args:re1=%
-if defined _args set _args=%_args:re2=%
-if defined _args (
-for %%A in (%_args%) do (
-if /i "%%A"=="-el" set _elev=1
-)
-)
-
-set "nul1=1>nul"
-set "nul2=2>nul"
-set "nul6=2^>nul"
-set "nul=>nul 2>&1"
-
-call :dk_setvar
-
-::========================================================================================================================================
-
-if %winbuild% EQU 1 (
-%eline%
-echo Failed to detect Windows build number.
-echo:
-setlocal EnableDelayedExpansion
-set fixes=%fixes% %mas%troubleshoot
-call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%troubleshoot"
-goto done2
-)
-
-if exist "%Systemdrive%\Users\WDAGUtilityAccount" (
-sc query gcs | find /i "RUNNING" %nul% && (
-%eline%
-echo Windows Sandbox detected.
-echo The script cannot run due to missing licensing components. Aborting...
-echo:
-goto done2
-)
-)
-
-if %winbuild% LSS 6001 (
-%nceline%
-echo Unsupported OS version detected [%winbuild%].
-echo MAS only supports Windows Vista/7/8/8.1/10/11 and their Server equivalents.
-if %winbuild% EQU 6000 (
-echo:
-echo Windows Vista RTM is not supported because Powershell cannot be installed.
-echo Upgrade to Windows Vista SP1 or SP2.
-)
-goto done2
-)
-
-if %winbuild% LSS 7600 if not exist "%SysPath%\WindowsPowerShell\v1.0\Modules" (
-%nceline%
-if not exist %ps% (
-echo PowerShell is not installed in your system.
-)
-echo Install PowerShell 2.0 using the following URL.
-echo:
-echo https://www.catalog.update.microsoft.com/Search.aspx?q=KB968930
-if %_unattended%==0 start https://www.catalog.update.microsoft.com/Search.aspx?q=KB968930
-goto done2
-)
-
-::========================================================================================================================================
-
-:: Fix special character limitations in path name
-
-set "_work=%~dp0"
-if "%_work:~-1%"=="\" set "_work=%_work:~0,-1%"
-
-set "_batf=%~f0"
-set "_batp=%_batf:'=''%"
-
-set _PSarg="""%~f0""" -el %_args%
-set _PSarg=%_PSarg:'=''%
-
-set "_ttemp=%userprofile%\AppData\Local\Temp"
-
-setlocal EnableDelayedExpansion
-
-::========================================================================================================================================
-
-echo "!_batf!" | find /i "!_ttemp!" %nul1% && (
-if /i not "!_work!"=="!_ttemp!" (
-%eline%
-echo The script was launched from the temp folder.
-echo You are most likely running the script directly from the archive file.
-echo:
-echo Extract the archive file and launch the script from the extracted folder.
-goto done2
-)
-)
-
-::========================================================================================================================================
-
-:: Elevate script as admin and pass arguments and preventing loop
-
-%nul1% fltmc || (
-if not defined _elev %psc% "start cmd.exe -arg '/c \"!_PSarg!\"' -verb runas" && exit /b
-%eline%
-echo This script needs admin rights.
-echo Right click on this script and select 'Run as administrator'.
-goto done2
-)
-
-::========================================================================================================================================
-
-:: Check PowerShell
-
-::pstst $ExecutionContext.SessionState.LanguageMode :pstst
-
-for /f "delims=" %%a in ('%psc% "if ($PSVersionTable.PSEdition -ne 'Core') {$f=[System.IO.File]::ReadAllText('!_batp!') -split ':pstst';. ([scriptblock]::Create($f[1]))}" %nul6%') do (set tstresult=%%a)
-
-if /i not "%tstresult%"=="FullLanguage" (
-%eline%
-for /f "delims=" %%a in ('%psc% "$ExecutionContext.SessionState.LanguageMode" %nul6%') do (set tstresult2=%%a)
-echo Test 1 - %tstresult%
-echo Test 2 - !tstresult2!
-echo:
-
-REM check LanguageMode
-
-echo: !tstresult2! | findstr /i "ConstrainedLanguage RestrictedLanguage NoLanguage" %nul1% && (
-echo FullLanguage mode not found in PowerShell. Aborting...
-echo If you have applied restrictions on Powershell then undo those changes.
-set fixes=%fixes% %mas%fix_powershell
-call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%fix_powershell"
-goto done2
-)
-
-REM check Powershell core version
-
-cmd /c "%psc% "$PSVersionTable.PSEdition"" | find /i "Core" %nul1% && (
-echo Windows Powershell is needed for MAS but it seems to be replaced with Powershell core. Aborting...
-set fixes=%fixes% %mas%in-place_repair_upgrade
-call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%in-place_repair_upgrade"
-goto done2
-)
-
-REM check for Mal-ware that may cause issues with Powershell
-
-for /r "%ProgramFiles%\" %%f in (secureboot.exe) do if exist "%%f" (
-echo "%%f"
-echo Mal%blank%ware found, PowerShell is not working properly.
-set fixes=%fixes% %mas%remove_mal%w%ware
-call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%remove_mal%w%ware"
-goto done2
-)
-
-REM check if .NET is working properly
-
-if /i "!tstresult2!"=="FullLanguage" (
-cmd /c "%psc% ""try {[System.AppDomain]::CurrentDomain.GetAssemblies(); [System.Math]::Sqrt(144)} catch {Exit 3}""" %nul%
-if !errorlevel!==3 (
-echo Windows Powershell failed to load .NET command. Aborting...
-set fixes=%fixes% %mas%in-place_repair_upgrade
-call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%in-place_repair_upgrade"
-goto done2
-)
-)
-
-REM check antivirus and other errors
-
-echo PowerShell is not working properly. Aborting...
-
-if /i "!tstresult2!"=="FullLanguage" (
-echo:
-echo Your antivirus software might be blocking the script.
-echo:
-sc query sense | find /i "RUNNING" %nul% && (
-echo Installed Antivirus - Microsoft Defender for Endpoint
-)
-cmd /c "%psc% ""$av = Get-WmiObject -Namespace root\SecurityCenter2 -Class AntiVirusProduct; $n = @(); foreach ($i in $av) { $n += $i.displayName }; if ($n) { Write-Host ('Installed Antivirus - ' + ($n -join ', '))}"""
-)
-
-set fixes=%fixes% %mas%troubleshoot
-call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%troubleshoot"
-goto done2
-)
-
-::========================================================================================================================================
-
-:: Disable QuickEdit and launch from conhost.exe to avoid Terminal app
-
-if %winbuild% GEQ 17763 (
-set terminal=1
-) else (
-set terminal=
-)
-
-:: Check if script is running in Terminal app
-
-if defined terminal (
-set lines=0
-for /f "skip=3 tokens=* delims=" %%A in ('mode con') do if "!lines!"=="0" (
-for %%B in (%%A) do set lines=%%B
-)
-if !lines! GEQ 100 set terminal=
-)
-
-if %_unattended%==1 goto :skipQE
-for %%# in (%_args%) do (if /i "%%#"=="-qedit" goto :skipQE)
-
-:: Relaunch to disable QuickEdit in the current session and use conhost.exe instead of the Terminal app
-:: This code disables QuickEdit for the current cmd.exe session without making permanent registry changes
-:: It is included because clicking on the script window can pause execution, causing confusion that the script has stopped due to an error
-
-set resetQE=1
-reg query HKCU\Console /v QuickEdit %nul2% | find /i "0x0" %nul1% && set resetQE=0
-reg add HKCU\Console /v QuickEdit /t REG_DWORD /d 0 /f %nul1%
-
-if defined terminal (
-start conhost.exe "!_batf!" %_args% -qedit
-start reg add HKCU\Console /v QuickEdit /t REG_DWORD /d %resetQE% /f %nul1%
-exit /b
-) else if %resetQE% EQU 1 (
-start cmd.exe /c ""!_batf!" %_args% -qedit"
-start reg add HKCU\Console /v QuickEdit /t REG_DWORD /d %resetQE% /f %nul1%
-exit /b
-)
-
-:skipQE
-
-::========================================================================================================================================
-
-:: Check for updates
-
-set -=
-set old=
-set pingp=
-set upver=%masver:.=%
-
-for %%A in (
-activ%-%ated.win
-mass%-%grave.dev
-) do if not defined pingp (
-for /f "delims=[] tokens=2" %%B in ('ping -n 1 %%A') do (
-if not "%%B"=="" (set old=1& set pingp=1)
-for /f "delims=[] tokens=2" %%C in ('ping -n 1 updatecheck%upver%.%%A') do (
-if not "%%C"=="" set old=
-)
-)
-)
-
-if defined old (
-echo ________________________________________________
-%eline%
-echo Your version of MAS [%masver%] is outdated.
-echo ________________________________________________
-echo:
-if not %_unattended%==1 (
-echo [1] Get Latest MAS
-echo [0] Continue Anyway
-echo:
-call :dk_color %_Green% "Choose a menu option using your keyboard [1,0] :"
-choice /C:10 /N
-if !errorlevel!==2 rem
-if !errorlevel!==1 (start %selfgit% & start %github% & start %mas% & exit /b)
-)
-)
-
-::========================================================================================================================================
-
-setlocal DisableDelayedExpansion
-
-:: Check desktop location
-
-set desktop=
-for /f "skip=2 tokens=2*" %%a in ('reg query "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders" /v Desktop') do call set "desktop=%%b"
-if not defined desktop for /f "delims=" %%a in ('%psc% "& {write-host $([Environment]::GetFolderPath('Desktop'))}"') do call set "desktop=%%a"
-
-set "_pdesk=%desktop:'=''%"
-set "_dir=%desktop%\$OEM$\$$\Setup\Scripts"
-
-if exist "!desktop!\" (
-%eline%
-echo Unable to detect Desktop location, aborting...
-goto done2
-)
-
-setlocal EnableDelayedExpansion
-
-::========================================================================================================================================
-
-if not defined terminal mode 78, 30
-
-if exist "!desktop!\$OEM$\" (
-echo _____________________________________________________
-%eline%
-echo The $OEM$ folder already exists on your Desktop.
-echo _____________________________________________________
-goto done2
-)
-
-set HWID_Activation.cmd=Activators\HWID_Activation.cmd
-set Online_KMS_Activation.cmd=Activators\Online_KMS_Activation.cmd
-set Ohook_Activation_AIO.cmd=Activators\Ohook_Activation_AIO.cmd
-set TSforge_Activation.cmd=Activators\TSforge_Activation.cmd
-pushd "!_work!"
-
-set _nofile=
-for %%# in (
-%HWID_Activation.cmd%
-%Online_KMS_Activation.cmd%
-%Ohook_Activation_AIO.cmd%
-%TSforge_Activation.cmd%
-) do (
-if not exist "%%#" set _nofile=1
-)
-
-popd
-
-if defined _nofile (
-echo _____________________________________________________
-%eline%
-echo Some files are missing in the 'Activators' folder.
-echo _____________________________________________________
-goto done2
-)
-
-::========================================================================================================================================
-
-:Menu
-
-cls
-if not defined terminal mode 78, 30
-echo:
-echo:
-echo:
-echo:
-echo: Extract $OEM$ folder on the desktop
-echo: ____________________________________________________________
-echo:
-echo: [1] HWID [Windows]
-echo: [2] Ohook [Office]
-echo: [3] TSforge [Windows / ESU / Office]
-echo: [4] Online KMS [Windows / Office]
-echo:
-echo: [5] HWID [Windows] ^+ Ohook [Office]
-echo: [6] HWID [Windows] ^+ Ohook [Office] ^+ TSforge [ESU]
-echo: [7] TSforge [Windows / ESU] ^+ Ohook [Office]
-echo:
-call :dk_color2 %_White% " [R] " %_Green% "ReadMe"
-echo: [0] Exit
-echo: ____________________________________________________________
-echo:
-call :dk_color2 %_White% " " %_Green% "Choose a menu option using your keyboard :"
-choice /C:1234567R0 /N
-set _erl=%errorlevel%
-
-if %_erl%==9 exit /b
-if %_erl%==8 start %mas%oem-folder &goto :Menu
-if %_erl%==7 goto:tsforge_ohook
-if %_erl%==6 goto:hwid_ohook_tsforge
-if %_erl%==5 goto:hwid_ohook
-if %_erl%==4 goto:kms
-if %_erl%==3 goto:tsforge
-if %_erl%==2 goto:ohook
-if %_erl%==1 goto:hwid
-goto :Menu
-
-::========================================================================================================================================
-
-:hwid
-
-cls
-md "!desktop!\$OEM$\$$\Setup\Scripts"
-pushd "!_work!"
-copy /y /b "%HWID_Activation.cmd%" "!_dir!\HWID_Activation.cmd" %nul%
-popd
-call :export hwid_setup
-
-set _error=
-if not exist "!_dir!\HWID_Activation.cmd" set _error=1
-if not exist "!_dir!\SetupComplete.cmd" set _error=1
-if defined _error goto errorfound
-
-set oem=HWID
-goto done
-
-:hwid_setup:
-@echo off
-
-fltmc >nul || exit /b
-
-call "%~dp0HWID_Activation.cmd" /HWID
-
-cd \
-(goto) 2>nul & (if "%~dp0"=="%SystemRoot%\Setup\Scripts\" rd /s /q "%~dp0")
-:hwid_setup:
-
-::========================================================================================================================================
-
-:ohook
-
-cls
-md "!desktop!\$OEM$\$$\Setup\Scripts"
-pushd "!_work!"
-copy /y /b %Ohook_Activation_AIO.cmd% "!_dir!\Ohook_Activation_AIO.cmd" %nul%
-popd
-call :export ohook_setup
-
-set _error=
-if not exist "!_dir!\Ohook_Activation_AIO.cmd" set _error=1
-if not exist "!_dir!\SetupComplete.cmd" set _error=1
-if defined _error goto errorfound
-
-set oem=Ohook
-goto done
-
-:ohook_setup:
-@echo off
-
-fltmc >nul || exit /b
-
-call "%~dp0Ohook_Activation_AIO.cmd" /Ohook
-
-cd \
-(goto) 2>nul & (if "%~dp0"=="%SystemRoot%\Setup\Scripts\" rd /s /q "%~dp0")
-:ohook_setup:
-
-::========================================================================================================================================
-
-:tsforge
-
-cls
-md "!desktop!\$OEM$\$$\Setup\Scripts"
-pushd "!_work!"
-copy /y /b "%TSforge_Activation.cmd%" "!_dir!\TSforge_Activation.cmd" %nul%
-popd
-call :export tsforge_setup
-
-set _error=
-if not exist "!_dir!\TSforge_Activation.cmd" set _error=1
-if not exist "!_dir!\SetupComplete.cmd" set _error=1
-if defined _error goto errorfound
-
-set oem=TSforge
-goto done
-
-:tsforge_setup:
-@echo off
-
-fltmc >nul || exit /b
-
-call "%~dp0TSforge_Activation.cmd" /Z-WindowsESUOffice
-
-cd \
-(goto) 2>nul & (if "%~dp0"=="%SystemRoot%\Setup\Scripts\" rd /s /q "%~dp0")
-:tsforge_setup:
-
-::========================================================================================================================================
-
-:kms
-
-cls
-md "!desktop!\$OEM$\$$\Setup\Scripts"
-pushd "!_work!"
-copy /y /b "%Online_KMS_Activation.cmd%" "!_dir!\Online_KMS_Activation.cmd" %nul%
-popd
-call :export kms_setup
-
-set _error=
-if not exist "!_dir!\Online_KMS_Activation.cmd" set _error=1
-if not exist "!_dir!\SetupComplete.cmd" set _error=1
-if defined _error goto errorfound
-
-set oem=Online KMS
-goto done
-
-:kms_setup:
-@echo off
-
-fltmc >nul || exit /b
-
-call "%~dp0Online_KMS_Activation.cmd" /K-WindowsOffice
-
-cd \
-(goto) 2>nul & (if "%~dp0"=="%SystemRoot%\Setup\Scripts\" rd /s /q "%~dp0")
-:kms_setup:
-
-::========================================================================================================================================
-
-:hwid_ohook
-
-cls
-md "!desktop!\$OEM$\$$\Setup\Scripts"
-pushd "!_work!"
-copy /y /b "%HWID_Activation.cmd%" "!_dir!\HWID_Activation.cmd" %nul%
-copy /y /b "%Ohook_Activation_AIO.cmd%" "!_dir!\Ohook_Activation_AIO.cmd" %nul%
-popd
-call :export hwid_ohook_setup
-
-set _error=
-if not exist "!_dir!\HWID_Activation.cmd" set _error=1
-if not exist "!_dir!\Ohook_Activation_AIO.cmd" set _error=1
-if not exist "!_dir!\SetupComplete.cmd" set _error=1
-if defined _error goto errorfound
-
-set oem=HWID [Windows] + Ohook [Office]
-goto done
-
-:hwid_ohook_setup:
-@echo off
-
-fltmc >nul || exit /b
-
-setlocal
-call "%~dp0HWID_Activation.cmd" /HWID
-endlocal
-
-setlocal
-call "%~dp0Ohook_Activation_AIO.cmd" /Ohook
-endlocal
-
-cd \
-(goto) 2>nul & (if "%~dp0"=="%SystemRoot%\Setup\Scripts\" rd /s /q "%~dp0")
-:hwid_ohook_setup:
-
-::========================================================================================================================================
-
-:hwid_ohook_tsforge
-
-cls
-md "!desktop!\$OEM$\$$\Setup\Scripts"
-pushd "!_work!"
-copy /y /b "%HWID_Activation.cmd%" "!_dir!\HWID_Activation.cmd" %nul%
-copy /y /b "%Ohook_Activation_AIO.cmd%" "!_dir!\Ohook_Activation_AIO.cmd" %nul%
-copy /y /b "%TSforge_Activation.cmd%" "!_dir!\TSforge_Activation.cmd" %nul%
-popd
-call :export hwid_ohook_tsforge_setup
-
-set _error=
-if not exist "!_dir!\HWID_Activation.cmd" set _error=1
-if not exist "!_dir!\Ohook_Activation_AIO.cmd" set _error=1
-if not exist "!_dir!\TSforge_Activation.cmd" set _error=1
-if not exist "!_dir!\SetupComplete.cmd" set _error=1
-if defined _error goto errorfound
-
-set oem=HWID [Windows] + Ohook [Office] + TSforge [ESU]
-goto done
-
-:hwid_ohook_tsforge_setup:
-@echo off
-
-fltmc >nul || exit /b
-
-setlocal
-call "%~dp0HWID_Activation.cmd" /HWID
-endlocal
-
-setlocal
-call "%~dp0Ohook_Activation_AIO.cmd" /Ohook
-endlocal
-
-setlocal
-call "%~dp0TSforge_Activation.cmd" /Z-ESU
-endlocal
-
-cd \
-(goto) 2>nul & (if "%~dp0"=="%SystemRoot%\Setup\Scripts\" rd /s /q "%~dp0")
-:hwid_ohook_tsforge_setup:
-
-::========================================================================================================================================
-
-:tsforge_ohook
-
-cls
-md "!desktop!\$OEM$\$$\Setup\Scripts"
-pushd "!_work!"
-copy /y /b "%TSforge_Activation.cmd%" "!_dir!\TSforge_Activation.cmd" %nul%
-copy /y /b "%Ohook_Activation_AIO.cmd%" "!_dir!\Ohook_Activation_AIO.cmd" %nul%
-popd
-call :export tsforge_ohook_setup
-
-set _error=
-if not exist "!_dir!\TSforge_Activation.cmd" set _error=1
-if not exist "!_dir!\Ohook_Activation_AIO.cmd" set _error=1
-if not exist "!_dir!\SetupComplete.cmd" set _error=1
-if defined _error goto errorfound
-
-set oem=TSforge [Windows / ESU] + Ohook [Office]
-goto done
-
-:tsforge_ohook_setup:
-@echo off
-
-fltmc >nul || exit /b
-
-setlocal
-call "%~dp0TSforge_Activation.cmd" /Z-Windows /Z-ESU
-endlocal
-
-setlocal
-call "%~dp0Ohook_Activation_AIO.cmd" /Ohook
-endlocal
-
-cd \
-(goto) 2>nul & (if "%~dp0"=="%SystemRoot%\Setup\Scripts\" rd /s /q "%~dp0")
-:tsforge_ohook_setup:
-
-::========================================================================================================================================
-
-:errorfound
-
-%eline%
-echo The script failed to create the $OEM$ folder.
-goto :done2
-
-:done
-
-echo ______________________________________________________________
-echo:
-call :dk_color %Blue% "%oem%"
-call :dk_color %Green% "$OEM$ folder was successfully created on your Desktop."
-echo ______________________________________________________________
-
-:done2
-
-echo:
-if defined fixes (
-call :dk_color %White% "Follow ALL the ABOVE blue lines. "
-call :dk_color2 %Blue% "Press [1] to Open Support Webpage " %Gray% " Press [0] to Ignore"
-choice /C:10 /N
-if !errorlevel!==2 exit /b
-if !errorlevel!==1 (start %selfgit% & start %github% & for %%# in (%fixes%) do (start %%#))
-)
-
-if defined terminal (
-call :dk_color %_Yellow% "Press [0] key to %_exitmsg%..."
-choice /c 0 /n
-) else (
-call :dk_color %_Yellow% "Press any key to %_exitmsg%..."
-pause %nul1%
-)
-exit /b
-
-::========================================================================================================================================
-
-:: Set variables
-
-:dk_setvar
-
-set ps=%SysPath%\WindowsPowerShell\v1.0\powershell.exe
-set psc=%ps% -nop -c
-set winbuild=1
-for /f "tokens=2 delims=[]" %%G in ('ver') do for /f "tokens=2,3,4 delims=. " %%H in ("%%~G") do set "winbuild=%%J"
-
-set _slexe=sppsvc.exe& set _slser=sppsvc
-if %winbuild% LEQ 6300 (set _slexe=SLsvc.exe& set _slser=SLsvc)
-if %winbuild% LSS 7600 if exist "%SysPath%\SLsvc.exe" (set _slexe=SLsvc.exe& set _slser=SLsvc)
-if %_slexe%==SLsvc.exe set _vis=1
-
-set _NCS=1
-if %winbuild% LSS 10586 set _NCS=0
-if %winbuild% GEQ 10586 reg query "HKCU\Console" /v ForceV2 %nul2% | find /i "0x0" %nul1% && (set _NCS=0)
-
-echo "%PROCESSOR_ARCHITECTURE% %PROCESSOR_ARCHITEW6432%" | find /i "ARM64" %nul1% && (if %winbuild% LSS 21277 set ps32onArm=1)
-
-if %_NCS% EQU 1 (
-for /F %%a in ('echo prompt $E ^| cmd') do set "esc=%%a"
-set "Red="41;97m""
-set "Gray="100;97m""
-set "Green="42;97m""
-set "Blue="44;97m""
-set "White="107;91m""
-set "_Red="40;91m""
-set "_White="40;37m""
-set "_Green="40;92m""
-set "_Yellow="40;93m""
-) else (
-set "Red="Red" "white""
-set "Gray="Darkgray" "white""
-set "Green="DarkGreen" "white""
-set "Blue="Blue" "white""
-set "White="White" "Red""
-set "_Red="Black" "Red""
-set "_White="Black" "Gray""
-set "_Green="Black" "Green""
-set "_Yellow="Black" "Yellow""
-)
-
-set "nceline=echo: &echo ==== ERROR ==== &echo:"
-set "eline=echo: &call :dk_color %Red% "==== ERROR ====" &echo:"
-if %~z0 GEQ 200000 (
-set "_exitmsg=Go back"
-set "_fixmsg=Go back to Main Menu, select Troubleshoot and run Fix Licensing option."
-) else (
-set "_exitmsg=Exit"
-set "_fixmsg=In MAS folder, run Troubleshoot script and select Fix Licensing option."
-)
-exit /b
-
-::========================================================================================================================================
-
-:: Extract the text from batch script without character and file encoding issue
-
-:export
-
-%psc% "$f=[System.IO.File]::ReadAllText('!_batp!') -split \":%~1\:.*`r`n\"; [io.file]::WriteAllText('!_pdesk!\$OEM$\$$\Setup\Scripts\SetupComplete.cmd',$f[1].Trim(),[System.Text.Encoding]::ASCII);"
-exit /b
-
-::========================================================================================================================================
-
-:dk_color
-
-if %_NCS% EQU 1 (
-echo %esc%[%~1%~2%esc%[0m
-) else if exist %ps% (
-%psc% write-host -back '%1' -fore '%2' '%3'
-) else if not exist %ps% (
-echo %~3
-)
-exit /b
-
-:dk_color2
-
-if %_NCS% EQU 1 (
-echo %esc%[%~1%~2%esc%[%~3%~4%esc%[0m
-) else if exist %ps% (
-%psc% write-host -back '%1' -fore '%2' '%3' -NoNewline; write-host -back '%4' -fore '%5' '%6'
-) else if not exist %ps% (
-echo %~3 %~6
-)
-exit /b
-
-::========================================================================================================================================
-:: Leave empty line below
diff --git a/MAS/Separate-Files-Version/Troubleshoot.cmd b/MAS/Separate-Files-Version/Troubleshoot.cmd
deleted file mode 100644
index 7fcadf7..0000000
--- a/MAS/Separate-Files-Version/Troubleshoot.cmd
+++ /dev/null
@@ -1,1739 +0,0 @@
-@set masver=3.10
-@echo off
-
-
-
-::============================================================================
-::
-:: Homepage: m{}assgrave{dot}dev
-::
-::============================================================================
-
-
-
-::========================================================================================================================================
-
-:: Set environment variables, it helps if they are misconfigured in the system
-
-setlocal EnableExtensions
-setlocal DisableDelayedExpansion
-
-set "PathExt=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC"
-
-set "SysPath=%SystemRoot%\System32"
-set "Path=%SystemRoot%\System32;%SystemRoot%;%SystemRoot%\System32\Wbem;%SystemRoot%\System32\WindowsPowerShell\v1.0\"
-if exist "%SystemRoot%\Sysnative\reg.exe" (
-set "SysPath=%SystemRoot%\Sysnative"
-set "Path=%SystemRoot%\Sysnative;%SystemRoot%;%SystemRoot%\Sysnative\Wbem;%SystemRoot%\Sysnative\WindowsPowerShell\v1.0\;%Path%"
-)
-
-set "ComSpec=%SysPath%\cmd.exe"
-set "PSModulePath=%ProgramFiles%\WindowsPowerShell\Modules;%SysPath%\WindowsPowerShell\v1.0\Modules"
-
-set re1=
-set re2=
-set "_cmdf=%~f0"
-for %%# in (%*) do (
-if /i "%%#"=="re1" set re1=1
-if /i "%%#"=="re2" set re2=1
-if /i "%%#"=="-qedit" (set re1=1&set re2=1)
-)
-
-:: Re-launch the script with x64 process if it was initiated by x86 process on x64 bit Windows
-:: or with ARM64 process if it was initiated by x86/ARM32 process on ARM64 Windows
-
-if exist %SystemRoot%\Sysnative\cmd.exe if not defined re1 (
-setlocal EnableDelayedExpansion
-start %SystemRoot%\Sysnative\cmd.exe /c ""!_cmdf!" %* re1"
-exit /b
-)
-
-:: Re-launch the script with ARM32 process if it was initiated by x64 process on ARM64 Windows
-
-if exist %SystemRoot%\SysArm32\cmd.exe if %PROCESSOR_ARCHITECTURE%==AMD64 if not defined re2 (
-setlocal EnableDelayedExpansion
-start %SystemRoot%\SysArm32\cmd.exe /c ""!_cmdf!" %* re2"
-exit /b
-)
-
-::========================================================================================================================================
-
-set "blank="
-set "mas=ht%blank%tps%blank%://m%blank%ass%blank%grave.dev/"
-set "github=ht%blank%tps%blank%://github.com/m%blank%assgra%blank%vel/Micro%blank%soft-Acti%blank%vation-Scripts"
-set "selfgit=ht%blank%tps%blank%://git.acti%blank%vated.win/Micr%blank%osoft-Act%blank%ivation-Scripts"
-
-:: Check if Null service is working, it's important for the batch script
-
-sc query Null | find /i "RUNNING"
-if %errorlevel% NEQ 0 (
-echo:
-echo Null service is not running, script may crash...
-echo:
-echo:
-echo Check this webpage for help - %mas%fix_service
-echo:
-echo:
-ping 127.0.0.1 -n 20
-)
-cls
-
-:: Check LF line ending
-
-pushd "%~dp0"
->nul findstr /v "$" "%~nx0" && (
-echo:
-echo Error - Script either has LF line ending issue or an empty line at the end of the script is missing.
-echo:
-echo:
-echo Check this webpage for help - %mas%troubleshoot
-echo:
-echo:
-ping 127.0.0.1 -n 20 >nul
-popd
-exit /b
-)
-popd
-
-::========================================================================================================================================
-
-cls
-color 07
-title Troubleshoot %masver%
-
-set _args=
-set _elev=
-set _unattended=0
-
-set _args=%*
-if defined _args set _args=%_args:"=%
-if defined _args set _args=%_args:re1=%
-if defined _args set _args=%_args:re2=%
-if defined _args (
-for %%A in (%_args%) do (
-if /i "%%A"=="-el" set _elev=1
-)
-)
-
-set "nul1=1>nul"
-set "nul2=2>nul"
-set "nul6=2^>nul"
-set "nul=>nul 2>&1"
-
-call :dk_setvar
-set "line=_________________________________________________________________________________________________"
-
-::========================================================================================================================================
-
-if %winbuild% EQU 1 (
-%eline%
-echo Failed to detect Windows build number.
-echo:
-setlocal EnableDelayedExpansion
-set fixes=%fixes% %mas%troubleshoot
-call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%troubleshoot"
-goto dk_done
-)
-
-if exist "%Systemdrive%\Users\WDAGUtilityAccount" (
-sc query gcs | find /i "RUNNING" %nul% && (
-%eline%
-echo Windows Sandbox detected.
-echo The script cannot run due to missing licensing components. Aborting...
-echo:
-goto dk_done
-)
-)
-
-if %winbuild% LSS 6001 (
-%nceline%
-echo Unsupported OS version detected [%winbuild%].
-echo MAS only supports Windows Vista/7/8/8.1/10/11 and their Server equivalents.
-if %winbuild% EQU 6000 (
-echo:
-echo Windows Vista RTM is not supported because Powershell cannot be installed.
-echo Upgrade to Windows Vista SP1 or SP2.
-)
-goto dk_done
-)
-
-if %winbuild% LSS 7600 if not exist "%SysPath%\WindowsPowerShell\v1.0\Modules" (
-%nceline%
-if not exist %ps% (
-echo PowerShell is not installed in your system.
-)
-echo Install PowerShell 2.0 using the following URL.
-echo:
-echo https://www.catalog.update.microsoft.com/Search.aspx?q=KB968930
-if %_unattended%==0 start https://www.catalog.update.microsoft.com/Search.aspx?q=KB968930
-goto dk_done
-)
-
-::========================================================================================================================================
-
-:: Fix special character limitations in path name
-
-set "_work=%~dp0"
-if "%_work:~-1%"=="\" set "_work=%_work:~0,-1%"
-
-set "_batf=%~f0"
-set "_batp=%_batf:'=''%"
-
-set _PSarg="""%~f0""" -el %_args%
-set _PSarg=%_PSarg:'=''%
-
-set "_ttemp=%userprofile%\AppData\Local\Temp"
-
-setlocal EnableDelayedExpansion
-
-::========================================================================================================================================
-
-echo "!_batf!" | find /i "!_ttemp!" %nul1% && (
-if /i not "!_work!"=="!_ttemp!" (
-%eline%
-echo The script was launched from the temp folder.
-echo You are most likely running the script directly from the archive file.
-echo:
-echo Extract the archive file and launch the script from the extracted folder.
-goto dk_done
-)
-)
-
-::========================================================================================================================================
-
-:: Elevate script as admin and pass arguments and preventing loop
-
-%nul1% fltmc || (
-if not defined _elev %psc% "start cmd.exe -arg '/c \"!_PSarg!\"' -verb runas" && exit /b
-%eline%
-echo This script needs admin rights.
-echo Right click on this script and select 'Run as administrator'.
-goto dk_done
-)
-
-::========================================================================================================================================
-
-:: Check PowerShell
-
-::pstst $ExecutionContext.SessionState.LanguageMode :pstst
-
-for /f "delims=" %%a in ('%psc% "if ($PSVersionTable.PSEdition -ne 'Core') {$f=[System.IO.File]::ReadAllText('!_batp!') -split ':pstst';. ([scriptblock]::Create($f[1]))}" %nul6%') do (set tstresult=%%a)
-
-if /i not "%tstresult%"=="FullLanguage" (
-%eline%
-for /f "delims=" %%a in ('%psc% "$ExecutionContext.SessionState.LanguageMode" %nul6%') do (set tstresult2=%%a)
-echo Test 1 - %tstresult%
-echo Test 2 - !tstresult2!
-echo:
-
-REM check LanguageMode
-
-echo: !tstresult2! | findstr /i "ConstrainedLanguage RestrictedLanguage NoLanguage" %nul1% && (
-echo FullLanguage mode not found in PowerShell. Aborting...
-echo If you have applied restrictions on Powershell then undo those changes.
-set fixes=%fixes% %mas%fix_powershell
-call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%fix_powershell"
-goto dk_done
-)
-
-REM check Powershell core version
-
-cmd /c "%psc% "$PSVersionTable.PSEdition"" | find /i "Core" %nul1% && (
-echo Windows Powershell is needed for MAS but it seems to be replaced with Powershell core. Aborting...
-set fixes=%fixes% %mas%in-place_repair_upgrade
-call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%in-place_repair_upgrade"
-goto dk_done
-)
-
-REM check for Mal-ware that may cause issues with Powershell
-
-for /r "%ProgramFiles%\" %%f in (secureboot.exe) do if exist "%%f" (
-echo "%%f"
-echo Mal%blank%ware found, PowerShell is not working properly.
-set fixes=%fixes% %mas%remove_mal%w%ware
-call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%remove_mal%w%ware"
-goto dk_done
-)
-
-REM check if .NET is working properly
-
-if /i "!tstresult2!"=="FullLanguage" (
-cmd /c "%psc% ""try {[System.AppDomain]::CurrentDomain.GetAssemblies(); [System.Math]::Sqrt(144)} catch {Exit 3}""" %nul%
-if !errorlevel!==3 (
-echo Windows Powershell failed to load .NET command. Aborting...
-set fixes=%fixes% %mas%in-place_repair_upgrade
-call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%in-place_repair_upgrade"
-goto dk_done
-)
-)
-
-REM check antivirus and other errors
-
-echo PowerShell is not working properly. Aborting...
-
-if /i "!tstresult2!"=="FullLanguage" (
-echo:
-echo Your antivirus software might be blocking the script.
-echo:
-sc query sense | find /i "RUNNING" %nul% && (
-echo Installed Antivirus - Microsoft Defender for Endpoint
-)
-cmd /c "%psc% ""$av = Get-WmiObject -Namespace root\SecurityCenter2 -Class AntiVirusProduct; $n = @(); foreach ($i in $av) { $n += $i.displayName }; if ($n) { Write-Host ('Installed Antivirus - ' + ($n -join ', '))}"""
-)
-
-set fixes=%fixes% %mas%troubleshoot
-call :dk_color2 %Blue% "Check this webpage for help - " %_Yellow% " %mas%troubleshoot"
-goto dk_done
-)
-
-::========================================================================================================================================
-
-:: Disable QuickEdit and launch from conhost.exe to avoid Terminal app
-
-if %winbuild% GEQ 17763 (
-set terminal=1
-) else (
-set terminal=
-)
-
-:: Check if script is running in Terminal app
-
-if defined terminal (
-set lines=0
-for /f "skip=3 tokens=* delims=" %%A in ('mode con') do if "!lines!"=="0" (
-for %%B in (%%A) do set lines=%%B
-)
-if !lines! GEQ 100 set terminal=
-)
-
-if %_unattended%==1 goto :skipQE
-for %%# in (%_args%) do (if /i "%%#"=="-qedit" goto :skipQE)
-
-:: Relaunch to disable QuickEdit in the current session and use conhost.exe instead of the Terminal app
-:: This code disables QuickEdit for the current cmd.exe session without making permanent registry changes
-:: It is included because clicking on the script window can pause execution, causing confusion that the script has stopped due to an error
-
-set resetQE=1
-reg query HKCU\Console /v QuickEdit %nul2% | find /i "0x0" %nul1% && set resetQE=0
-reg add HKCU\Console /v QuickEdit /t REG_DWORD /d 0 /f %nul1%
-
-if defined terminal (
-start conhost.exe "!_batf!" %_args% -qedit
-start reg add HKCU\Console /v QuickEdit /t REG_DWORD /d %resetQE% /f %nul1%
-exit /b
-) else if %resetQE% EQU 1 (
-start cmd.exe /c ""!_batf!" %_args% -qedit"
-start reg add HKCU\Console /v QuickEdit /t REG_DWORD /d %resetQE% /f %nul1%
-exit /b
-)
-
-:skipQE
-
-::========================================================================================================================================
-
-:: Check for updates
-
-set -=
-set old=
-set pingp=
-set upver=%masver:.=%
-
-for %%A in (
-activ%-%ated.win
-mass%-%grave.dev
-) do if not defined pingp (
-for /f "delims=[] tokens=2" %%B in ('ping -n 1 %%A') do (
-if not "%%B"=="" (set old=1& set pingp=1)
-for /f "delims=[] tokens=2" %%C in ('ping -n 1 updatecheck%upver%.%%A') do (
-if not "%%C"=="" set old=
-)
-)
-)
-
-if defined old (
-echo ________________________________________________
-%eline%
-echo Your version of MAS [%masver%] is outdated.
-echo ________________________________________________
-echo:
-if not %_unattended%==1 (
-echo [1] Get Latest MAS
-echo [0] Continue Anyway
-echo:
-call :dk_color %_Green% "Choose a menu option using your keyboard [1,0] :"
-choice /C:10 /N
-if !errorlevel!==2 rem
-if !errorlevel!==1 (start %selfgit% & start %github% & start %mas% & exit /b)
-)
-)
-
-::========================================================================================================================================
-
-setlocal DisableDelayedExpansion
-
-:: Check desktop location
-
-set desktop=
-for /f "skip=2 tokens=2*" %%a in ('reg query "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders" /v Desktop') do call set "desktop=%%b"
-if not defined desktop for /f "delims=" %%a in ('%psc% "& {write-host $([Environment]::GetFolderPath('Desktop'))}"') do call set "desktop=%%a"
-
-if not defined desktop (
-%eline%
-echo Unable to detect Desktop location, aborting...
-goto dk_done
-)
-
-setlocal EnableDelayedExpansion
-
-::========================================================================================================================================
-
-:at_menu
-
-cls
-color 07
-title Troubleshoot %masver%
-if not defined terminal mode 77, 30
-
-echo:
-echo:
-echo:
-echo:
-echo: _______________________________________________________________
-echo:
-call :dk_color2 %_White% " [1] " %_Green% "Help"
-echo: ___________________________________________________
-echo:
-echo: [2] Dism RestoreHealth
-echo: [3] SFC Scannow
-echo:
-echo: [4] Fix WMI
-echo: [5] Fix Licensing
-echo: [6] Fix WPA Registry
-echo: ___________________________________________________
-echo:
-echo: [0] %_exitmsg%
-echo: _______________________________________________________________
-echo:
-call :dk_color2 %_White% " " %_Green% "Choose a menu option using your keyboard :"
-choice /C:1234560 /N
-set _erl=%errorlevel%
-
-if %_erl%==7 exit /b
-if %_erl%==6 start %mas%fix-wpa-registry &goto at_menu
-if %_erl%==5 goto:retokens
-if %_erl%==4 goto:fixwmi
-if %_erl%==3 goto:sfcscan
-if %_erl%==2 goto:dism_rest
-if %_erl%==1 (start %selfgit% & start %github% & start %mas%troubleshoot & goto at_menu)
-goto :at_menu
-
-::========================================================================================================================================
-
-:dism_rest
-
-cls
-if not defined terminal mode 98, 30
-title Dism /English /Online /Cleanup-Image /RestoreHealth
-
-if %winbuild% LSS 9200 (
-%eline%
-echo Unsupported OS version detected.
-echo This command only works on Windows 8/8.1/10/11 and their Server equivalents.
-goto :at_back
-)
-
-set _int=
-for %%a in (l.root-servers.net resolver1.opendns.com download.windowsupdate.com google.com) do if not defined _int (
-for /f "delims=[] tokens=2" %%# in ('ping -n 1 %%a') do (if not "%%#"=="" set _int=1)
-)
-
-echo:
-if defined _int (
-echo Checking Internet Connection [Connected]
-) else (
-call :dk_color2 %_White% " " %Red% "Checking Internet Connection [Not connected]"
-)
-
-echo %line%
-echo:
-echo DISM uses Windows Update to provide replacement files required to fix corruption.
-echo This will take 5-15 minutes or more..
-echo %line%
-echo:
-echo Notes:
-echo:
-call :dk_color2 %_White% " - " %Gray% "Make sure the internet is connected."
-call :dk_color2 %_White% " - " %Gray% "Make sure that Windows update is properly working."
-echo:
-echo %line%
-echo:
-choice /C:09 /N /M "> [9] Continue [0] Go back : "
-if %errorlevel%==1 goto at_menu
-
-cls
-if not defined terminal mode 110, 30
-
-for /f %%a in ('%psc% "(Get-Date).ToString('yyyyMMdd-HHmmssfff')"') do set _time=%%a
-
-%psc% Stop-Service TrustedInstaller -force %nul%
-
-copy /y /b "%SystemRoot%\logs\cbs\cbs.log" "%SystemRoot%\logs\cbs\backup_cbs_%_time%.log" %nul%
-copy /y /b "%SystemRoot%\logs\DISM\dism.log" "%SystemRoot%\logs\DISM\backup_dism_%_time%.log" %nul%
-del /f /q "%SystemRoot%\logs\cbs\cbs.log" %nul%
-del /f /q "%SystemRoot%\logs\DISM\dism.log" %nul%
-
-echo:
-echo Applying the command...
-echo dism /english /online /cleanup-image /restorehealth
-dism /english /online /cleanup-image /restorehealth
-
-timeout /t 5 %nul1%
-copy /y /b "%SystemRoot%\logs\cbs\cbs.log" "%SystemRoot%\logs\cbs\cbs_%_time%.log" %nul%
-copy /y /b "%SystemRoot%\logs\DISM\dism.log" "%SystemRoot%\logs\DISM\dism_%_time%.log" %nul%
-
-if not exist "!desktop!\AT_Logs\" md "!desktop!\AT_Logs\" %nul%
-call :compresslog cbs\cbs_%_time%.log AT_Logs\RHealth_CBS %nul%
-call :compresslog DISM\dism_%_time%.log AT_Logs\RHealth_DISM %nul%
-
-if not exist "!desktop!\AT_Logs\RHealth_CBS_%_time%.cab" (
-copy /y /b "%SystemRoot%\logs\cbs\cbs.log" "!desktop!\AT_Logs\RHealth_CBS_%_time%.log" %nul%
-)
-
-if not exist "!desktop!\AT_Logs\RHealth_DISM_%_time%.cab" (
-copy /y /b "%SystemRoot%\logs\DISM\dism.log" "!desktop!\AT_Logs\RHealth_DISM_%_time%.log" %nul%
-)
-
-echo:
-call :dk_color %Gray% "CBS and DISM logs are copied to the AT_Logs folder on your desktop."
-goto :at_back
-
-::========================================================================================================================================
-
-:sfcscan
-
-cls
-if not defined terminal mode 98, 30
-title sfc /scannow
-
-echo:
-echo %line%
-echo:
-echo SFC will repair missing or corrupted system files.
-echo It is recommended you run the DISM option first before this one.
-echo This will take 10-15 minutes or more..
-echo:
-echo If SFC could not fix something, then run the command again to see if it may be able
-echo to the next time. Sometimes it may take running the sfc /scannow command 3 times
-echo restarting the PC after each time to completely fix everything that it's able to.
-echo:
-echo %line%
-echo:
-choice /C:09 /N /M "> [9] Continue [0] Go back : "
-if %errorlevel%==1 goto at_menu
-
-cls
-for /f %%a in ('%psc% "(Get-Date).ToString('yyyyMMdd-HHmmssfff')"') do set _time=%%a
-
-%psc% Stop-Service TrustedInstaller -force %nul%
-
-copy /y /b "%SystemRoot%\logs\cbs\cbs.log" "%SystemRoot%\logs\cbs\backup_cbs_%_time%.log" %nul%
-del /f /q "%SystemRoot%\logs\cbs\cbs.log" %nul%
-
-echo:
-echo Applying the command...
-echo sfc /scannow
-sfc /scannow
-
-timeout /t 5 %nul1%
-copy /y /b "%SystemRoot%\logs\cbs\cbs.log" "%SystemRoot%\logs\cbs\cbs_%_time%.log" %nul%
-
-if not exist "!desktop!\AT_Logs\" md "!desktop!\AT_Logs\" %nul%
-call :compresslog cbs\cbs_%_time%.log AT_Logs\SFC_CBS %nul%
-
-if not exist "!desktop!\AT_Logs\SFC_CBS_%_time%.cab" (
-copy /y /b "%SystemRoot%\logs\cbs\cbs.log" "!desktop!\AT_Logs\SFC_CBS_%_time%.log" %nul%
-)
-
-echo:
-call :dk_color %Gray% "The CBS log was copied to the AT_Logs folder on your Desktop."
-goto :at_back
-
-::========================================================================================================================================
-
-:retokens
-
-cls
-if not defined terminal (
-mode 125, 32
-%psc% "&{$W=$Host.UI.RawUI.WindowSize;$B=$Host.UI.RawUI.BufferSize;$W.Height=31;$B.Height=200;$Host.UI.RawUI.WindowSize=$W;$Host.UI.RawUI.BufferSize=$B;}" %nul%
-)
-title Fix Licensing ^(ClipSVC ^+ SPP ^+ OSPP^)
-
-if %winbuild% EQU 6001 (
-%eline%
-echo This option is not supported on Windows Vista SP1.
-echo Upgrade to Windows Vista SP2.
-goto :at_back
-)
-
-echo:
-echo %line%
-echo:
-echo Notes:
-echo:
-echo - This option helps in troubleshooting activation issues.
-echo:
-echo - This option will:
-echo - Deactivate Windows and Office, you may need to reactivate.
-echo If Windows is activated with motherboard / OEM / Digital license
-echo then Windows will activate itself again.
-echo:
-echo - Clear ClipSVC, SPP and OSPP licenses.
-echo - Fix permissions of SPP tokens folder and registries.
-echo - Trigger the repair option for Office.
-echo:
-call :dk_color2 %_White% " - " %Blue% "Apply this option only when it is necessary."
-echo:
-echo %line%
-echo:
-choice /C:09 /N /M "> [9] Continue [0] Go back : "
-if %errorlevel%==1 goto at_menu
-
-::========================================================================================================================================
-
-:: Rebuild ClipSVC Licences
-
-cls
-:cleanlicensing
-
-echo:
-echo %line%
-echo:
-call :dk_color %Blue% "Rebuilding ClipSVC Licenses..."
-echo:
-
-if %winbuild% LSS 10240 (
-echo ClipSVC license rebuilding is supported only on Windows 10/11.
-echo Skipping...
-goto :rebuildspptok
-)
-
-%psc% "(([WMISEARCHER]'SELECT Name FROM SoftwareLicensingProduct WHERE LicenseStatus=1 AND GracePeriodRemaining=0 AND PartialProductKey IS NOT NULL AND LicenseDependsOn is NULL').Get()).Name" %nul2% | findstr /i "Windows" %nul1% && (
-echo Windows is permanently activated.
-echo Skipping...
-goto :rebuildspptok
-)
-
-set _partial=
-set _keymatch=
-for /f "tokens=2 delims==" %%# in ('%psc% "(([WMISEARCHER]'SELECT PartialProductKey FROM SoftwareLicensingProduct WHERE ApplicationID=''55c92734-d682-4d71-983e-d6ec3f16059f'' AND PartialProductKey IS NOT NULL AND LicenseDependsOn is NULL').Get()).PartialProductKey | %% {echo ('PartialProductKey='+$_)}" %nul6%') do set "_partial=%%#"
-for %%# in (8HV2C QPFCT 3V66T PKCKT WXCHW 8TYMD 6F4BT 8HVX7 KD72Y 7CFBY DRR8H P39PB DYJWX MDWWW 9HKR4 M7V2X 2YV77 WT2RQ MHBPB QPF8P 2YV66 VMJ2C DJ4F6 CKFFD YY74H J8JXD BHDCD T6R4W D32MH RRK69 3PJBP) do if /i "%_partial%"=="%%#" set _keymatch=1
-
-if not defined _keymatch (
-echo HWID activation key is not installed.
-echo Skipping...
-goto :rebuildspptok
-)
-
-%psc% "If([Activator]::CreateInstance([Type]::GetTypeFromCLSID([Guid]'{DCB00C01-570F-4A9B-8D69-199FDBA5723B}')).IsConnectedToInternet){Exit 0}Else{Exit 1}"
-if errorlevel 1 (
-echo Internet is not connected.
-echo Skipping...
-goto :rebuildspptok
-)
-
-set resfail=
-for %%# in (
-licensing.mp.microsoft.com/v7.0/licenses/content
-login.live.com/ppsecure/deviceaddcredential.srf
-purchase.mp.microsoft.com/v7.0/users/me/orders
-) do if not defined resfail (
-%psc% "try { [Net.ServicePointManager]::SecurityProtocol=[Net.SecurityProtocolType]::Tls12; irm https://%%# -Method POST } catch { if ($_.Exception.Response -eq $null) { Write-Host """"[%%#] $($_.Exception.Message)"""" -ForegroundColor Red -BackgroundColor Black; exit 3 } }"
-if !errorlevel!==3 set resfail=1
-)
-
-if defined resfail (
-echo Failed to connect to licensing servers.
-echo Skipping...
-goto :rebuildspptok
-)
-
-echo Stopping ClipSVC service...
-%psc% Stop-Service ClipSVC -force %nul%
-timeout /t 2 %nul%
-
-echo:
-echo Applying the command to clean ClipSVC Licenses...
-echo rundll32 clipc.dll,ClipCleanUpState
-
-rundll32 clipc.dll,ClipCleanUpState
-
-if %winbuild% LEQ 10240 (
-echo [Successful]
-) else (
-if exist "%ProgramData%\Microsoft\Windows\ClipSVC\tokens.dat" (
-call :dk_color %Red% "[Failed]"
-) else (
-echo [Successful]
-)
-)
-
-:: Below registry key (Volatile & Protected) gets created after the ClipSVC License cleanup command, and gets automatically deleted after
-:: system restart. It needs to be deleted to activate the system without restart.
-
-set "RegKey=HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ClipSVC\Volatile\PersistedSystemState"
-set "_ident=HKU\S-1-5-19\SOFTWARE\Microsoft\IdentityCRL"
-
-reg query "%RegKey%" %nul% && %nul% call :regownstart
-reg delete "%RegKey%" /f %nul%
-
-echo:
-echo Deleting a Volatile ^& Protected Registry Key...
-echo [%RegKey%]
-reg query "%RegKey%" %nul% && (
-call :dk_color %Red% "[Failed]"
-echo Reboot your machine using the restart option, that will delete this registry key automatically.
-) || (
-echo [Successful]
-)
-
-:: Clear HWID token related registry to fix activation incase there is any corruption
-
-echo:
-echo Deleting IdentityCRL Registry Key...
-echo [%_ident%]
-reg delete "%_ident%" /f %nul%
-reg query "%_ident%" %nul% && (
-call :dk_color %Red% "[Failed]"
-) || (
-echo [Successful]
-)
-
-%psc% Stop-Service ClipSVC -force %nul%
-
-:: Rebuild ClipSVC folder to fix permission issues
-
-echo:
-if %winbuild% GTR 10240 (
-echo Deleting folder %ProgramData%\Microsoft\Windows\ClipSVC\
-rmdir /s /q "C:\ProgramData\Microsoft\Windows\ClipSvc" %nul%
-
-if exist "%ProgramData%\Microsoft\Windows\ClipSVC\" (
-call :dk_color %Red% "[Failed]"
-) else (
-echo [Successful]
-)
-
-echo:
-echo Rebuilding the %ProgramData%\Microsoft\Windows\ClipSVC\ folder...
-%psc% Start-Service ClipSVC %nul%
-timeout /t 3 %nul%
-if not exist "%ProgramData%\Microsoft\Windows\ClipSVC\" timeout /t 5 %nul%
-if not exist "%ProgramData%\Microsoft\Windows\ClipSVC\" (
-call :dk_color %Red% "[Failed]"
-) else (
-echo [Successful]
-)
-)
-
-echo:
-echo Restarting wlidsvc ^& LicenseManager services...
-for %%# in (wlidsvc LicenseManager) do (%psc% "Start-Job { Restart-Service %%# } | Wait-Job -Timeout 20 | Out-Null")
-
-::========================================================================================================================================
-
-:: Rebuild SPP Tokens
-
-:rebuildspptok
-
-echo:
-echo %line%
-echo:
-call :dk_color %Blue% "Rebuilding SPP licensing tokens..."
-echo:
-
-echo Clearing KMS Cache...
-echo:
-call :_taskclear-cache
-
-%nul% reg query "HKLM\%SPPk%\%_wApp%" && (
-echo Removing KMS38 protection...
-%psc% "$f=[System.IO.File]::ReadAllText('!_batp!') -split ':regdel\:.*';. ([scriptblock]::Create($f[1]))"
-%nul% reg delete "HKLM\%SPPk%\%_wApp%" /f
-%nul% reg query "HKLM\%SPPk%\%_wApp%" && (
-call :dk_color %Red% "Failed to remove KMS38 protection."
-) || (
-echo Successfully removed KMS38 protection.
-echo Successfully cleared KMS Cache.
-)
-) || (
-echo Successfully cleared KMS Cache.
-)
-echo:
-
-call :scandat check
-
-if not defined token (
-call :dk_color %Red% "tokens.dat file not found."
-) else (
-echo tokens.dat file: [%token%]
-)
-
-set tokenstore=
-set badregistry=
-for /f "skip=2 tokens=2*" %%a in ('reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform" /v TokenStore %nul6%') do call set "tokenstore=%%b"
-if %winbuild% GEQ 9200 if /i not "%tokenstore%"=="%SysPath%\spp\store" if /i not "%tokenstore%"=="%SysPath%\spp\store\2.0" if /i not "%tokenstore%"=="%SysPath%\spp\store_test\2.0" (
-set badregistry=1
-echo:
-call :dk_color %Red% "Correct path not found in TokenStore Registry [%tokenstore%]"
-)
-
-:: Check sppsvc permissions and apply fixes
-
-if %winbuild% GEQ 9200 if not defined badregistry (
-echo:
-echo Checking SPP permission related issues...
-call :checkperms
-if defined permerror (
-call :dk_color %Red% "[!permerror!]"
-%psc% "$f=[System.IO.File]::ReadAllText('!_batp!') -split ':fixsppperms\:.*';. ([scriptblock]::Create($f[1]))" %nul%
-call :checkperms
-if defined permerror (
-call :dk_color %Red% "[!permerror!] [Failed To Fix]"
-) else (
-call :dk_color %Green% "[Successfully Fixed]"
-)
-) else (
-echo [No Error Found]
-)
-)
-
-echo:
-echo Stopping %_slser% service...
-%psc% Stop-Service %_slser% -force %nul%
-
-set w=
-set _sppint=
-for %%# in (SppEx%w%tComObj.exe %_slexe%) do (reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Ima%w%ge File Execu%w%tion Options\%%#" %nul% && (set _sppint=1))
-if defined _sppint (
-echo:
-echo Removing SPP IFEO registry keys...
-for %%# in (SppE%w%xtComObj.exe %_slexe%) do (reg delete "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Ima%w%ge File Execu%w%tion Options\%%#" /f %nul%)
-)
-
-if %winbuild% LSS 9200 if not defined _vis (
-REM Fix issues caused by Update KB971033 in Windows 7
-REM https://support.microsoft.com/en-us/help/4487266
-echo:
-echo Checking Update KB971033...
-%psc% "if (Get-Hotfix -Id KB971033 -ErrorAction SilentlyContinue) {Exit 3}" %nul%
-if !errorlevel!==3 (
-echo Found, uninstalling it...
-wusa /uninstall /quiet /norestart /kb:971033
-) else (
-echo [Not Found]
-)
-%psc% Stop-Service sppuinotify -force %nul%
-sc config sppuinotify start= disabled
-del /f /q %SysPath%\7B296FB0-376B-497e-B012-9C450E1B7327-*.C7483456-A289-439d-8115-601632D005A0 /ah
-)
-
-:: Delete registry keys that are not deleted by activation scripts
-
-if not defined _vis (
-echo:
-echo Cleaning some licensing-related registry keys...
-%nul% reg delete "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform" /v "ServiceSessionId" /f
-%nul% reg delete "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform" /v "LicStatusArray" /f
-%nul% reg delete "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform" /v "PolicyValuesArray" /f
-%nul% reg delete "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform" /v "actionlist" /f
-%nul% reg delete "HKLM\SOFTWARE\Microsoft\OfficeSoftwareProtectionPlatform\data" /f
-)
-
-echo:
-call :scandat delete
-call :scandat check
-
-if defined token (
-echo:
-call :dk_color %Red% "Failed to delete .dat files."
-echo:
-)
-
-if defined _vis (
-%psc% Start-Service %_slser% %nul%
-)
-
-echo:
-echo Reinstalling system licenses...
-%psc% "$sls = Get-WmiObject SoftwareLicensingService; $f=[System.IO.File]::ReadAllText('!_batp!') -split ':xrm\:.*';. ([scriptblock]::Create($f[1])); ReinstallLicenses" %nul%
-if %errorlevel% NEQ 0 %psc% "$sls = Get-WmiObject SoftwareLicensingService; $f=[System.IO.File]::ReadAllText('!_batp!') -split ':xrm\:.*';. ([scriptblock]::Create($f[1])); ReinstallLicenses" %nul%
-if %errorlevel% EQU 0 (
-echo [Successful]
-) else (
-call :dk_color %Red% "[Failed]"
-)
-
-call :scandat check
-
-echo:
-if not defined token (
-call :dk_color %Red% "Failed to rebuild tokens.dat file."
-) else (
-echo tokens.dat file was rebuilt successfully.
-)
-
-if %winbuild% LSS 9200 if not defined _vis (
-sc config sppuinotify start= demand
-)
-
-::========================================================================================================================================
-
-:: Rebuild OSPP Tokens
-
-echo:
-echo %line%
-echo:
-call :dk_color %Blue% "Rebuilding OSPP licensing tokens..."
-echo:
-
-sc qc osppsvc %nul% || (
-echo OSPP-based Office is not installed.
-echo Skipping rebuilding OSPP tokens...
-goto :repairoffice
-)
-
-call :scandatospp check
-
-if not defined token (
-call :dk_color %Red% "tokens.dat file not found."
-) else (
-echo tokens.dat file: [%token%]
-)
-
-echo:
-echo Stopping osppsvc service...
-%psc% Stop-Service osppsvc -force %nul%
-
-echo:
-call :scandatospp delete
-call :scandatospp check
-
-if defined token (
-echo:
-call :dk_color %Red% "Failed to delete .dat files."
-echo:
-)
-
-echo:
-echo Starting osppsvc service to generate tokens.dat...
-%psc% Start-Service osppsvc %nul%
-call :scandatospp check
-if not defined token (
-%psc% Stop-Service osppsvc -force %nul%
-%psc% Start-Service osppsvc %nul%
-timeout /t 3 %nul%
-)
-
-call :scandatospp check
-
-echo:
-if not defined token (
-call :dk_color %Red% "Failed to rebuild tokens.dat file."
-) else (
-echo tokens.dat file was rebuilt successfully.
-)
-
-::========================================================================================================================================
-
-:repairoffice
-
-echo:
-echo %line%
-echo:
-call :dk_color %Blue% "Repairing Office licenses..."
-echo:
-
-for %%# in (68 86) do (
-for %%A in (msi14 msi15 msi16 c2r14 c2r15 c2r16) do (set %%A_%%#=&set %%Arepair%%#=)
-)
-
-set _68=HKLM\SOFTWARE\Microsoft\Office
-set _86=HKLM\SOFTWARE\Wow6432Node\Microsoft\Office
-
-reg query %_68%\14.0\CVH /f Click2run /k %nul% && (set "c2r14_68=Office 14.0 C2R x86/x64" & set "c2r14repair68=")
-reg query %_86%\14.0\CVH /f Click2run /k %nul% && (set "c2r14_86=Office 14.0 C2R x86" & set "c2r14repair86=")
-
-for /f "skip=2 tokens=2*" %%a in ('"reg query %_86%\14.0\Common\InstallRoot /v Path" %nul6%') do if exist "%%b\*Picker.dll" (set "msi14_86=Office 14.0 MSI x86" & call :getrepairsetup msi14repair86 14)
-for /f "skip=2 tokens=2*" %%a in ('"reg query %_68%\14.0\Common\InstallRoot /v Path" %nul6%') do if exist "%%b\*Picker.dll" (set "msi14_68=Office 14.0 MSI x86/x64" & call :getrepairsetup msi14repair68 14)
-for /f "skip=2 tokens=2*" %%a in ('"reg query %_86%\15.0\Common\InstallRoot /v Path" %nul6%') do if exist "%%b\*Picker.dll" (set "msi15_86=Office 15.0 MSI x86" & call :getrepairsetup msi15repair86 15)
-for /f "skip=2 tokens=2*" %%a in ('"reg query %_68%\15.0\Common\InstallRoot /v Path" %nul6%') do if exist "%%b\*Picker.dll" (set "msi15_68=Office 15.0 MSI x86/x64" & call :getrepairsetup msi15repair68 15)
-for /f "skip=2 tokens=2*" %%a in ('"reg query %_86%\16.0\Common\InstallRoot /v Path" %nul6%') do if exist "%%b\*Picker.dll" (set "msi16_86=Office 16.0 MSI x86" & call :getrepairsetup msi16repair86 16)
-for /f "skip=2 tokens=2*" %%a in ('"reg query %_68%\16.0\Common\InstallRoot /v Path" %nul6%') do if exist "%%b\*Picker.dll" (set "msi16_68=Office 16.0 MSI x86/x64" & call :getrepairsetup msi16repair68 16)
-
-for /f "skip=2 tokens=2*" %%a in ('"reg query %_86%\15.0\ClickToRun /v InstallPath" %nul6%') do if exist "%%b\root\Licenses\ProPlus*.xrm-ms" (set "c2r15_86=Office 15.0 C2R x86" & call :getc2rrepair c2r15repair86 integratedoffice.exe)
-for /f "skip=2 tokens=2*" %%a in ('"reg query %_68%\15.0\ClickToRun /v InstallPath" %nul6%') do if exist "%%b\root\Licenses\ProPlus*.xrm-ms" (set "c2r15_68=Office 15.0 C2R x86/x64" & call :getc2rrepair c2r15repair68 integratedoffice.exe)
-for /f "skip=2 tokens=2*" %%a in ('"reg query %_86%\ClickToRun /v InstallPath" %nul6%') do if exist "%%b\root\Licenses16\ProPlus*.xrm-ms" (set "c2r16_86=Office 16.0 C2R x86" & call :getc2r16repair c2r16repair86 OfficeClickToRun.exe)
-for /f "skip=2 tokens=2*" %%a in ('"reg query %_68%\ClickToRun /v InstallPath" %nul6%') do if exist "%%b\root\Licenses16\ProPlus*.xrm-ms" (set "c2r16_68=Office 16.0 C2R x86/x64" & call :getc2r16repair c2r16repair68 OfficeClickToRun.exe)
-
-set uwp16=
-if %winbuild% GEQ 10240 (
-%psc% "Get-AppxPackage -name "Microsoft.Office.Desktop"" | find /i "Office" %nul1% && set uwp16=Office 16.0 UWP
-)
-
-set /a counter=0
-echo Checking installed Office versions...
-echo:
-
-for %%# in (
-"%msi14_68%"
-"%msi14_86%"
-"%msi15_68%"
-"%msi15_86%"
-"%msi16_68%"
-"%msi16_86%"
-"%c2r14_68%"
-"%c2r14_86%"
-"%c2r15_68%"
-"%c2r15_86%"
-"%c2r16_68%"
-"%c2r16_86%"
-"%uwp16%"
-) do (
-if not "%%#"=="""" (
-set insoff=%%#
-set insoff=!insoff:"=!
-echo [!insoff!]
-set /a counter+=1
-)
-)
-
-if %counter% GTR 1 (
-%eline%
-echo Multiple Office versions found.
-echo It is recommended to only install one version of Office.
-echo ________________________________________________________________
-echo:
-)
-
-echo:
-if %counter% EQU 0 (
-echo Office ^(2010 and later^) is not installed.
-goto :repairend
-) else if not defined c2r16_68 if not defined c2r16_86 (
-call :dk_color %_Yellow% "A new window will appear, in that window you need to select [Quick Repair] option."
-if defined terminal (
-call :dk_color %_Yellow% "Press [0] to continue..."
-choice /c 0 /n
-) else (
-call :dk_color %_Yellow% "Press any key to continue..."
-pause %nul1%
-)
-)
-
-if defined uwp16 (
-echo:
-echo Skipping repair for Office 16.0 UWP...
-echo:
-)
-
-set c2r14=
-if defined c2r14_68 set c2r14=1
-if defined c2r14_86 set c2r14=1
-
-if defined c2r14 (
-echo:
-echo Skipping repair for Office 14.0 C2R...
-echo:
-)
-
-if defined msi14_68 if exist "%msi14repair68%" echo Running - "%msi14repair68%" & "%msi14repair68%"
-if defined msi14_86 if exist "%msi14repair86%" echo Running - "%msi14repair86%" & "%msi14repair86%"
-if defined msi15_68 if exist "%msi15repair68%" echo Running - "%msi15repair68%" & "%msi15repair68%"
-if defined msi15_86 if exist "%msi15repair86%" echo Running - "%msi15repair86%" & "%msi15repair86%"
-if defined msi16_68 if exist "%msi16repair68%" echo Running - "%msi16repair68%" & "%msi16repair68%"
-if defined msi16_86 if exist "%msi16repair86%" echo Running - "%msi16repair86%" & "%msi16repair86%"
-if defined c2r15_68 if exist "%c2r15repair68%" echo Running - "%c2r15repair68%" REPAIRUI RERUNMODE & "%c2r15repair68%" REPAIRUI RERUNMODE
-if defined c2r15_86 if exist "%c2r15repair86%" echo Running - "%c2r15repair86%" REPAIRUI RERUNMODE & "%c2r15repair86%" REPAIRUI RERUNMODE
-if defined c2r16_68 if exist "%c2r16repair68%" echo Running - "%c2r16repair68%" Scenario=Repair RepairType=QuickRepair & "%c2r16repair68%" Scenario=Repair RepairType=QuickRepair
-if defined c2r16_86 if exist "%c2r16repair86%" echo Running - "%c2r16repair86%" Scenario=Repair RepairType=QuickRepair & "%c2r16repair86%" Scenario=Repair RepairType=QuickRepair
-
-:repairend
-
-echo:
-echo %line%
-echo:
-echo:
-call :dk_color %Green% "Finished"
-goto :at_back
-
-:getc2rrepair
-
-for %%# in (X86 X64) do (
-if exist "%systemdrive%\Program Files\Microsoft Office 15\Client%%#\%2" (
-set "%1=%systemdrive%\Program Files\Microsoft Office 15\Client%%#\%2"
-)
-)
-exit /b
-
-:getc2r16repair
-
-for %%# in (%_68% %_86%) do (
-for /f "skip=2 tokens=2*" %%a in ('"reg query %%#\ClickToRun\Configuration /v ClientFolder" %nul6%') do if exist "%%b\%2" (set "%1=%%b\%2")
-)
-exit /b
-
-:getrepairsetup
-
-set "_common86=%systemdrive%\Program Files (x86)\Common Files\Microsoft Shared\OFFICE%2\Office Setup Controller\setup.exe"
-set "_common68=%systemdrive%\Program Files\Common Files\Microsoft Shared\OFFICE%2\Office Setup Controller\setup.exe"
-
-if exist "%_common86%" set "%1=%_common86%"
-if exist "%_common68%" set "%1=%_common68%"
-exit /b
-
-::========================================================================================================================================
-
-:fixwmi
-
-cls
-if not defined terminal mode 98, 34
-title Fix WMI
-
-:: https://techcommunity.microsoft.com/t5/ask-the-performance-team/wmi-repository-corruption-or-not/ba-p/375484
-
-if exist "%SystemRoot%\Servicing\Packages\Microsoft-Windows-Server*Edition~*.mum" (
-%eline%
-echo Rebuilding WMI is not recommended on Windows Server, aborting...
-goto :at_back
-)
-
-echo:
-echo Checking WMI
-call :checkwmi
-
-:: Apply basic fix first and check
-
-if defined error (
-%psc% Stop-Service Winmgmt -force %nul%
-winmgmt /salvagerepository %nul%
-call :checkwmi
-)
-
-if not defined error (
-echo [Working]
-echo No need to apply this option, aborting...
-goto :at_back
-)
-
-call :dk_color %Red% "[Not Responding]"
-
-set _corrupt=
-sc start Winmgmt %nul%
-if %errorlevel% EQU 1060 set _corrupt=1
-sc query Winmgmt %nul% || set _corrupt=1
-for %%G in (DependOnService Description DisplayName ErrorControl ImagePath ObjectName Start Type) do if not defined _corrupt (reg query HKLM\SYSTEM\CurrentControlSet\Services\Winmgmt /v %%G %nul% || set _corrupt=1)
-
-echo:
-if defined _corrupt (
-%eline%
-echo Winmgmt service is corrupted, aborting...
-goto :at_back
-)
-
-echo Disabling Winmgmt service
-sc config Winmgmt start= disabled %nul%
-if %errorlevel% EQU 0 (
-echo [Successful]
-) else (
-call :dk_color %Red% "[Failed] Aborting..."
-sc config Winmgmt start= auto %nul%
-goto :at_back
-)
-
-echo:
-echo Stopping Winmgmt service
-%psc% Stop-Service Winmgmt -force %nul%
-%psc% Stop-Service Winmgmt -force %nul%
-%psc% Stop-Service Winmgmt -force %nul%
-sc query Winmgmt | find /i "STOPPED" %nul% && (
-echo [Successful]
-) || (
-call :dk_color %Red% "[Failed]"
-call :dk_color %Blue% "Its recommended to select [Restart] option and then apply Fix WMI option again."
-echo %line%
-echo:
-choice /C:21 /N /M "> [1] Restart [2] Revert Back Changes :"
-if !errorlevel!==1 (sc config Winmgmt start= auto %nul%&goto :at_back)
-echo:
-echo Restarting...
-shutdown -t 5 -r
-exit
-)
-
-echo:
-echo Deleting WMI repository
-rmdir /s /q "%SysPath%\wbem\repository\" %nul%
-if exist "%SysPath%\wbem\repository\" (
-call :dk_color %Red% "[Failed]"
-) else (
-echo [Successful]
-)
-
-echo:
-echo Enabling Winmgmt service
-sc config Winmgmt start= auto %nul%
-if %errorlevel% EQU 0 (
-echo [Successful]
-) else (
-call :dk_color %Red% "[Failed]"
-)
-
-call :checkwmi
-if not defined error (
-echo:
-echo Checking WMI
-call :dk_color %Green% "[Working]"
-goto :at_back
-)
-
-echo:
-echo Registering .dll's and Compiling .mof's, .mfl's
-call :registerobj %nul%
-
-echo:
-echo Checking WMI
-call :checkwmi
-if defined error (
-call :dk_color %Red% "[Not Responding]"
-echo:
-echo Run [Dism RestoreHealth] and [SFC Scannow] options and make sure there are no errors.
-) else (
-call :dk_color %Green% "[Working]"
-)
-
-goto :at_back
-
-:registerobj
-
-:: https://eskonr.com/2012/01/how-to-fix-wmi-issues-automatically/
-
-%psc% Stop-Service Winmgmt -force %nul%
-cd /d %SysPath%\wbem\
-regsvr32 /s %SysPath%\scecli.dll
-regsvr32 /s %SysPath%\userenv.dll
-mofcomp cimwin32.mof
-mofcomp cimwin32.mfl
-mofcomp rsop.mof
-mofcomp rsop.mfl
-for /f %%s in ('dir /b /s *.dll') do regsvr32 /s %%s
-for /f %%s in ('dir /b *.mof') do mofcomp %%s
-for /f %%s in ('dir /b *.mfl') do mofcomp %%s
-
-winmgmt /salvagerepository
-winmgmt /resetrepository
-exit /b
-
-:checkwmi
-
-:: https://learn.microsoft.com/en-us/windows/win32/wmisdk/wmi-error-constants
-
-set error=
-%psc% "Get-WmiObject -Class Win32_ComputerSystem | Select-Object -Property CreationClassName" %nul2% | find /i "computersystem" %nul1%
-if %errorlevel% NEQ 0 (set error=1& exit /b)
-winmgmt /verifyrepository %nul%
-if %errorlevel% NEQ 0 (set error=1& exit /b)
-
-%psc% "try { $null=([WMISEARCHER]'SELECT * FROM SoftwareLicensingService').Get().Version; exit 0 } catch { exit $_.Exception.InnerException.HResult }" %nul%
-cmd /c exit /b %errorlevel%
-echo "0x%=ExitCode%" | findstr /i "0x800410 0x800440 0x80131501" %nul1%
-if %errorlevel% EQU 0 set error=1
-exit /b
-
-::========================================================================================================================================
-
-:at_back
-
-echo:
-echo %line%
-echo:
-if defined terminal (
-call :dk_color %_Yellow% "Press [0] key to %_exitmsg%..."
-choice /c 0 /n
-) else (
-call :dk_color %_Yellow% "Press any key to %_exitmsg%..."
-pause %nul1%
-)
-goto :at_menu
-
-::========================================================================================================================================
-
-:compresslog
-
-:: https://stackoverflow.com/a/46268232
-
-set "ddf="%SystemRoot%\Temp\%Random%%Random%%Random%%Random%""
-%nul% del /q /f %ddf%
-echo/.New Cabinet>%ddf%
-echo/.set Cabinet=ON>>%ddf%
-echo/.set CabinetFileCountThreshold=0;>>%ddf%
-echo/.set Compress=ON>>%ddf%
-echo/.set CompressionType=LZX>>%ddf%
-echo/.set CompressionLevel=7;>>%ddf%
-echo/.set CompressionMemory=21;>>%ddf%
-echo/.set FolderFileCountThreshold=0;>>%ddf%
-echo/.set FolderSizeThreshold=0;>>%ddf%
-echo/.set GenerateInf=OFF>>%ddf%
-echo/.set InfFileName=nul>>%ddf%
-echo/.set MaxCabinetSize=0;>>%ddf%
-echo/.set MaxDiskFileCount=0;>>%ddf%
-echo/.set MaxDiskSize=0;>>%ddf%
-echo/.set MaxErrors=1;>>%ddf%
-echo/.set RptFileName=nul>>%ddf%
-echo/.set UniqueFiles=ON>>%ddf%
-for /f "tokens=* delims=" %%D in ('dir /a:-D/b/s "%SystemRoot%\logs\%1"') do (
- echo/"%%~fD" /inf=no;>>%ddf%
-)
-makecab /F %ddf% /D DiskDirectory1="" /D CabinetNameTemplate="!desktop!\%2_%_time%.cab"
-del /q /f %ddf%
-exit /b
-
-::========================================================================================================================================
-
-:checkperms
-
-:: This code checks if SPP has permission access to tokens folder and required registry keys. Incorrect permissions are often set by gaming spoofers.
-
-set permerror=
-if not exist "%tokenstore%\" set "permerror=Error Found In Token Folder"
-
-if defined ps32onArm exit /b
-
-for %%# in (
-"%tokenstore%+FullControl"
-"HKLM:\SYSTEM\WPA+QueryValues, EnumerateSubKeys, WriteKey"
-"HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform+SetValue"
-) do for /f "tokens=1,2 delims=+" %%A in (%%#) do if not defined permerror (
-%psc% "$acl = (Get-Acl '%%A' | fl | Out-String); if (-not ($acl -match 'NT SERVICE\\sppsvc Allow %%B') -or ($acl -match 'NT SERVICE\\sppsvc Deny')) {Exit 2}" %nul%
-if !errorlevel!==2 (
-if "%%A"=="%tokenstore%" (
-set "permerror=Error Found In Token Folder"
-) else (
-set "permerror=Error Found In SPP Registries"
-)
-)
-)
-
-REM https://learn.microsoft.com/en-us/office/troubleshoot/activation/license-issue-when-start-office-application
-
-if not defined permerror (
-reg query "HKU\S-1-5-20\Software\Microsoft\Windows NT\CurrentVersion" %nul% && (
-set "pol=HKU\S-1-5-20\Software\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform\Policies"
-reg query "!pol!" %nul% || reg add "!pol!" %nul%
-%psc% "$netServ = (New-Object Security.Principal.SecurityIdentifier('S-1-5-20')).Translate([Security.Principal.NTAccount]).Value; $aclString = Get-Acl 'Registry::!pol!' | Format-List | Out-String; if (-not ($aclString.Contains($netServ + ' Allow FullControl') -or $aclString.Contains('NT SERVICE\sppsvc Allow FullControl')) -or ($aclString.Contains('Deny'))) {Exit 3}" %nul%
-if !errorlevel!==3 set "permerror=Error Found In S-1-5-20 SPP"
-)
-)
-exit /b
-
-::========================================================================================================================================
-
-:: Clean existing K-M-S cache from the registry
-
-:_taskclear-cache
-
-set w=
-for %%# in (SppE%w%xtComObj.exe sppsvc.exe SLsvc.exe) do (
-reg delete "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Ima%w%ge File Execu%w%tion Options\%%#" /f %nul%
-)
-
-set "OPPk=SOFTWARE\Microsoft\OfficeSoftwareProtectionPlatform"
-
-if %winbuild% LSS 7600 (
-reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SL" %nul% && (
-set "SPPk=SOFTWARE\Microsoft\Windows NT\CurrentVersion\SL"
-)
-)
-if not defined SPPk (
-set "SPPk=SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform"
-)
-
-set "slp=SoftwareLicensingProduct"
-set "ospp=OfficeSoftwareProtectionProduct"
-
-set "_wApp=55c92734-d682-4d71-983e-d6ec3f16059f"
-set "_oApp=0ff1ce15-a989-479d-af46-f275c6370663"
-set "_oA14=59a52881-a989-479d-af46-f275c6370663"
-
-%nul% reg delete "HKLM\%SPPk%" /f /v KeyManagementServiceName
-%nul% reg delete "HKLM\%SPPk%" /f /v KeyManagementServiceName /reg:32
-%nul% reg delete "HKLM\%SPPk%" /f /v KeyManagementServicePort
-%nul% reg delete "HKLM\%SPPk%" /f /v KeyManagementServicePort /reg:32
-%nul% reg delete "HKLM\%SPPk%" /f /v DisableDnsPublishing
-%nul% reg delete "HKLM\%SPPk%" /f /v DisableKeyManagementServiceHostCaching
-%nul% reg delete "HKLM\%SPPk%\%_wApp%" /f
-if %winbuild% GEQ 9200 (
-%nul% reg delete "HKLM\%SPPk%\%_oApp%" /f
-%nul% reg delete "HKLM\%SPPk%\%_oApp%" /f /reg:32
-)
-if %winbuild% GEQ 9600 (
-%nul% reg delete "HKU\S-1-5-20\%SPPk%\%_wApp%" /f
-%nul% reg delete "HKU\S-1-5-20\%SPPk%\%_oApp%" /f
-)
-%nul% reg delete "HKLM\%OPPk%" /f /v KeyManagementServiceName
-%nul% reg delete "HKLM\%OPPk%" /f /v KeyManagementServicePort
-%nul% reg delete "HKLM\%OPPk%" /f /v DisableDnsPublishing
-%nul% reg delete "HKLM\%OPPk%" /f /v DisableKeyManagementServiceHostCaching
-%nul% reg delete "HKLM\%OPPk%\%_oA14%" /f
-%nul% reg delete "HKLM\%OPPk%\%_oApp%" /f
-
-exit /b
-
-::========================================================================================================================================
-
-:: Fix SPP related registry and folder permissions
-
-:fixsppperms:
-# Fix perms for Token Folder
-
-if ($env:permerror -eq 'Error Found In Token Folder') {
- New-Item -Path $env:tokenstore -ItemType Directory -Force
- $sddl = 'O:BAG:BAD:PAI(A;OICI;FA;;;SY)(A;OICI;FA;;;BA)(A;OICIIO;GR;;;BU)(A;;FR;;;BU)(A;OICI;FA;;;S-1-5-80-123231216-2592883651-3715271367-3753151631-4175906628)'
- $AclObject = New-Object System.Security.AccessControl.DirectorySecurity
- $AclObject.SetSecurityDescriptorSddlForm($sddl)
- Set-Acl -Path $env:tokenstore -AclObject $AclObject
- exit
-}
-
-# Fix perms for SPP registries
-
-if ($env:permerror -eq 'Error Found In SPP Registries') {
- $acl = Get-Acl 'HKLM:\SYSTEM\WPA'
- $rule = New-Object System.Security.AccessControl.RegistryAccessRule ('NT Service\sppsvc', 'QueryValues, EnumerateSubKeys, WriteKey', 'ContainerInherit, ObjectInherit', 'None', 'Allow')
- $acl.ResetAccessRule($rule)
- $acl.SetAccessRule($rule)
- Set-Acl -Path 'HKLM:\SYSTEM\WPA' -AclObject $acl
-
- $acl = Get-Acl 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform'
- $rule = New-Object System.Security.AccessControl.RegistryAccessRule ('NT Service\sppsvc', 'SetValue', 'ContainerInherit, ObjectInherit', 'None', 'Allow')
- $acl.ResetAccessRule($rule)
- $acl.SetAccessRule($rule)
- Set-Acl -Path 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform' -AclObject $acl
- exit
-}
-
-# Fix perms for SPP in HKU\S-1-5-20
-# https://learn.microsoft.com/en-us/office/troubleshoot/activation/license-issue-when-start-office-application
-
-if ($env:permerror -ne 'Error Found In S-1-5-20 SPP') {
- exit
-}
-if (-not (Test-Path 'Registry::HKU\S-1-5-20\Software\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform')) {
- exit
-}
-
-# https://stackoverflow.com/a/35843420
-
-function Take-Permissions {
- param($rootKey, $key, [System.Security.Principal.SecurityIdentifier]$sid = 'S-1-5-32-545', $recurse = $true)
-
- switch -regex ($rootKey) {
- 'HKCU|HKEY_CURRENT_USER' { $rootKey = 'CurrentUser' }
- 'HKLM|HKEY_LOCAL_MACHINE' { $rootKey = 'LocalMachine' }
- 'HKCR|HKEY_CLASSES_ROOT' { $rootKey = 'ClassesRoot' }
- 'HKCC|HKEY_CURRENT_CONFIG' { $rootKey = 'CurrentConfig' }
- 'HKU|HKEY_USERS' { $rootKey = 'Users' }
- }
-
- ### Step 1 - escalate current process's privilege
- # get SeTakeOwnership, SeBackup and SeRestore privileges before executes next lines, script needs Admin privilege
- $AssemblyBuilder = [AppDomain]::CurrentDomain.DefineDynamicAssembly(4, 1)
- $ModuleBuilder = $AssemblyBuilder.DefineDynamicModule(2, $False)
- $TypeBuilder = $ModuleBuilder.DefineType(0)
- $TypeBuilder.DefinePInvokeMethod('RtlAdjustPrivilege', 'ntdll.dll', 'Public, Static', 1, [int], @([int], [bool], [bool], [bool].MakeByRefType()), 1, 3) | Out-Null
- 9, 17, 18 | ForEach-Object { $TypeBuilder.CreateType()::RtlAdjustPrivilege($_, $true, $false, [ref]$false) | Out-Null }
-
- function Take-KeyPermissions {
- param($rootKey, $key, $sid, $recurse, $recurseLevel = 0)
-
- ### Step 2 - get ownerships of key - it works only for current key
- $regKey = [Microsoft.Win32.Registry]::$rootKey.OpenSubKey($key, 'ReadWriteSubTree', 'TakeOwnership')
- $acl = New-Object System.Security.AccessControl.RegistrySecurity
- $acl.SetOwner($sid)
- $regKey.SetAccessControl($acl)
-
- ### Step 3 - enable inheritance of permissions (not ownership) for current key from parent
- $acl.SetAccessRuleProtection($false, $false)
- $regKey.SetAccessControl($acl)
-
- ### Step 4 - only for top-level key, change permissions for current key and propagate it for subkeys
- # to enable propagations for subkeys, it needs to execute Steps 2-3 for each subkey (Step 5)
- if ($recurseLevel -eq 0) {
- $regKey = $regKey.OpenSubKey('', 'ReadWriteSubTree', 'ChangePermissions')
- $rule = New-Object System.Security.AccessControl.RegistryAccessRule($sid, 'FullControl', 'ContainerInherit', 'None', 'Allow')
- $acl.ResetAccessRule($rule)
- $regKey.SetAccessControl($acl)
- }
-
- ### Step 5 - recursively repeat steps 2-5 for subkeys
- if ($recurse) {
- foreach ($subKey in $regKey.OpenSubKey('').GetSubKeyNames()) {
- Take-KeyPermissions $rootKey ($key + '\' + $subKey) $sid $recurse ($recurseLevel + 1)
- }
- }
- }
-
- Take-KeyPermissions $rootKey $key $sid $recurse
-}
-
-Take-Permissions "Users" "S-1-5-20\Software\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform" "S-1-5-20"
-:fixsppperms:
-
-::========================================================================================================================================
-
-:: Install License files using Powershell/WMI instead of slmgr.vbs
-
-:xrm:
-function InstallLicenseFile($Lsc) {
- try {
- $null = $sls.InstallLicense([IO.File]::ReadAllText($Lsc))
- } catch {
- $host.SetShouldExit($_.Exception.HResult)
- }
-}
-function InstallLicenseArr($Str) {
- $a = $Str -split ';'
- ForEach ($x in $a) {InstallLicenseFile "$x"}
-}
-function InstallLicenseDir($Loc) {
- Get-ChildItem $Loc -Recurse -Filter *.xrm-ms | ForEach-Object {InstallLicenseFile $_.FullName}
-}
-function ReinstallLicenses() {
- $Paths = @("$env:SysPath\oem", "$env:SysPath\licensing", "$env:SysPath\spp\tokens")
- foreach ($Path in $Paths) {
- if (Test-Path $Path) { InstallLicenseDir "$Path" }
- }
-}
-:xrm:
-
-::========================================================================================================================================
-
-:scandat
-
-set token=
-for %%# in (
-%SysPath%\spp\store_test\2.0\
-%SysPath%\spp\store\
-%SysPath%\spp\store\2.0\
-%Systemdrive%\Windows\ServiceProfiles\NetworkService\AppData\Roaming\Microsoft\SoftwareProtectionPlatform\
-%Systemdrive%\Windows\ServiceProfiles\NetworkService\AppData\Roaming\Microsoft\SoftwareLicensing\
-) do (
-
-if %1==check (
-if exist %%#tokens.dat set token=%%#tokens.dat
-)
-
-if %1==delete (
-if exist %%# (
-%nul% dir /a-d /s "%%#*.dat" && (
-attrib -r -s -h "%%#*.dat" /S
-del /S /F /Q "%%#*.dat"
-)
-)
-)
-)
-exit /b
-
-:scandatospp
-
-set token=
-for %%# in (
-%ProgramData%\Microsoft\OfficeSoftwareProtectionPlatform\
-) do (
-
-if %1==check (
-if exist %%#tokens.dat set token=%%#tokens.dat
-)
-
-if %1==delete (
-if exist %%# (
-%nul% dir /a-d /s "%%#*.dat" && (
-attrib -r -s -h "%%#*.dat" /S
-del /S /F /Q "%%#*.dat"
-)
-)
-)
-)
-exit /b
-
-::========================================================================================================================================
-
-:regownstart
-
-%psc% "$f=[System.IO.File]::ReadAllText('!_batp!') -split ':regown\:.*';. ([scriptblock]::Create($f[1]));"
-exit /b
-
-:: Below code takes ownership of a volatile registry key and deletes it
-:: HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ClipSVC\Volatile\PersistedSystemState
-
-:regown:
-$AssemblyBuilder = [AppDomain]::CurrentDomain.DefineDynamicAssembly(4, 1)
-$ModuleBuilder = $AssemblyBuilder.DefineDynamicModule(2, $False)
-$TypeBuilder = $ModuleBuilder.DefineType(0)
-
-$TypeBuilder.DefinePInvokeMethod('RtlAdjustPrivilege', 'ntdll.dll', 'Public, Static', 1, [int], @([int], [bool], [bool], [bool].MakeByRefType()), 1, 3) | Out-Null
-$TypeBuilder.CreateType()::RtlAdjustPrivilege(9, $true, $false, [ref]$false) | Out-Null
-
-$SID = New-Object System.Security.Principal.SecurityIdentifier('S-1-5-32-544')
-$IDN = ($SID.Translate([System.Security.Principal.NTAccount])).Value
-$Admin = New-Object System.Security.Principal.NTAccount($IDN)
-
-$path = 'SOFTWARE\Microsoft\Windows NT\CurrentVersion\ClipSVC\Volatile\PersistedSystemState'
-$key = [Microsoft.Win32.RegistryKey]::OpenBaseKey('LocalMachine', 'Registry64').OpenSubKey($path, 'ReadWriteSubTree', 'takeownership')
-
-$acl = $key.GetAccessControl()
-$acl.SetOwner($Admin)
-$key.SetAccessControl($acl)
-
-$rule = New-Object System.Security.AccessControl.RegistryAccessRule($Admin,"FullControl","Allow")
-$acl.SetAccessRule($rule)
-$key.SetAccessControl($acl)
-:regown:
-
-::========================================================================================================================================
-
-:: This code runs to undo below registry key KMS38 protection
-:: HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform\55c92734-d682-4d71-983e-d6ec3f16059f
-
-:: This option is not used in KMS38 anymore, it's here only to remove previous versions protection.
-
-:regdel:
-param (
- [switch]$protect
-)
-
-$SID = New-Object System.Security.Principal.SecurityIdentifier('S-1-5-32-544')
-$Admin = ($SID.Translate([System.Security.Principal.NTAccount])).Value
-
-if($protect) {
-$ruleArgs = @("$Admin", "Delete, SetValue", "ContainerInherit", "None", "Deny")
-} else {
-$ruleArgs = @("$Admin", "FullControl", "Allow")
-}
-
-$path = 'SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform\55c92734-d682-4d71-983e-d6ec3f16059f'
-$key = [Microsoft.Win32.RegistryKey]::OpenBaseKey('LocalMachine', 'Registry64').OpenSubKey($path, 'ReadWriteSubTree', 'ChangePermissions')
-$acl = $key.GetAccessControl()
-
-$rule = [System.Security.AccessControl.RegistryAccessRule]::new.Invoke($ruleArgs)
-$acl.ResetAccessRule($rule)
-$key.SetAccessControl($acl)
-:regdel:
-
-::========================================================================================================================================
-
-:dk_color
-
-if %_NCS% EQU 1 (
-echo %esc%[%~1%~2%esc%[0m
-) else if exist %ps% (
-%psc% write-host -back '%1' -fore '%2' '%3'
-) else if not exist %ps% (
-echo %~3
-)
-exit /b
-
-:dk_color2
-
-if %_NCS% EQU 1 (
-echo %esc%[%~1%~2%esc%[%~3%~4%esc%[0m
-) else if exist %ps% (
-%psc% write-host -back '%1' -fore '%2' '%3' -NoNewline; write-host -back '%4' -fore '%5' '%6'
-) else if not exist %ps% (
-echo %~3 %~6
-)
-exit /b
-
-::========================================================================================================================================
-
-:dk_done
-
-echo:
-if %_unattended%==1 timeout /t 2 & exit /b
-
-if defined fixes (
-call :dk_color %White% "Follow ALL the ABOVE blue lines. "
-call :dk_color2 %Blue% "Press [1] to Open Support Webpage " %Gray% " Press [0] to Ignore"
-choice /C:10 /N
-if !errorlevel!==2 exit /b
-if !errorlevel!==1 (start %selfgit% & start %github% & for %%# in (%fixes%) do (start %%#))
-)
-
-if defined terminal (
-call :dk_color %_Yellow% "Press [0] key to %_exitmsg%..."
-choice /c 0 /n
-) else (
-call :dk_color %_Yellow% "Press any key to %_exitmsg%..."
-pause %nul1%
-)
-
-exit /b
-
-::========================================================================================================================================
-
-:: Set variables
-
-:dk_setvar
-
-set ps=%SysPath%\WindowsPowerShell\v1.0\powershell.exe
-set psc=%ps% -nop -c
-set winbuild=1
-for /f "tokens=2 delims=[]" %%G in ('ver') do for /f "tokens=2,3,4 delims=. " %%H in ("%%~G") do set "winbuild=%%J"
-
-set _slexe=sppsvc.exe& set _slser=sppsvc
-if %winbuild% LEQ 6300 (set _slexe=SLsvc.exe& set _slser=SLsvc)
-if %winbuild% LSS 7600 if exist "%SysPath%\SLsvc.exe" (set _slexe=SLsvc.exe& set _slser=SLsvc)
-if %_slexe%==SLsvc.exe set _vis=1
-
-set _NCS=1
-if %winbuild% LSS 10586 set _NCS=0
-if %winbuild% GEQ 10586 reg query "HKCU\Console" /v ForceV2 %nul2% | find /i "0x0" %nul1% && (set _NCS=0)
-
-echo "%PROCESSOR_ARCHITECTURE% %PROCESSOR_ARCHITEW6432%" | find /i "ARM64" %nul1% && (if %winbuild% LSS 21277 set ps32onArm=1)
-
-if %_NCS% EQU 1 (
-for /F %%a in ('echo prompt $E ^| cmd') do set "esc=%%a"
-set "Red="41;97m""
-set "Gray="100;97m""
-set "Green="42;97m""
-set "Blue="44;97m""
-set "White="107;91m""
-set "_Red="40;91m""
-set "_White="40;37m""
-set "_Green="40;92m""
-set "_Yellow="40;93m""
-) else (
-set "Red="Red" "white""
-set "Gray="Darkgray" "white""
-set "Green="DarkGreen" "white""
-set "Blue="Blue" "white""
-set "White="White" "Red""
-set "_Red="Black" "Red""
-set "_White="Black" "Gray""
-set "_Green="Black" "Green""
-set "_Yellow="Black" "Yellow""
-)
-
-set "nceline=echo: &echo ==== ERROR ==== &echo:"
-set "eline=echo: &call :dk_color %Red% "==== ERROR ====" &echo:"
-if %~z0 GEQ 200000 (
-set "_exitmsg=Go back"
-set "_fixmsg=Go back to Main Menu, select Troubleshoot and run Fix Licensing option."
-) else (
-set "_exitmsg=Exit"
-set "_fixmsg=In MAS folder, run Troubleshoot script and select Fix Licensing option."
-)
-exit /b
-
-::========================================================================================================================================
-:: Leave empty line below
diff --git a/README.md b/README.md
index 721599e..4bfe933 100644
--- a/README.md
+++ b/README.md
@@ -4,6 +4,8 @@
Open-source Windows and Office activator featuring HWID, Ohook, TSforge, and Online KMS activation methods, along with advanced troubleshooting.
+#by me
+
## How to Activate Windows / Office / Extended Security Updates (ESU)?