kms-website: activate against vlmcs.viktorbarzin.me, drop ODT-install + deep-legacy GVLKs
The page advertised kms.viktorbarzin.me:1688 as the KMS host, but that name is the website (Traefik) — internally it resolves to 10.0.20.203 which has no :1688 listener, so LAN clients failed with "KMS server cannot be reached". Split the concern: siteHost (kms.viktorbarzin.me) serves the page + /scripts downloads; kmsHost is now the dedicated A-only vlmcs.viktorbarzin.me endpoint that resolves to the vlmcsd MetalLB IP (10.0.20.202) on the LAN (Technitium) and to the public IP over the internet (Cloudflare -> pfSense WAN NAT :1688). Moderate cleanup: - remove the Office-install-via-ODT path from kms-bootstrap.ps1 (activation only now; manual ODT install docs stay on the page) - collapse Windows 8.1/8/7/Vista + Server 2012/2008 GVLK tables into a legacy note (those keys still activate; just no longer tabled) - drop the unused kmsHostLan param Pairs with the infra /scripts Anubis carve-out that makes `iwr | iex` work. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
parent
8bcb64bf99
commit
efa1353e6b
5 changed files with 30 additions and 202 deletions
|
|
@ -82,67 +82,6 @@ windows:
|
||||||
edition: "Enterprise N LTSB 2015"
|
edition: "Enterprise N LTSB 2015"
|
||||||
gvlk: "2F77B-TNFGY-69QQF-B8YKP-D69TJ"
|
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:
|
windows_server:
|
||||||
- family: "Windows Server 2025"
|
- family: "Windows Server 2025"
|
||||||
edition: "Standard"
|
edition: "Standard"
|
||||||
|
|
@ -192,70 +131,6 @@ windows_server:
|
||||||
- family: "Windows Server 2016"
|
- family: "Windows Server 2016"
|
||||||
edition: "Essentials"
|
edition: "Essentials"
|
||||||
gvlk: "JCKRF-N37P4-C2D82-9YXRT-4M63B"
|
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:
|
||||||
# Office LTSC 2024 — current
|
# Office LTSC 2024 — current
|
||||||
- family: "Office LTSC 2024"
|
- family: "Office LTSC 2024"
|
||||||
|
|
|
||||||
|
|
@ -5,8 +5,12 @@ disableKinds = ["taxonomy", "term", "RSS", "sitemap", "404"]
|
||||||
|
|
||||||
[params]
|
[params]
|
||||||
description = "Public KMS host for activating Microsoft Volume License Windows, Office, Project, and Visio. Free, no signup, no tracking."
|
description = "Public KMS host for activating Microsoft Volume License Windows, Office, Project, and Visio. Free, no signup, no tracking."
|
||||||
kmsHost = "kms.viktorbarzin.me"
|
# siteHost serves this website + the /scripts/*.ps1 downloads (Traefik).
|
||||||
kmsHostLan = "kms.viktorbarzin.lan"
|
# 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
|
kmsPort = 1688
|
||||||
bootstrapURL = "/scripts/kms-bootstrap.ps1"
|
bootstrapURL = "/scripts/kms-bootstrap.ps1"
|
||||||
setupURL = "/scripts/setup-kms.ps1"
|
setupURL = "/scripts/setup-kms.ps1"
|
||||||
|
|
|
||||||
|
|
@ -70,15 +70,15 @@
|
||||||
<div class="quickstart-grid">
|
<div class="quickstart-grid">
|
||||||
<div class="card terminal">
|
<div class="card terminal">
|
||||||
<div class="card-head"><span>Windows only</span><button class="btn-copy" data-copy-target="quickstart-win">Copy</button></div>
|
<div class="card-head"><span>Windows only</span><button class="btn-copy" data-copy-target="quickstart-win">Copy</button></div>
|
||||||
<pre id="quickstart-win"><code>$env:KMS_AUTO='win'; iwr -UseBasicParsing https://{{ .Site.Params.kmsHost }}{{ .Site.Params.bootstrapURL }} | iex</code></pre>
|
<pre id="quickstart-win"><code>$env:KMS_AUTO='win'; iwr -UseBasicParsing https://{{ .Site.Params.siteHost }}{{ .Site.Params.bootstrapURL }} | iex</code></pre>
|
||||||
</div>
|
</div>
|
||||||
<div class="card terminal">
|
<div class="card terminal">
|
||||||
<div class="card-head"><span>Office / Project / Visio</span><button class="btn-copy" data-copy-target="quickstart-office">Copy</button></div>
|
<div class="card-head"><span>Office / Project / Visio</span><button class="btn-copy" data-copy-target="quickstart-office">Copy</button></div>
|
||||||
<pre id="quickstart-office"><code>$env:KMS_AUTO='office,project,visio'; iwr -UseBasicParsing https://{{ .Site.Params.kmsHost }}{{ .Site.Params.bootstrapURL }} | iex</code></pre>
|
<pre id="quickstart-office"><code>$env:KMS_AUTO='office,project,visio'; iwr -UseBasicParsing https://{{ .Site.Params.siteHost }}{{ .Site.Params.bootstrapURL }} | iex</code></pre>
|
||||||
</div>
|
</div>
|
||||||
<div class="card terminal">
|
<div class="card terminal">
|
||||||
<div class="card-head"><span>Windows + Office</span><button class="btn-copy" data-copy-target="quickstart-both">Copy</button></div>
|
<div class="card-head"><span>Windows + Office</span><button class="btn-copy" data-copy-target="quickstart-both">Copy</button></div>
|
||||||
<pre id="quickstart-both"><code>$env:KMS_AUTO='win,office,project,visio'; iwr -UseBasicParsing https://{{ .Site.Params.kmsHost }}{{ .Site.Params.bootstrapURL }} | iex</code></pre>
|
<pre id="quickstart-both"><code>$env:KMS_AUTO='win,office,project,visio'; iwr -UseBasicParsing https://{{ .Site.Params.siteHost }}{{ .Site.Params.bootstrapURL }} | iex</code></pre>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<p class="hint">
|
<p class="hint">
|
||||||
|
|
@ -111,7 +111,7 @@ cscript "C:\Program Files\Microsoft Office\Office16\ospp.vbs" /act</code></pre>
|
||||||
Click any key to copy.
|
Click any key to copy.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
{{ $order := slice "Windows 11 / 10" "Windows LTSC" "Legacy desktop" }}
|
{{ $order := slice "Windows 11 / 10" "Windows LTSC" }}
|
||||||
{{ range $family := $order }}
|
{{ range $family := $order }}
|
||||||
{{ $items := where $windows "family" $family }}
|
{{ $items := where $windows "family" $family }}
|
||||||
{{ if $items }}
|
{{ if $items }}
|
||||||
|
|
@ -131,6 +131,13 @@ cscript "C:\Program Files\Microsoft Office\Office16\ospp.vbs" /act</code></pre>
|
||||||
{{ end }}
|
{{ end }}
|
||||||
{{ end }}
|
{{ end }}
|
||||||
|
|
||||||
|
<p class="hint">
|
||||||
|
<strong>Legacy desktop</strong> (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
|
||||||
|
<a href="https://learn.microsoft.com/en-us/windows-server/get-started/kms-client-activation-keys" target="_blank" rel="noopener">KMS client key list</a>
|
||||||
|
and activate with the same <code>slmgr</code> steps below.
|
||||||
|
</p>
|
||||||
|
|
||||||
<details class="card">
|
<details class="card">
|
||||||
<summary>How to use a GVLK on Windows</summary>
|
<summary>How to use a GVLK on Windows</summary>
|
||||||
<pre><code>:: open cmd.exe as Administrator
|
<pre><code>:: open cmd.exe as Administrator
|
||||||
|
|
@ -146,7 +153,7 @@ slmgr /dlv :: verify (look for "LICEN
|
||||||
<h2>Windows Server</h2>
|
<h2>Windows Server</h2>
|
||||||
<p class="muted">Server SKUs need only 5 unique clients to satisfy the KMS activation count threshold (vs. 25 for desktop).</p>
|
<p class="muted">Server SKUs need only 5 unique clients to satisfy the KMS activation count threshold (vs. 25 for desktop).</p>
|
||||||
|
|
||||||
{{ $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 }}
|
{{ range $family := $serverOrder }}
|
||||||
{{ $items := where $servers "family" $family }}
|
{{ $items := where $servers "family" $family }}
|
||||||
{{ if $items }}
|
{{ if $items }}
|
||||||
|
|
@ -165,6 +172,11 @@ slmgr /dlv :: verify (look for "LICEN
|
||||||
</table>
|
</table>
|
||||||
{{ end }}
|
{{ end }}
|
||||||
{{ end }}
|
{{ end }}
|
||||||
|
<p class="hint">
|
||||||
|
<strong>Server 2012 R2 / 2012 / 2008 R2 / 2008</strong> are end-of-life and omitted.
|
||||||
|
Their GVLKs still activate here — see Microsoft's
|
||||||
|
<a href="https://learn.microsoft.com/en-us/windows-server/get-started/kms-client-activation-keys" target="_blank" rel="noopener">KMS client key list</a>.
|
||||||
|
</p>
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
<section id="office">
|
<section id="office">
|
||||||
|
|
|
||||||
|
|
@ -1,18 +1,15 @@
|
||||||
# kms-bootstrap.ps1
|
# kms-bootstrap.ps1
|
||||||
#
|
#
|
||||||
# Interactive activator for a public KMS host (default: kms.viktorbarzin.me:1688).
|
# Interactive KMS activator. Asks what you want to activate (Windows /
|
||||||
# Asks what you want to activate (Windows / already-installed Office / Project /
|
# already-installed Office / Project / Visio) and runs only what you confirm.
|
||||||
# Visio), and optionally what you want to *install* (Office LTSC 2024 ProPlus,
|
# Points each product at the public KMS host (default: vlmcs.viktorbarzin.me:1688).
|
||||||
# Project Pro 2024, Visio Pro 2024 — all VL editions installed via the official
|
|
||||||
# Microsoft Office Deployment Tool). Runs only what you confirm.
|
|
||||||
#
|
#
|
||||||
# Usage:
|
# Usage:
|
||||||
# iwr -UseBasicParsing https://kms.viktorbarzin.me/scripts/kms-bootstrap.ps1 | iex
|
# iwr -UseBasicParsing https://kms.viktorbarzin.me/scripts/kms-bootstrap.ps1 | iex
|
||||||
#
|
#
|
||||||
# Non-interactive (CI / automation):
|
# Non-interactive (CI / automation):
|
||||||
# $env:KMS_AUTO = 'win,office'; iwr ... | iex
|
# $env:KMS_AUTO = 'win,office'; iwr ... | iex
|
||||||
# (comma list of: win, office, project, visio, install-office,
|
# (comma list of: win, office, project, visio)
|
||||||
# install-project, install-visio)
|
|
||||||
#
|
#
|
||||||
# Custom KMS host:
|
# Custom KMS host:
|
||||||
# $env:KMS_HOST = 'kms.example.com'; iwr ... | iex
|
# $env:KMS_HOST = 'kms.example.com'; iwr ... | iex
|
||||||
|
|
@ -22,7 +19,7 @@
|
||||||
|
|
||||||
[CmdletBinding()]
|
[CmdletBinding()]
|
||||||
param(
|
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 })
|
[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
|
$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
|
$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
|
if (-not ($doWin -or $doOfficeAct -or $doProjAct -or $doVisioAct)) {
|
||||||
$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)) {
|
|
||||||
Warn "Nothing selected. Exiting."
|
Warn "Nothing selected. Exiting."
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
@ -124,62 +117,6 @@ if ($doOfficeAct) { Activate-Ospp 'Office' }
|
||||||
if ($doProjAct) { Activate-Ospp 'Project' }
|
if ($doProjAct) { Activate-Ospp 'Project' }
|
||||||
if ($doVisioAct) { Activate-Ospp 'Visio' }
|
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 { "<Product ID=`"$_`"><Language ID=`"en-us`" /></Product>" }) -join ''
|
|
||||||
$cfgXml = @"
|
|
||||||
<Configuration>
|
|
||||||
<Add OfficeClientEdition="64" Channel="PerpetualVL2024">
|
|
||||||
$productXml
|
|
||||||
</Add>
|
|
||||||
<Updates Enabled="TRUE" Channel="PerpetualVL2024" />
|
|
||||||
<Display Level="None" AcceptEULA="TRUE" />
|
|
||||||
<Property Name="AUTOACTIVATE" Value="1" />
|
|
||||||
<Property Name="FORCEAPPSHUTDOWN" Value="TRUE" />
|
|
||||||
</Configuration>
|
|
||||||
"@
|
|
||||||
$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 ""
|
Write-Host ""
|
||||||
Step "Done."
|
Step "Done."
|
||||||
Write-Host " Re-run any time to re-check status. KMS licences renew automatically every 7 days."
|
Write-Host " Re-run any time to re-check status. KMS licences renew automatically every 7 days."
|
||||||
|
|
|
||||||
|
|
@ -15,7 +15,7 @@
|
||||||
|
|
||||||
[CmdletBinding()]
|
[CmdletBinding()]
|
||||||
param(
|
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 })
|
[int] $KmsPort = $(if ($env:KMS_PORT) { [int]$env:KMS_PORT } else { 1688 })
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue