diff --git a/data/products.yaml b/data/products.yaml index 5f9614a..a6bc9cc 100644 --- a/data/products.yaml +++ b/data/products.yaml @@ -82,67 +82,6 @@ windows: edition: "Enterprise N LTSB 2015" gvlk: "2F77B-TNFGY-69QQF-B8YKP-D69TJ" - # Legacy desktop - - family: "Legacy desktop" - edition: "Windows 8.1 Pro" - gvlk: "GCRJD-8NW9H-F2CDX-CCM8D-9D6T9" - notes: "Out of support since Jan 2023." - - family: "Legacy desktop" - edition: "Windows 8.1 Pro N" - gvlk: "HMCNV-VVBFX-7HMBH-CTY9B-B4FXY" - - family: "Legacy desktop" - edition: "Windows 8.1 Enterprise" - gvlk: "MHF9N-XY6XB-WVXMC-BTDCT-MKKG7" - - family: "Legacy desktop" - edition: "Windows 8.1 Enterprise N" - gvlk: "TT4HM-HN7YT-62K67-RGRQJ-JFFXW" - - family: "Legacy desktop" - edition: "Windows 8 Pro" - gvlk: "NG4HW-VH26C-733KW-K6F98-J8CK4" - notes: "EOL Jan 2016." - - family: "Legacy desktop" - edition: "Windows 8 Pro N" - gvlk: "XCVCF-2NXM9-723PB-MHCB7-2RYQQ" - - family: "Legacy desktop" - edition: "Windows 8 Enterprise" - gvlk: "32JNW-9KQ84-P47T8-D8GGY-CWCK7" - - family: "Legacy desktop" - edition: "Windows 8 Enterprise N" - gvlk: "JMNMF-RHW7P-DMY6X-RF3DR-X2BQT" - - family: "Legacy desktop" - edition: "Windows 7 Professional" - gvlk: "FJ82H-XT6CR-J8D7P-XQJJ2-GPDD4" - notes: "EOL Jan 2020 (ESU through 2023)." - - family: "Legacy desktop" - edition: "Windows 7 Professional N" - gvlk: "MRPKT-YTG23-K7D7T-X2JMM-QY7MG" - - family: "Legacy desktop" - edition: "Windows 7 Professional E" - gvlk: "W82YF-2Q76Y-63HXB-FGJG9-GF7QX" - - family: "Legacy desktop" - edition: "Windows 7 Enterprise" - gvlk: "33PXH-7Y6KF-2VJC9-XBBR8-HVTHH" - - family: "Legacy desktop" - edition: "Windows 7 Enterprise N" - gvlk: "YDRBP-3D83W-TY26F-D46B2-XCKRJ" - - family: "Legacy desktop" - edition: "Windows 7 Enterprise E" - gvlk: "C29WB-22CC8-VJ326-GHFJW-H9DH4" - notes: "Win7 Ultimate is NOT KMS-activatable — not a Volume License SKU." - - family: "Legacy desktop" - edition: "Windows Vista Business" - gvlk: "YFKBB-PQJJV-G996G-VWGXY-2V3X8" - notes: "EOL Apr 2017." - - family: "Legacy desktop" - edition: "Windows Vista Business N" - gvlk: "HMBQG-8H2RH-C77VX-27R82-VMQBT" - - family: "Legacy desktop" - edition: "Windows Vista Enterprise" - gvlk: "VKK3X-68KWM-X2YGT-QR4M6-4BWMV" - - family: "Legacy desktop" - edition: "Windows Vista Enterprise N" - gvlk: "VTC42-BM838-43QHV-84HX6-XJXKV" - windows_server: - family: "Windows Server 2025" edition: "Standard" @@ -192,70 +131,6 @@ windows_server: - family: "Windows Server 2016" edition: "Essentials" gvlk: "JCKRF-N37P4-C2D82-9YXRT-4M63B" - - family: "Windows Server 2012 R2" - edition: "Standard" - gvlk: "D2N9P-3P6X9-2R39C-7RTCD-MDVJX" - notes: "EOL Oct 2023; ESU available." - - family: "Windows Server 2012 R2" - edition: "Datacenter" - gvlk: "W3GGN-FT8W3-Y4M27-J84CP-Q3VJ9" - - family: "Windows Server 2012 R2" - edition: "Essentials" - gvlk: "KNC87-3J2TX-XB4WP-VCPJV-M4FWM" - - family: "Windows Server 2012" - edition: "Standard" - gvlk: "XC9B7-NBPP2-83J2H-RHMBY-92BT4" - - family: "Windows Server 2012" - edition: "Datacenter" - gvlk: "48HP8-DN98B-MYWDG-T2DCC-8W83P" - - family: "Windows Server 2012" - edition: "Essentials" - gvlk: "HTDQM-NBMMG-KGYDT-2DTKT-J2MPV" - - family: "Windows Server 2012" - edition: "MultiPoint Standard" - gvlk: "HM7DN-YVMH3-46JC3-XYTG7-CYQJJ" - - family: "Windows Server 2012" - edition: "MultiPoint Premium" - gvlk: "XNH6W-2V9GX-RGJ4K-Y8X6F-QGJ2G" - - family: "Windows Server 2008 R2" - edition: "Standard" - gvlk: "YC6KT-GKW9T-YTKYR-T4X34-R7VHC" - notes: "EOL Jan 2020 (ESU 2023)." - - family: "Windows Server 2008 R2" - edition: "Enterprise" - gvlk: "489J6-VHDMP-X63PK-3K798-CPX3Y" - - family: "Windows Server 2008 R2" - edition: "Datacenter" - gvlk: "74YFP-3QFB3-KQT8W-PMXWJ-7M648" - - family: "Windows Server 2008 R2" - edition: "Web" - gvlk: "6TPJF-RBVHG-WBW2R-86QPH-6RTM4" - - family: "Windows Server 2008 R2" - edition: "HPC" - gvlk: "TT8MH-CG224-D3D7Q-498W2-9QCTX" - - family: "Windows Server 2008 R2" - edition: "Itanium" - gvlk: "GT63C-RJFQ3-4GMB6-BRFB9-CB83V" - - family: "Windows Server 2008" - edition: "Standard" - gvlk: "TM24T-X9RMF-VWXK6-X8JC9-BFGM2" - notes: "EOL Jan 2020." - - family: "Windows Server 2008" - edition: "Enterprise" - gvlk: "YQGMW-MPWTJ-34KDK-48M3W-X4Q6V" - - family: "Windows Server 2008" - edition: "Datacenter" - gvlk: "7M67G-PC374-GR742-YH8V4-TCBY3" - - family: "Windows Server 2008" - edition: "Web" - gvlk: "WYR28-R7TFJ-3X2YQ-YCY4H-M249D" - - family: "Windows Server 2008" - edition: "HPC" - gvlk: "RCTX3-KWVHP-BR6TB-RB6DM-6X7HP" - - family: "Windows Server 2008" - edition: "Itanium" - gvlk: "4DWFP-JF3DJ-B7DTH-78FJB-PDRHK" - office: # Office LTSC 2024 — current - family: "Office LTSC 2024" diff --git a/hugo.toml b/hugo.toml index 4fc7d39..0919514 100644 --- a/hugo.toml +++ b/hugo.toml @@ -5,8 +5,12 @@ disableKinds = ["taxonomy", "term", "RSS", "sitemap", "404"] [params] description = "Public KMS host for activating Microsoft Volume License Windows, Office, Project, and Visio. Free, no signup, no tracking." - kmsHost = "kms.viktorbarzin.me" - kmsHostLan = "kms.viktorbarzin.lan" + # siteHost serves this website + the /scripts/*.ps1 downloads (Traefik). + # kmsHost is the raw KMS endpoint on :1688 (vlmcsd) — a SEPARATE A-only host + # so it resolves to the KMS server both on the LAN and over the internet. + # They must stay distinct: kms.viktorbarzin.me:1688 hits Traefik (no KMS). + siteHost = "kms.viktorbarzin.me" + kmsHost = "vlmcs.viktorbarzin.me" kmsPort = 1688 bootstrapURL = "/scripts/kms-bootstrap.ps1" setupURL = "/scripts/setup-kms.ps1" diff --git a/layouts/index.html b/layouts/index.html index fc3e4c4..e59f82a 100644 --- a/layouts/index.html +++ b/layouts/index.html @@ -70,15 +70,15 @@
$env:KMS_AUTO='win'; iwr -UseBasicParsing https://{{ .Site.Params.kmsHost }}{{ .Site.Params.bootstrapURL }} | iex
+$env:KMS_AUTO='win'; iwr -UseBasicParsing https://{{ .Site.Params.siteHost }}{{ .Site.Params.bootstrapURL }} | iex
$env:KMS_AUTO='office,project,visio'; iwr -UseBasicParsing https://{{ .Site.Params.kmsHost }}{{ .Site.Params.bootstrapURL }} | iex
+$env:KMS_AUTO='office,project,visio'; iwr -UseBasicParsing https://{{ .Site.Params.siteHost }}{{ .Site.Params.bootstrapURL }} | iex
$env:KMS_AUTO='win,office,project,visio'; iwr -UseBasicParsing https://{{ .Site.Params.kmsHost }}{{ .Site.Params.bootstrapURL }} | iex
+$env:KMS_AUTO='win,office,project,visio'; iwr -UseBasicParsing https://{{ .Site.Params.siteHost }}{{ .Site.Params.bootstrapURL }} | iex
@@ -111,7 +111,7 @@ cscript "C:\Program Files\Microsoft Office\Office16\ospp.vbs" /act Click any key to copy.
- {{ $order := slice "Windows 11 / 10" "Windows LTSC" "Legacy desktop" }} + {{ $order := slice "Windows 11 / 10" "Windows LTSC" }} {{ range $family := $order }} {{ $items := where $windows "family" $family }} {{ if $items }} @@ -131,6 +131,13 @@ cscript "C:\Program Files\Microsoft Office\Office16\ospp.vbs" /act {{ end }} {{ end }} +
+ Legacy desktop (Windows 8.1 / 8 / 7 / Vista) is out of support and omitted.
+ Those GVLKs still work against this KMS — look them up in Microsoft's
+ KMS client key list
+ and activate with the same slmgr steps below.
+
:: open cmd.exe as Administrator
@@ -146,7 +153,7 @@ slmgr /dlv :: verify (look for "LICEN
Windows Server
Server SKUs need only 5 unique clients to satisfy the KMS activation count threshold (vs. 25 for desktop).
- {{ $serverOrder := slice "Windows Server 2025" "Windows Server 2022" "Windows Server 2019" "Windows Server 2016" "Windows Server 2012 R2" "Windows Server 2012" "Windows Server 2008 R2" "Windows Server 2008" }}
+ {{ $serverOrder := slice "Windows Server 2025" "Windows Server 2022" "Windows Server 2019" "Windows Server 2016" }}
{{ range $family := $serverOrder }}
{{ $items := where $servers "family" $family }}
{{ if $items }}
@@ -165,6 +172,11 @@ slmgr /dlv :: verify (look for "LICEN
{{ end }}
{{ end }}
+
+ Server 2012 R2 / 2012 / 2008 R2 / 2008 are end-of-life and omitted.
+ Their GVLKs still activate here — see Microsoft's
+ KMS client key list.
+
diff --git a/static/scripts/kms-bootstrap.ps1 b/static/scripts/kms-bootstrap.ps1
index a02fdf9..08ec094 100644
--- a/static/scripts/kms-bootstrap.ps1
+++ b/static/scripts/kms-bootstrap.ps1
@@ -1,18 +1,15 @@
# kms-bootstrap.ps1
#
-# Interactive activator for a public KMS host (default: kms.viktorbarzin.me:1688).
-# Asks what you want to activate (Windows / already-installed Office / Project /
-# Visio), and optionally what you want to *install* (Office LTSC 2024 ProPlus,
-# Project Pro 2024, Visio Pro 2024 — all VL editions installed via the official
-# Microsoft Office Deployment Tool). Runs only what you confirm.
+# Interactive KMS activator. Asks what you want to activate (Windows /
+# already-installed Office / Project / Visio) and runs only what you confirm.
+# Points each product at the public KMS host (default: vlmcs.viktorbarzin.me:1688).
#
# Usage:
# iwr -UseBasicParsing https://kms.viktorbarzin.me/scripts/kms-bootstrap.ps1 | iex
#
# Non-interactive (CI / automation):
# $env:KMS_AUTO = 'win,office'; iwr ... | iex
-# (comma list of: win, office, project, visio, install-office,
-# install-project, install-visio)
+# (comma list of: win, office, project, visio)
#
# Custom KMS host:
# $env:KMS_HOST = 'kms.example.com'; iwr ... | iex
@@ -22,7 +19,7 @@
[CmdletBinding()]
param(
- [string]$KmsHost = $(if ($env:KMS_HOST) { $env:KMS_HOST } else { 'kms.viktorbarzin.me' }),
+ [string]$KmsHost = $(if ($env:KMS_HOST) { $env:KMS_HOST } else { 'vlmcs.viktorbarzin.me' }),
[int] $KmsPort = $(if ($env:KMS_PORT) { [int]$env:KMS_PORT } else { 1688 })
)
@@ -69,11 +66,7 @@ $doOfficeAct = Choice 'office' "Activate an already-installed Office (P
$doProjAct = Choice 'project' "Activate an already-installed Project (Pro 2024 / 2021 / 2019 / 2016)?" $false
$doVisioAct = Choice 'visio' "Activate an already-installed Visio (Pro 2024 / 2021 / 2019 / 2016)?" $false
-$doInstOff = Choice 'install-office' "Install Office LTSC 2024 ProPlus (VL, ~3 GB) and activate?" $false
-$doInstProj = Choice 'install-project' "Install Project Pro 2024 (VL) and activate?" $false
-$doInstVis = Choice 'install-visio' "Install Visio Pro 2024 (VL) and activate?" $false
-
-if (-not ($doWin -or $doOfficeAct -or $doProjAct -or $doVisioAct -or $doInstOff -or $doInstProj -or $doInstVis)) {
+if (-not ($doWin -or $doOfficeAct -or $doProjAct -or $doVisioAct)) {
Warn "Nothing selected. Exiting."
return
}
@@ -124,62 +117,6 @@ if ($doOfficeAct) { Activate-Ospp 'Office' }
if ($doProjAct) { Activate-Ospp 'Project' }
if ($doVisioAct) { Activate-Ospp 'Visio' }
-# --- Install via ODT -----------------------------------------------------
-$ODT_URL = 'https://download.microsoft.com/download/2/7/A/27AF1BE6-DD20-4CB4-B154-EBAB8A7D4A7E/officedeploymenttool_19127-20198.exe'
-
-function Install-Odt-Bundle([string[]]$products) {
- $tmp = Join-Path $env:TEMP "kms-odt-$(Get-Random)"
- New-Item -ItemType Directory -Force -Path $tmp | Out-Null
- $odtExe = Join-Path $tmp 'odt.exe'
- Step "Downloading Office Deployment Tool to $tmp"
- Invoke-WebRequest -UseBasicParsing -Uri $ODT_URL -OutFile $odtExe
- Step "Extracting ODT"
- Start-Process -FilePath $odtExe -ArgumentList "/extract:`"$tmp`"", '/quiet' -Wait
- $setup = Join-Path $tmp 'setup.exe'
- if (-not (Test-Path $setup)) { Bad "ODT extraction failed (no setup.exe in $tmp)"; return }
-
- # Build Configuration.xml — only the requested VL Products.
- $productXml = ($products | ForEach-Object { " " }) -join ''
- $cfgXml = @"
-
-
- $productXml
-
-
-
-
-
-
-"@
- $cfg = Join-Path $tmp 'Configuration.xml'
- Set-Content -Path $cfg -Value $cfgXml -Encoding UTF8
-
- Step "Running setup.exe /configure (this can take 5-15 min depending on bandwidth)"
- Start-Process -FilePath $setup -ArgumentList '/configure', "`"$cfg`"" -Wait
- if ($LASTEXITCODE -ne 0 -and $LASTEXITCODE -ne $null) { Warn "ODT exit code $LASTEXITCODE" }
-
- # Pin KMS host + activate
- $ospp = Find-Ospp
- if ($ospp) {
- Step "Pinning Office at $KmsHost`:$KmsPort and activating"
- & cscript //Nologo $ospp /sethst:$KmsHost | Out-Host
- & cscript //Nologo $ospp /setprt:$KmsPort | Out-Host
- & cscript //Nologo $ospp /act | Out-Host
- $st = & cscript //Nologo $ospp /dstatus 2>&1 | Out-String
- if ($st -match '---LICENSED---') { OK "Office bundle licensed" } else { Warn "Status not LICENSED yet" }
- } else {
- Warn "ospp.vbs still not found post-install — manual /act needed."
- }
-
- Remove-Item -Recurse -Force $tmp -ErrorAction SilentlyContinue
-}
-
-$installList = @()
-if ($doInstOff) { $installList += 'ProPlus2024Volume' }
-if ($doInstProj) { $installList += 'ProjectPro2024Volume' }
-if ($doInstVis) { $installList += 'VisioPro2024Volume' }
-if ($installList.Count -gt 0) { Install-Odt-Bundle $installList }
-
Write-Host ""
Step "Done."
Write-Host " Re-run any time to re-check status. KMS licences renew automatically every 7 days."
diff --git a/static/scripts/setup-kms.ps1 b/static/scripts/setup-kms.ps1
index 3aee970..2d15aa4 100644
--- a/static/scripts/setup-kms.ps1
+++ b/static/scripts/setup-kms.ps1
@@ -15,7 +15,7 @@
[CmdletBinding()]
param(
- [string]$KmsHost = $(if ($env:KMS_HOST) { $env:KMS_HOST } else { 'kms.viktorbarzin.me' }),
+ [string]$KmsHost = $(if ($env:KMS_HOST) { $env:KMS_HOST } else { 'vlmcs.viktorbarzin.me' }),
[int] $KmsPort = $(if ($env:KMS_PORT) { [int]$env:KMS_PORT } else { 1688 })
)