- Replace single interactive one-liner with three side-by-side cards (Windows / Office+Project+Visio / Both) using $env:KMS_AUTO=...; the contract is already supported by kms-bootstrap.ps1 - Make Downloads links use the 'download' attribute so browsers prompt save-as instead of rendering .ps1 as text - Strip operator-side framing: kms-bootstrap.ps1 no longer says "this activation has been logged" and both scripts now point Source at the public mirror instead of forgejo.viktorbarzin.me
347 lines
16 KiB
HTML
347 lines
16 KiB
HTML
<!doctype html>
|
|
<html lang="en">
|
|
<head>
|
|
<meta charset="utf-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
<meta name="description" content="{{ .Site.Params.description }}">
|
|
<meta name="color-scheme" content="dark light">
|
|
<title>{{ .Site.Title }} — KMS activation reference</title>
|
|
<link rel="stylesheet" href="{{ "css/style.css" | relURL }}">
|
|
<link rel="preconnect" href="https://rsms.me/">
|
|
<link rel="stylesheet" href="https://rsms.me/inter/inter.css">
|
|
</head>
|
|
<body>
|
|
|
|
<header class="site-header">
|
|
<div class="wrap">
|
|
<div class="brand">
|
|
<span class="logo">⊞</span>
|
|
<div>
|
|
<h1>kms.viktorbarzin.me</h1>
|
|
<p class="tag">Free public KMS · Windows · Office · Project · Visio · No signup, no tracking</p>
|
|
</div>
|
|
</div>
|
|
<nav>
|
|
<a href="#quickstart">Quick start</a>
|
|
<a href="#windows">Windows</a>
|
|
<a href="#server">Server</a>
|
|
<a href="#office">Office</a>
|
|
<a href="#downloads">Downloads</a>
|
|
<a href="#faq">FAQ</a>
|
|
</nav>
|
|
</div>
|
|
</header>
|
|
|
|
<section class="hero">
|
|
<div class="wrap">
|
|
<h2>Activate Microsoft Volume License products in seconds.</h2>
|
|
<p class="lede">
|
|
Public KMS host. Point any VL Windows / Office / Project / Visio at it and it activates —
|
|
no keys to remember, no account, no logs of personal data beyond the activation event itself.
|
|
Run the one-liner below, or use the GVLK tables further down.
|
|
</p>
|
|
<div class="kms-target">
|
|
<div class="kms-target-item">
|
|
<span class="muted">Public KMS host</span>
|
|
<code class="copy" data-copy="{{ .Site.Params.kmsHost }}:{{ .Site.Params.kmsPort }}">{{ .Site.Params.kmsHost }}:{{ .Site.Params.kmsPort }}</code>
|
|
</div>
|
|
<div class="kms-target-item">
|
|
<span class="muted">Reachable from</span>
|
|
<code>any IPv4 internet</code>
|
|
</div>
|
|
<div class="kms-target-item">
|
|
<span class="muted">Cost</span>
|
|
<code>free, forever</code>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</section>
|
|
|
|
<main class="wrap">
|
|
|
|
<section id="quickstart">
|
|
<h2>Quick start</h2>
|
|
<p>
|
|
Open <strong>PowerShell as Administrator</strong> on a Volume License Windows install
|
|
and paste one of the one-liners below. Each pre-selects what to activate, points
|
|
every product at <code>{{ .Site.Params.kmsHost }}:{{ .Site.Params.kmsPort }}</code>,
|
|
runs the activation, and prints the result.
|
|
</p>
|
|
<div class="quickstart-grid">
|
|
<div class="card terminal">
|
|
<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>
|
|
</div>
|
|
<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>
|
|
<pre id="quickstart-office"><code>$env:KMS_AUTO='office,project,visio'; iwr -UseBasicParsing https://{{ .Site.Params.kmsHost }}{{ .Site.Params.bootstrapURL }} | iex</code></pre>
|
|
</div>
|
|
<div class="card terminal">
|
|
<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>
|
|
</div>
|
|
</div>
|
|
<p class="hint">
|
|
Want to be asked instead? Drop the <code>$env:KMS_AUTO=...;</code> prefix —
|
|
the script will prompt for each product. Prefer to read it first?
|
|
<a href="{{ .Site.Params.bootstrapURL }}">View kms-bootstrap.ps1</a> or
|
|
<a href="{{ .Site.Params.setupURL }}">setup-kms.ps1</a> (a smaller variant
|
|
that just runs <code>slmgr /skms</code> + <code>slmgr /ato</code>).
|
|
</p>
|
|
<p class="hint">Want to skip the script entirely? Two cmd.exe lines do the same job:</p>
|
|
<div class="card terminal">
|
|
<div class="card-head"><span>cmd.exe — manual</span><button class="btn-copy" data-copy-target="explicit-cmd">Copy</button></div>
|
|
<pre id="explicit-cmd"><code>slmgr /skms {{ .Site.Params.kmsHost }}:{{ .Site.Params.kmsPort }}
|
|
slmgr /ato
|
|
|
|
cscript "C:\Program Files\Microsoft Office\Office16\ospp.vbs" /sethst:{{ .Site.Params.kmsHost }}
|
|
cscript "C:\Program Files\Microsoft Office\Office16\ospp.vbs" /act</code></pre>
|
|
</div>
|
|
</section>
|
|
|
|
{{/* helper: build product family groupings */}}
|
|
{{ $windows := .Site.Data.products.windows }}
|
|
{{ $servers := .Site.Data.products.windows_server }}
|
|
{{ $office := .Site.Data.products.office }}
|
|
|
|
<section id="windows">
|
|
<h2>Windows desktop</h2>
|
|
<p class="muted">
|
|
Per-edition GVLKs. <strong>Volume License only</strong> — Home and retail SKUs cannot KMS-activate.
|
|
Click any key to copy.
|
|
</p>
|
|
|
|
{{ $order := slice "Windows 11 / 10" "Windows LTSC" "Legacy desktop" }}
|
|
{{ range $family := $order }}
|
|
{{ $items := where $windows "family" $family }}
|
|
{{ if $items }}
|
|
<h3 class="family-head">{{ $family }}</h3>
|
|
<table class="key-table">
|
|
<thead><tr><th>Edition</th><th>GVLK</th><th class="notes-col">Notes</th></tr></thead>
|
|
<tbody>
|
|
{{ range $items }}
|
|
<tr{{ if .current }} class="current"{{ end }}>
|
|
<td>{{ .edition }}{{ if .current }} <span class="badge">current</span>{{ end }}</td>
|
|
<td><code class="copy" data-copy="{{ .gvlk }}">{{ .gvlk }}</code></td>
|
|
<td class="notes-col">{{ with .notes }}{{ . }}{{ else }}—{{ end }}</td>
|
|
</tr>
|
|
{{ end }}
|
|
</tbody>
|
|
</table>
|
|
{{ end }}
|
|
{{ end }}
|
|
|
|
<details class="card">
|
|
<summary>How to use a GVLK on Windows</summary>
|
|
<pre><code>:: open cmd.exe as Administrator
|
|
slmgr /upk :: remove existing key
|
|
slmgr /ipk <PASTE-GVLK-HERE> :: install GVLK
|
|
slmgr /skms {{ .Site.Params.kmsHost }}:{{ .Site.Params.kmsPort }} :: point at this server
|
|
slmgr /ato :: activate
|
|
slmgr /dlv :: verify (look for "LICENSED")</code></pre>
|
|
</details>
|
|
</section>
|
|
|
|
<section id="server">
|
|
<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>
|
|
|
|
{{ $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" }}
|
|
{{ range $family := $serverOrder }}
|
|
{{ $items := where $servers "family" $family }}
|
|
{{ if $items }}
|
|
<h3 class="family-head">{{ $family }}</h3>
|
|
<table class="key-table">
|
|
<thead><tr><th>Edition</th><th>GVLK</th><th class="notes-col">Notes</th></tr></thead>
|
|
<tbody>
|
|
{{ range $items }}
|
|
<tr{{ if .current }} class="current"{{ end }}>
|
|
<td>{{ .edition }}{{ if .current }} <span class="badge">current</span>{{ end }}</td>
|
|
<td><code class="copy" data-copy="{{ .gvlk }}">{{ .gvlk }}</code></td>
|
|
<td class="notes-col">{{ with .notes }}{{ . }}{{ else }}—{{ end }}</td>
|
|
</tr>
|
|
{{ end }}
|
|
</tbody>
|
|
</table>
|
|
{{ end }}
|
|
{{ end }}
|
|
</section>
|
|
|
|
<section id="office">
|
|
<h2>Office · Project · Visio</h2>
|
|
<p class="muted">
|
|
All listed editions are Volume License. Install via the
|
|
<a href="#downloads">Office Deployment Tool</a> with the matching <code>Configuration.xml</code> below
|
|
(use <code>Channel</code> shown in each row), or manually swap a retail key with
|
|
<code>ospp.vbs /unpkey:<LAST5></code> + <code>/inpkey:<GVLK></code> and <code>/act</code>.
|
|
</p>
|
|
|
|
{{ $officeOrder := slice "Office LTSC 2024" "Office LTSC 2021" "Office 2019" "Office 2016" }}
|
|
{{ range $family := $officeOrder }}
|
|
{{ $items := where $office "family" $family }}
|
|
{{ if $items }}
|
|
<h3 class="family-head">{{ $family }}</h3>
|
|
<table class="key-table">
|
|
<thead><tr><th>Edition</th><th>Product ID</th><th>GVLK</th><th class="notes-col">Channel</th></tr></thead>
|
|
<tbody>
|
|
{{ range $items }}
|
|
<tr{{ if .current }} class="current"{{ end }}>
|
|
<td>{{ .edition }}{{ if .current }} <span class="badge">current</span>{{ end }}</td>
|
|
<td><code class="muted">{{ .product }}</code></td>
|
|
<td><code class="copy" data-copy="{{ .gvlk }}">{{ .gvlk }}</code></td>
|
|
<td class="notes-col">{{ .channel }}</td>
|
|
</tr>
|
|
{{ end }}
|
|
</tbody>
|
|
</table>
|
|
{{ end }}
|
|
{{ end }}
|
|
|
|
<details class="card">
|
|
<summary>Sample Configuration.xml — Office Pro Plus 2024 + Project Pro 2024</summary>
|
|
<pre><code><Configuration>
|
|
<Add OfficeClientEdition="64" Channel="PerpetualVL2024">
|
|
<Product ID="ProPlus2024Volume" PIDKEY="XJ2XN-FW8RK-P4HMP-DKDBV-GCVGB">
|
|
<Language ID="en-us"/>
|
|
</Product>
|
|
<Product ID="ProjectPro2024Volume" PIDKEY="FQQ23-N4YCY-73HQ3-FM9WC-76HF4">
|
|
<Language ID="en-us"/>
|
|
</Product>
|
|
</Add>
|
|
<Updates Enabled="TRUE" Channel="PerpetualVL2024"/>
|
|
<Display Level="None" AcceptEULA="TRUE"/>
|
|
<Property Name="AUTOACTIVATE" Value="1"/>
|
|
<Property Name="FORCEAPPSHUTDOWN" Value="TRUE"/>
|
|
</Configuration></code></pre>
|
|
</details>
|
|
|
|
<details class="card">
|
|
<summary>Activation — bare commands</summary>
|
|
<pre><code>cd "C:\Program Files\Microsoft Office\Office16"
|
|
cscript ospp.vbs /sethst:{{ .Site.Params.kmsHost }}
|
|
cscript ospp.vbs /setprt:{{ .Site.Params.kmsPort }}
|
|
cscript ospp.vbs /inpkey:<PASTE-GVLK>
|
|
cscript ospp.vbs /act
|
|
cscript ospp.vbs /dstatus :: verify --LICENSED--</code></pre>
|
|
</details>
|
|
</section>
|
|
|
|
<section id="downloads">
|
|
<h2>Downloads</h2>
|
|
|
|
<h3 class="family-head">Office Deployment Tool</h3>
|
|
<p>
|
|
Single binary that installs every Office VL edition listed above, driven by a
|
|
<code>Configuration.xml</code>.
|
|
</p>
|
|
<a class="dl" href="{{ .Site.Data.products.downloads.odt.url }}" target="_blank" rel="noopener">
|
|
{{ .Site.Data.products.downloads.odt.label }} ↗
|
|
</a>
|
|
<p class="hint">{{ .Site.Data.products.downloads.odt.notes }}</p>
|
|
|
|
<h3 class="family-head">Windows ISOs</h3>
|
|
<ul class="dl-list">
|
|
{{ range .Site.Data.products.downloads.windows }}
|
|
<li>
|
|
<a href="{{ .url }}" target="_blank" rel="noopener">{{ .label }} ↗</a>
|
|
{{ with .notes }}<span class="muted"> — {{ . }}</span>{{ end }}
|
|
</li>
|
|
{{ end }}
|
|
</ul>
|
|
|
|
<h3 class="family-head">PowerShell scripts</h3>
|
|
<p>Both scripts are open-source, single-file, no dependencies. Read before running.</p>
|
|
<ul class="dl-list">
|
|
<li>
|
|
<a href="{{ .Site.Params.bootstrapURL }}" download="kms-bootstrap.ps1" rel="noopener">kms-bootstrap.ps1 ↓</a>
|
|
<span class="muted"> — interactive: prompts for Windows / Office / Project / Visio and activates each.</span>
|
|
</li>
|
|
<li>
|
|
<a href="{{ .Site.Params.setupURL }}" download="setup-kms.ps1" rel="noopener">setup-kms.ps1 ↓</a>
|
|
<span class="muted"> — minimal: <code>slmgr /skms</code> + <code>/ato</code>. No Office install.</span>
|
|
</li>
|
|
</ul>
|
|
</section>
|
|
|
|
<section id="faq">
|
|
<h2>FAQ & gotchas</h2>
|
|
<div class="faq">
|
|
<details>
|
|
<summary>Why won't my retail Office activate?</summary>
|
|
<p>KMS only grants licenses to <strong>Volume License</strong> editions. Retail / OEM / Microsoft 365
|
|
keys reject KMS responses. Either reinstall as VL via ODT, or swap the key in place:
|
|
<code>cscript ospp.vbs /unpkey:<LAST5></code> followed by
|
|
<code>cscript ospp.vbs /inpkey:<GVLK></code> and <code>/act</code>.</p>
|
|
</details>
|
|
<details>
|
|
<summary>What about Windows Home?</summary>
|
|
<p>Home editions cannot be KMS-activated. Either upgrade to Pro/Enterprise/Education
|
|
(<code>DISM /Set-Edition</code> or in-place reinstall) or use a retail key.</p>
|
|
</details>
|
|
<details>
|
|
<summary>The first activation fails with 0xC004F038</summary>
|
|
<p>That's the KMS count threshold: 25 unique clients (or 5 servers) must contact the host before
|
|
desktop clients can activate. The host caches counts for 30 days. The vlmcsd implementation in
|
|
this server bypasses that — but real Microsoft KMS hosts enforce it. If you ever swap to a
|
|
hardware host you may need to pre-seed activations.</p>
|
|
</details>
|
|
<details>
|
|
<summary>Office LTSC vs Microsoft 365 — can they coexist?</summary>
|
|
<p>No. The Click-to-Run installer refuses side-by-side. Run
|
|
<code>setup.exe /configure Remove.xml</code> with <code><Remove All="TRUE"/></code>
|
|
first, then install the VL edition.</p>
|
|
</details>
|
|
<details>
|
|
<summary>How does auto-discovery work? Do I need it?</summary>
|
|
<p>No — the Quick Start one-liner pins the host explicitly so auto-discovery is irrelevant
|
|
for internet visitors. It exists for managed corporate networks: the Software Protection
|
|
Service queries DNS for <code>_vlmcs._tcp.<primary-dns-suffix></code>, and if the SRV
|
|
resolves, Windows connects there on the returned port. If you want it on your own LAN,
|
|
publish a SRV record pointing at <code>{{ .Site.Params.kmsHost }}:{{ .Site.Params.kmsPort }}</code>
|
|
(or any vlmcsd you self-host) and set the matching DNS suffix on each client.</p>
|
|
</details>
|
|
<details>
|
|
<summary>Will my activation be logged? What about privacy?</summary>
|
|
<p>The KMS protocol itself sends your machine's hostname, your client IP (from the TCP
|
|
socket), and the product ID being activated. The server records the event in a log so
|
|
the operator can see overall traffic. No personal data beyond what the KMS protocol
|
|
itself transmits is collected; nothing is shared, sold, or retained beyond the operator's
|
|
monitoring. If that bothers you, run your own vlmcsd — it's a single binary, the source
|
|
is on <a href="https://github.com/Wind4/vlmcsd" target="_blank" rel="noopener">GitHub</a>.</p>
|
|
</details>
|
|
<details>
|
|
<summary>Is this legal? Can I use it for anything?</summary>
|
|
<p>KMS activates only <strong>Volume License (VL)</strong> editions of Microsoft software.
|
|
VL keys are licensed per-organization by Microsoft; using a VL edition without a real VL
|
|
agreement violates Microsoft's licensing terms. This server exists for personal lab /
|
|
learning / unsupported-OS-revival use. If you don't have a VL agreement, evaluate
|
|
Windows + Office through Microsoft's free trial channels instead. The site operator is
|
|
not responsible for how visitors use the host.</p>
|
|
</details>
|
|
<details>
|
|
<summary>How long does a KMS license last?</summary>
|
|
<p>180 days. The client tries to renew every 7 days; one successful renewal resets the 180-day
|
|
clock. As long as a machine reaches the KMS once a quarter it stays activated indefinitely.</p>
|
|
</details>
|
|
<details>
|
|
<summary>Where can I see the GVLKs Microsoft publishes?</summary>
|
|
<p>Windows: <a href="https://learn.microsoft.com/en-us/windows-server/get-started/kms-client-activation-keys" target="_blank" rel="noopener">learn.microsoft.com/.../kms-client-activation-keys</a>.<br>
|
|
Office / Project / Visio: <a href="https://learn.microsoft.com/en-us/deployoffice/vlactivation/gvlks" target="_blank" rel="noopener">learn.microsoft.com/.../gvlks</a>.</p>
|
|
</details>
|
|
</div>
|
|
</section>
|
|
|
|
</main>
|
|
|
|
<footer>
|
|
<div class="wrap">
|
|
<p>
|
|
KMS host on this network · vlmcsd · Built with Hugo ·
|
|
<a href="https://forgejo.viktorbarzin.me/viktor/kms-website" target="_blank" rel="noopener">source</a>
|
|
</p>
|
|
</div>
|
|
</footer>
|
|
|
|
<script src="{{ "js/clipboard.js" | relURL }}"></script>
|
|
</body>
|
|
</html>
|