"Коротко:
<br />
Открой PowerShell от имени администратора. Для Windows — запусти slmgr /ato. Для Office — перейди в папку установки и запусти cscript ospp.vbs /act. Если получаешь ошибку — смотри раздел Troubleshooting ниже, там все разобрано по кодам.<br />
<h2>Диагноз: зачем вообще это нужно</h2>
<p>Получил новую машину. <a class="wpil_keyword_link" href="https://it-apteka.com/category/windows-server/" target="_blank" rel="noopener" title="Windows Server" data-wpil-keyword-link="linked" data-wpil-monitor-id="1701">Windows</a> 11 стоит, но в правом нижнем углу красуется «Активируйте Windows». Office открывается — и сразу лезет окно с предложением купить подписку. Знакомо?</p>
<p>Графический интерфейс — это хорошо, когда делаешь одну машину руками. Когда нужно прогнать активацию на 20 рабочих станциях или воспроизвести процесс без кликов, <a class="wpil_keyword_link" href="https://it-apteka.com/tag/powershell/" target="_blank" rel="noopener" title="PowerShell" data-wpil-keyword-link="linked" data-wpil-monitor-id="1704">PowerShell</a> — единственный нормальный вариант.</p>
<p>В этой статье разберём всё: как работает активация через командную строку, какие команды за что отвечают, как написать <a class="wpil_keyword_link" href="https://it-apteka.com/category/scripts/" target="_blank" rel="noopener" title="Скрипты" data-wpil-keyword-link="linked" data-wpil-monitor-id="1705">скрипт</a> который не падает, и что делать когда всё-таки падает. На выходе получишь рабочий набор команд который можно копировать и использовать.</p>
<p>Времени займёт 15-20 минут на первый раз. Потом — минута на машину.</p>
<p>Что потребуется:</p>
<ul>
<li>Windows 11 (Home, Pro, Enterprise)</li>
<li>PowerShell 5.1 или выше — уже встроен в систему</li>
<li>Права администратора</li>
<li>Лицензионный ключ или доступ к KMS-серверу</li>
<li>Для Office: установленный пакет Office 2016/2019/2021/365</li>
</ul>
<p>Что будет в статье:</p>
<ul>
<li>Как запустить PowerShell правильно</li>
<li>Команды активации Windows через slmgr</li>
<li>Команды активации Office через ospp.vbs</li>
<li>Проверка статуса лицензии</li>
<li>Готовые скрипты для автоматизации</li>
<li>Troubleshooting по кодам ошибок</li>
<li>FAQ</li>
</ul>
<h2>Как устроена активация Windows: коротко про механику</h2>
<p>Прежде чем давать команды — одна минута теории. Иначе будешь бездумно копировать строки и не понимать что происходит. А потом удивляться ошибкам.</p>
<p>Windows использует два основных способа активации:</p>
<ul>
<li><strong>MAK (Multiple Activation Key)</strong> — один ключ, <a href="https://it-apteka.com/server-aktivacii-windows-podkljuchenie-nastrojka-i-reshenie-oshibok-kms/" title="Сервер активации Windows: подключение, настройка и решение ошибок KMS" target="_blank" rel="noopener" data-wpil-monitor-id="1696">активация через серверы</a> Microsoft напрямую. Каждая активация «сжигает» одну квоту из общего пула. Подходит для небольшого числа машин или для домашних пользователей.</li>
<li><strong>KMS (Key Management Service)</strong> — корпоративный вариант. Внутри <a class="wpil_keyword_link" href="https://it-apteka.com/category/networks/" target="_blank" rel="noopener" title="Сети" data-wpil-keyword-link="linked" data-wpil-monitor-id="1702">сети</a> стоит KMS-сервер, машины обращаются к нему каждые 180 дней. Без доступа к серверу активация слетает. Используется в доменных средах.</li>
</ul>
<p>За всё это отвечает инструмент <strong>slmgr.vbs</strong> — скрипт Windows Script Host, который управляет лицензированием. PowerShell запускает его через cscript или вызывает напрямую. Результат одинаковый.</p>
<p>Office — отдельная история. У него свой механизм и свой инструмент — <strong>ospp.vbs</strong>. Он лежит в папке установки Office. Принципы те же: MAK или KMS, но работает независимо от Windows.</p>
<pre class="mermaid">%%{init: {
'theme': 'base',
'themeVariables': {
'primaryColor': '#ffffff',
'primaryTextColor': '#1e293b',
'primaryBorderColor': '#94a3b8',
'lineColor': '#64748b',
'fontSize': '15px',
'fontFamily': 'ui-sans-serif, system-ui, sans-serif'
},
'flowchart': {'curve': 'linear', 'nodeSpacing': 50, 'rankSpacing': 50}
}}%%
flowchart TD
A["PowerShell (Admin)"] --> B["slmgr.vbs"]
A --> C["ospp.vbs"]
B --> D["Windows License Service"]
C --> E["Office License Service"]
D --> F["Microsoft KMS Server"]
D --> G["Microsoft MAK Server"]
E --> F
E --> G
style A fill:#f8fafc,stroke:#3b82f6,stroke-width:2px,color:#1e40af
style B fill:#f8fafc,stroke:#94a3b8,stroke-width:1px,color:#1e293b
style C fill:#f8fafc,stroke:#94a3b8,stroke-width:1px,color:#1e293b
style D fill:#f8fafc,stroke:#94a3b8,stroke-width:1px,color:#1e293b
style E fill:#f8fafc,stroke:#94a3b8,stroke-width:1px,color:#1e293b
style F fill:#f8fafc,stroke:#22c55e,stroke-width:2px,color:#15803d
style G fill:#f8fafc,stroke:#22c55e,stroke-width:2px,color:#15803d
</pre>
<h2>Запуск PowerShell от имени администратора</h2>
<p>Без прав администратора команды активации просто не выполнятся. Не ошибку дадут — именно не выполнятся, тихо или с невнятным отказом. Проверь это первым делом.</p>
<p>Три способа открыть PowerShell от администратора:</p>
<p><strong>Способ 1 — через поиск:</strong> нажми Win, набери «PowerShell», в результатах кликни правой кнопкой — «Запуск от имени администратора».</p>
<p><strong>Способ 2 — через Win+X:</strong> нажми Win+X — увидишь «Терминал (администратор)» или «Windows PowerShell (администратор)».</p>
<p><strong>Способ 3 — из уже открытого PowerShell:</strong></p>
<pre><code class="language-powershell">
Start-Process powershell -Verb RunAs
</code></pre>
<p>Как проверить что запущен от администратора — в заголовке окна должно быть «Администратор: Windows PowerShell» или строка приглашения выглядит как PS C:\Windows\system32>.</p>
"Проверка
<br />
Выполни команду ниже. Если вернёт True — ты администратор. False — закрой и открой заново с правами.<br />
<pre><code class="language-powershell">
([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)
</code></pre>
<h2>Активация Windows 11 через PowerShell</h2>
<h3>Шаг 1. Проверь текущий статус лицензии</h3>
<p>Сначала смотри что есть. Бывает, Windows уже активирована — просто слетело отображение. Или ключ введён, но активация не прошла. Это разные ситуации с разными решениями.</p>
<pre><code class="language-powershell">
slmgr /xpr
</code></pre>
<p>Появится всплывающее окно. Три варианта ответа:</p>
<ul>
<li>«Срок действия лицензии этого компьютера истекает…» — KMS-активация, всё нормально</li>
<li>«Постоянно активирована» — MAK-ключ, всё хорошо</li>
<li>«Льготный период» или «не активирована» — нужна активация</li>
</ul>
<p>Хочешь текстовый вывод без всплывашки — используй другую команду:</p>
<pre><code class="language-powershell">
slmgr /dli
</code></pre>
<p>Покажет: описание лицензии, последние 5 символов ключа, статус активации. Удобно для скриптов — результат можно парсить.</p>
<p>Полный отчёт со всеми деталями:</p>
<pre><code class="language-powershell">
slmgr /dlv
</code></pre>
<h3>Шаг 2. Введи лицензионный ключ</h3>
<p>Если ключа нет в системе или нужно заменить существующий:</p>
<pre><code class="language-powershell">
slmgr /ipk XXXXX-XXXXX-XXXXX-XXXXX-XXXXX
</code></pre>
<p>Замени X на свой ключ. Формат: пять групп по пять символов через дефис. Пробелы не нужны.</p>
<p>После выполнения появится окно «Ключ продукта успешно установлен». Если окно не появилось — что-то пошло не так, смотри Troubleshooting.</p>
<h3>Шаг 3. Запусти активацию</h3>
<pre><code class="language-powershell">
slmgr /ato
</code></pre>
<p>Система обратится к серверам Microsoft и попробует активировать ключ. Если всё хорошо — появится «Продукт успешно активирован». Если нет — код ошибки. Коды разбираются в разделе Troubleshooting.</p>
<h3>Шаг 4. Проверь результат</h3>
<pre><code class="language-powershell">
slmgr /xpr
</code></pre>
<p>Должно показать «Постоянно активирована» для <a href="https://it-apteka.com/vamt-volume-activation-management-tool/" title="VAMT (Volume Activation Management Tool): централизованное управление MAK и KMS активациями в домене" target="_blank" rel="noopener" data-wpil-monitor-id="1695">MAK или дату следующей активации для KMS</a>.</p>
<h3>Таблица ключевых команд slmgr</h3>
<table style="border-collapse: collapse; width: 100%;" border="1" cellspacing="0" cellpadding="8">
<thead>
<tr style="background: #f1f5f9;">
<th>Команда</th>
<th>Что делает</th>
<th>Когда использовать</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>slmgr /xpr</code></td>
<td>Показывает статус и срок активации</td>
<td>Первичная проверка</td>
</tr>
<tr>
<td><code>slmgr /dli</code></td>
<td>Краткая информация о лицензии</td>
<td>Скрипты, диагностика</td>
</tr>
<tr>
<td><code>slmgr /dlv</code></td>
<td>Полная информация о лицензии</td>
<td>Детальная диагностика</td>
</tr>
<tr>
<td><code>slmgr /ipk КЛЮЧ</code></td>
<td>Устанавливает ключ продукта</td>
<td>Ввод нового ключа</td>
</tr>
<tr>
<td><code>slmgr /ato</code></td>
<td>Запускает онлайн-активацию</td>
<td>После ввода ключа</td>
</tr>
<tr>
<td><code>slmgr /cpky</code></td>
<td>Удаляет ключ из реестра</td>
<td>Перед передачей машины</td>
</tr>
<tr>
<td><code>slmgr /upk</code></td>
<td>Удаляет установленный ключ</td>
<td>Смена ключа</td>
</tr>
<tr>
<td><code>slmgr /skms СЕРВЕР</code></td>
<td>Задаёт KMS-сервер вручную</td>
<td>Корпоративные сети</td>
</tr>
<tr>
<td><code>slmgr /ckms</code></td>
<td>Сбрасывает KMS-сервер на автообнаружение</td>
<td>После ручной настройки</td>
</tr>
<tr>
<td><code>slmgr /rearm</code></td>
<td>Сбрасывает счётчик льготного периода</td>
<td>Временное решение без ключа</td>
</tr>
</tbody>
</table>
<h3>Активация через KMS-сервер в корпоративной сети</h3>
<p>Если работаешь в домене — сервер должен обнаружиться автоматически через <a class="wpil_keyword_link" href="https://it-apteka.com/tag/dns/" target="_blank" rel="noopener" title="DNS" data-wpil-keyword-link="linked" data-wpil-monitor-id="1703">DNS</a>. Но бывает что нужно указать вручную:</p>
<pre><code class="language-powershell">
# Указываем KMS-сервер и порт (по умолчанию 1688)
slmgr /skms kms.company.local:1688
# Запускаем активацию
slmgr /ato
# Проверяем результат
slmgr /xpr
</code></pre>
<p>Где kms.company.local — замени на имя своего KMS-сервера. Уточни у <a href="https://it-apteka.com/nslookup-i-dig-diagnostika-dns-dlja-sistemnogo-administratora/" title="nslookup и dig — диагностика DNS для системного администратора" target="_blank" rel="noopener" data-wpil-monitor-id="1694">системного администратора или проверь через nslookup</a> _vlmcs._tcp.</p>
<h2>Активация Office через PowerShell</h2>
<p>Office живёт по своим правилам. Его активация идёт через отдельный <a href="https://it-apteka.com/zapusk-skripta-ustanovki-microsoft-directx-net-framework-i-vc-v-steam-chto-jeto-i-kak-ispravit-zavisanie/" title="Запуск скрипта установки Microsoft DirectX, .NET Framework и VC++ в Steam — что это и как исправить зависание" target="_blank" rel="noopener" data-wpil-monitor-id="1697">скрипт ospp.vbs который лежит в папке установки</a>.</p>
<h3>Шаг 1. Найди папку установки Office</h3>
<p>Путь зависит от версии и разрядности:</p>
<table style="border-collapse: collapse; width: 100%;" border="1" cellspacing="0" cellpadding="8">
<thead>
<tr style="background: #f1f5f9;">
<th>Версия Office</th>
<th>Путь</th>
</tr>
</thead>
<tbody>
<tr>
<td>Office 2016/2019/2021 (64-бит)</td>
<td>C:\Program Files\Microsoft Office\Office16</td>
</tr>
<tr>
<td>Office 2016/2019/2021 (32-бит на 64-бит Windows)</td>
<td>C:\Program Files (x86)\Microsoft Office\Office16</td>
</tr>
<tr>
<td>Office 365 / Microsoft 365</td>
<td>C:\Program Files\Microsoft Office\Office16</td>
</tr>
<tr>
<td>Office 2013</td>
<td>C:\Program Files\Microsoft Office\Office15</td>
</tr>
</tbody>
</table>
<p>Если не уверен где стоит — найди автоматически через PowerShell:</p>
<pre><code class="language-powershell">
Get-ChildItem "C:\Program Files*\Microsoft Office" -Recurse -Filter "ospp.vbs" | Select-Object FullName
</code></pre>
<p>Команда просмотрит оба Program Files и вернёт полный путь к ospp.vbs.</p>
<h3>Шаг 2. Проверь текущий статус лицензии Office</h3>
<pre><code class="language-powershell">
# Переходим в папку Office
cd "C:\Program Files\Microsoft Office\Office16"
# Смотрим статус
cscript ospp.vbs /dstatus
</code></pre>
<p>В выводе ищи строки:</p>
<ul>
<li>LICENSE STATUS: —LICENSED— — всё активировано</li>
<li>LICENSE STATUS: —OOB_GRACE— — льготный период</li>
<li>LICENSE STATUS: —UNLICENSED— — не активировано</li>
</ul>
<h3>Шаг 3. Введи ключ и активируй</h3>
<pre><code class="language-powershell">
# Вводим ключ (замени XXXXX на свой)
cscript ospp.vbs /inpkey:XXXXX-XXXXX-XXXXX-XXXXX-XXXXX
# Запускаем активацию
cscript ospp.vbs /act
</code></pre>
<p>После /act должно появиться «Product activation successful». Если нет — смотри Troubleshooting.</p>
<h3>Шаг 4. Проверь активацию</h3>
<pre><code class="language-powershell">
cscript ospp.vbs /dstatus
</code></pre>
<h3>Активация Office через KMS</h3>
<p>Для корпоративных установок через KMS-сервер:</p>
<pre><code class="language-powershell">
# Указываем KMS-сервер
cscript ospp.vbs /sethst:kms.company.local
# Указываем порт (по умолчанию 1688, можно пропустить)
cscript ospp.vbs /setprt:1688
# Запускаем активацию
cscript ospp.vbs /act
# Проверяем
cscript ospp.vbs /dstatus
</code></pre>
<h3>Таблица команд ospp.vbs</h3>
<table style="border-collapse: collect; width: 100%;" border="1" cellspacing="0" cellpadding="8">
<thead>
<tr style="background: #f1f5f9;">
<th>Команда</th>
<th>Что делает</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>/dstatus</code></td>
<td>Статус лицензий всех продуктов Office</td>
</tr>
<tr>
<td><code>/inpkey:КЛЮЧ</code></td>
<td>Устанавливает ключ продукта</td>
</tr>
<tr>
<td><code>/unpkey:XXXXX</code></td>
<td>Удаляет ключ (последние 5 символов)</td>
</tr>
<tr>
<td><code>/act</code></td>
<td>Запускает активацию</td>
</tr>
<tr>
<td><code>/sethst:СЕРВЕР</code></td>
<td>Задаёт KMS-хост</td>
</tr>
<tr>
<td><code>/setprt:ПОРТ</code></td>
<td>Задаёт порт KMS (по умолчанию 1688)</td>
</tr>
<tr>
<td><code>/remhst</code></td>
<td>Удаляет настроенный KMS-хост</td>
</tr>
<tr>
<td><code>/dinstid</code></td>
<td>Показывает Installation ID для телефонной активации</td>
</tr>
<tr>
<td><code>/actcid:КОД</code></td>
<td>Вводит Confirmation ID для телефонной активации</td>
</tr>
</tbody>
</table>
<h2>Готовые скрипты PowerShell</h2>
<p>Вот тут — самое полезное. Если нужно активировать больше одной машины или автоматизировать процесс — эти скрипты сэкономят время.</p>
<h3>Скрипт 1: Проверка и активация Windows</h3>
<pre><code class="language-powershell">
# Скрипт: активация Windows 11 через PowerShell
# Запускать от имени администратора
param(
[string]$ProductKey = ""
)
function Write-Status {
param([string]$Message, [string]$Color = "White")
Write-Host "[$(Get-Date -Format 'HH:mm:ss')] $Message" -ForegroundColor $Color
}
# Проверка прав администратора
$isAdmin = ([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)
if (-not $isAdmin) {
Write-Status "Ошибка: запусти скрипт от имени администратора" "Red"
exit 1
}
Write-Status "Проверяем текущий статус лицензии..." "Cyan"
# Получаем статус без всплывающего окна
$licenseStatus = (Get-WmiObject SoftwareLicensingProduct -Filter "Name like 'Windows%'" | Where-Object { $_.PartialProductKey } | Select-Object -First 1).LicenseStatus
switch ($licenseStatus) {
0 { $statusText = "Не активирована" }
1 { $statusText = "Активирована" }
2 { $statusText = "OOB Grace Period" }
3 { $statusText = "OOT Grace Period" }
4 { $statusText = "Non-Genuine Grace Period" }
5 { $statusText = "Notification" }
6 { $statusText = "Extended Grace Period" }
default { $statusText = "Неизвестный статус: $licenseStatus" }
}
Write-Status "Текущий статус: $statusText" "Yellow"
if ($licenseStatus -eq 1) {
Write-Status "Windows уже активирована. Ничего делать не нужно." "Green"
exit 0
}
# Если передан ключ - устанавливаем его
if ($ProductKey -ne "") {
Write-Status "Устанавливаем ключ продукта..." "Cyan"
$result = cscript //nologo C:\Windows\System32\slmgr.vbs /ipk $ProductKey 2>&1
Write-Status $result "White"
}
# Запускаем активацию
Write-Status "Запускаем активацию..." "Cyan"
$activationResult = cscript //nologo C:\Windows\System32\slmgr.vbs /ato 2>&1
Write-Status $activationResult "White"
# Финальная проверка
$finalStatus = (Get-WmiObject SoftwareLicensingProduct -Filter "Name like 'Windows%'" | Where-Object { $_.PartialProductKey } | Select-Object -First 1).LicenseStatus
if ($finalStatus -eq 1) {
Write-Status "Активация прошла успешно!" "Green"
} else {
Write-Status "Активация не удалась. Статус: $finalStatus" "Red"
exit 1
}
</code></pre>
<p>Использование:</p>
<pre><code class="language-powershell">
# Просто проверить и активировать с текущим ключом
.\activate-windows.ps1
# С передачей нового ключа
.\activate-windows.ps1 -ProductKey "XXXXX-XXXXX-XXXXX-XXXXX-XXXXX"
</code></pre>
<h3>Скрипт 2: Проверка и активация Office</h3>
<pre><code class="language-powershell">
# Скрипт: активация Microsoft Office через PowerShell
# Запускать от имени администратора
param(
[string]$OfficeKey = ""
)
# Ищем ospp.vbs автоматически
$osppPaths = @(
"C:\Program Files\Microsoft Office\Office16\ospp.vbs",
"C:\Program Files (x86)\Microsoft Office\Office16\ospp.vbs",
"C:\Program Files\Microsoft Office\Office15\ospp.vbs",
"C:\Program Files (x86)\Microsoft Office\Office15\ospp.vbs"
)
$osppPath = $null
foreach ($path in $osppPaths) {
if (Test-Path $path) {
$osppPath = $path
break
}
}
if (-not $osppPath) {
# Пробуем найти через поиск
$found = Get-ChildItem "C:\Program Files*\Microsoft Office" -Recurse -Filter "ospp.vbs" -ErrorAction SilentlyContinue | Select-Object -First 1
if ($found) {
$osppPath = $found.FullName
}
}
if (-not $osppPath) {
Write-Host "Ошибка: ospp.vbs не найден. Office установлен?" -ForegroundColor Red
exit 1
}
Write-Host "Найден ospp.vbs: $osppPath" -ForegroundColor Cyan
# Показываем текущий статус
Write-Host "Проверяем статус лицензии Office..." -ForegroundColor Cyan
cscript //nologo $osppPath /dstatus
# Если передан ключ - устанавливаем
if ($OfficeKey -ne "") {
Write-Host "Устанавливаем ключ Office..." -ForegroundColor Cyan
cscript //nologo $osppPath /inpkey:$OfficeKey
}
# Активируем
Write-Host "Запускаем активацию Office..." -ForegroundColor Cyan
cscript //nologo $osppPath /act
# Финальный статус
Write-Host "Проверяем результат..." -ForegroundColor Cyan
cscript //nologo $osppPath /dstatus
</code></pre>
<h3>Скрипт 3: Активация и Windows, и Office за один запуск</h3>
<pre><code class="language-powershell">
# Комплексная активация: Windows + Office
# Запускать от имени администратора
$ErrorActionPreference = "Continue"
$timestamp = Get-Date -Format "yyyy-MM-dd_HH-mm"
$logFile = "$env:TEMP\activation_log_$timestamp.txt"
function Log {
param([string]$msg, [string]$color = "White")
$line = "[$(Get-Date -Format 'HH:mm:ss')] $msg"
Write-Host $line -ForegroundColor $color
Add-Content $logFile $line
}
# Проверка администратора
$isAdmin = ([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)
if (-not $isAdmin) {
Log "Нужны права администратора" "Red"
exit 1
}
Log "=== Начало активации ===" "Cyan"
# --- WINDOWS ---
Log "--- Windows ---" "Yellow"
$winStatus = (Get-WmiObject SoftwareLicensingProduct -Filter "Name like 'Windows%'" | Where-Object { $_.PartialProductKey } | Select-Object -First 1).LicenseStatus
if ($winStatus -eq 1) {
Log "Windows уже активирована" "Green"
} else {
Log "Запускаем активацию Windows..."
$result = cscript //nologo C:\Windows\System32\slmgr.vbs /ato 2>&1
Log $result
$newStatus = (Get-WmiObject SoftwareLicensingProduct -Filter "Name like 'Windows%'" | Where-Object { $_.PartialProductKey } | Select-Object -First 1).LicenseStatus
if ($newStatus -eq 1) {
Log "Windows активирована успешно" "Green"
} else {
Log "Windows активация не удалась (статус: $newStatus)" "Red"
}
}
# --- OFFICE ---
Log "--- Office ---" "Yellow"
$osppPath = Get-ChildItem "C:\Program Files*\Microsoft Office" -Recurse -Filter "ospp.vbs" -ErrorAction SilentlyContinue | Select-Object -First 1 -ExpandProperty FullName
if (-not $osppPath) {
Log "Office не найден, пропускаем" "Yellow"
} else {
Log "Папка Office: $osppPath"
$officeResult = cscript //nologo $osppPath /act 2>&1
Log $officeResult
$officeStatus = cscript //nologo $osppPath /dstatus 2>&1
if ($officeStatus -match "LICENSED") {
Log "Office активирован успешно" "Green"
} else {
Log "Office активация не удалась" "Red"
}
}
Log "=== Готово. Лог: $logFile ===" "Cyan"
</code></pre>
<h2>Проверка активации</h2>
<p>После активации всегда проверяй результат. Не верь на слово сообщению «активировано» — смотри сам.</p>
<h3>Проверка Windows</h3>
<pre><code class="language-powershell">
# Способ 1: всплывающее окно со статусом
slmgr /xpr
# Способ 2: через WMI, удобно для скриптов
Get-WmiObject SoftwareLicensingProduct -Filter "Name like 'Windows%'" | Where-Object { $_.PartialProductKey } | Select-Object Name, LicenseStatus, PartialProductKey
# LicenseStatus = 1 означает активирована
# Способ 3: через реестр
(Get-ItemProperty "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion").ProductName
(Get-ItemProperty "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion").RegisteredOwner
</code></pre>
<h3>Проверка Office</h3>
<pre><code class="language-powershell">
# Находим ospp.vbs и проверяем
$ospp = (Get-ChildItem "C:\Program Files*\Microsoft Office" -Recurse -Filter "ospp.vbs" -ErrorAction SilentlyContinue | Select-Object -First 1).FullName
cscript //nologo $ospp /dstatus
</code></pre>
<p>В выводе ищи строку LICENSE STATUS. Значение —LICENSED— означает что всё хорошо.</p>
<h3>Системные требования и совместимость</h3>
<table style="border-collapse: collapse; width: 100%;" border="1" cellspacing="0" cellpadding="8">
<thead>
<tr style="background: #f1f5f9;">
<th>Компонент</th>
<th>Требование</th>
<th>Примечание</th>
</tr>
</thead>
<tbody>
<tr>
<td>ОС</td>
<td>Windows 10/11 (все редакции)</td>
<td>Команды slmgr работают начиная с Vista</td>
</tr>
<tr>
<td>PowerShell</td>
<td>5.1 и выше</td>
<td>Встроен в Windows 10/11</td>
</tr>
<tr>
<td>Права</td>
<td>Локальный администратор</td>
<td>Обязательно, без вариантов</td>
</tr>
<tr>
<td>Office</td>
<td>2013, 2016, 2019, 2021, 365</td>
<td>ospp.vbs есть во всех версиях</td>
</tr>
<tr>
<td>Сеть</td>
<td>Доступ к <a href="https://it-apteka.com/1243-2/" title="Сервер активации Windows (KMS) в Docker: варианты развёртывания и интеграция с Active Directory" target="_blank" rel="noopener" data-wpil-monitor-id="1698">серверам Microsoft или KMS</a></td>
<td>Порт 1688 TCP для KMS, 80/443 для MAK</td>
</tr>
<tr>
<td>Windows Script Host</td>
<td>Должен быть включён</td>
<td>По умолчанию включён в Windows 11</td>
</tr>
</tbody>
</table>
<p>На момент публикации актуальны Windows 11 24H2 и Office 2021/Microsoft 365. Перед <a href="https://it-apteka.com/uptime-kuma-alerting-bez-zamorochek-dlja-admina-kotoryj-cenit-vremja/" title="Установка и настройка Uptime Kuma: self-hosted мониторинг сайтов за 5 минут" target="_blank" rel="noopener" data-wpil-monitor-id="1699">установкой проверь свежие релизы на сайте</a> Microsoft.</p>
<h3>Таблица портов</h3>
<table style="border-collapse: collapse; width: 100%;" border="1" cellspacing="0" cellpadding="8">
<thead>
<tr style="background: #f1f5f9;">
<th>Протокол/Порт</th>
<th>Направление</th>
<th>Назначение</th>
</tr>
</thead>
<tbody>
<tr>
<td>TCP 1688</td>
<td>Клиент -> KMS-сервер</td>
<td>KMS-активация Windows и Office</td>
</tr>
<tr>
<td>TCP 80</td>
<td>Клиент -> Microsoft</td>
<td>MAK-активация через HTTP</td>
</tr>
<tr>
<td>TCP 443</td>
<td>Клиент -> Microsoft</td>
<td>MAK-активация через HTTPS</td>
</tr>
<tr>
<td>UDP 53</td>
<td>Клиент -> DNS</td>
<td>Обнаружение KMS через DNS SRV записи</td>
</tr>
</tbody>
</table>
<h2>Troubleshooting: ошибки и их решения</h2>
<p>Вот где большинство статей заканчивается и начинается реальная жизнь. Разберём самые частые ошибки.</p>
<h3>Ошибка 0xC004F074 — сервер активации недоступен</h3>
"Ошибка
<br />
Сообщение: The Key Management Service (KMS) is unavailable. Означает что клиент не может достучаться до KMS-сервера.<br />
<p>Проверяй по порядку:</p>
<pre><code class="language-powershell">
# 1. Проверяем DNS-запись KMS
nslookup -type=srv _vlmcs._tcp
# 2. Проверяем доступность KMS-сервера (замени kms.company.local)
Test-NetConnection -ComputerName kms.company.local -Port 1688
# 3. Проверяем какой KMS настроен сейчас
slmgr /dlv | findstr "KMS"
# 4. Если нужно - задаём KMS вручную
slmgr /skms kms.company.local:1688
slmgr /ato
</code></pre>
<p>Если Test-NetConnection возвращает TcpTestSucceeded: False — проблема в сети или файрволе. Порт 1688 TCP должен быть открыт между клиентом и KMS-сервером.</p>
<h3>Ошибка 0x8007007B — неверный формат имени</h3>
"Ошибка
<br />
Сообщение: The filename, directory name, or volume label syntax is incorrect. Обычно это ключ в неверном формате или лишние символы.<br />
<pre><code class="language-powershell">
# Проверяем: ключ должен быть строго в формате XXXXX-XXXXX-XXXXX-XXXXX-XXXXX
# Убираем пробелы и лишние символы
$key = "XXXXX-XXXXX-XXXXX-XXXXX-XXXXX"
$key = $key.Trim()
$key = $key -replace "\s+", ""
slmgr /ipk $key
</code></pre>
<h3>Ошибка 0xC004C008 — ключ уже использован максимальное количество раз</h3>
"Ошибка
<br />
MAK-ключ исчерпал лимит активаций. Нужно либо получить новый ключ, либо позвонить в Microsoft для сброса.<br />
<p>Варианты выхода:</p>
<ul>
<li>Телефонная активация: <code>slmgr /dti</code> — получишь Installation ID, затем звонишь в Microsoft и получаешь Confirmation ID</li>
<li>Использовать другой ключ</li>
<li>Если корпоративная лицензия — обратиться к Volume Licensing Service Center</li>
</ul>
<pre><code class="language-powershell">
# Получаем Installation ID для телефонной активации
slmgr /dti
</code></pre>
<h3>Ошибка 0xC004E003 — сбой программного лицензирования</h3>
<pre><code class="language-powershell">
# Сбрасываем и перезапускаем службу лицензирования
Stop-Service -Name sppsvc -Force
Start-Service -Name sppsvc
# Ждём секунду и пробуем снова
Start-Sleep -Seconds 2
slmgr /ato
</code></pre>
<h3>Ошибка 0x8007232B — DNS не содержит записи типа ресурса KMS</h3>
"Ошибка
<br />
<a href="https://it-apteka.com/dns-over-https-nastrojka-doh-v-windows-brauzerah-keenetic/" target="_blank" rel="noopener" data-wpil-monitor-id="1761">Windows пытается найти KMS через DNS</a> и не находит. Типично для домашних компьютеров с корпоративными ключами, или для KMS-ключей на машинах без KMS-инфраструктуры.<br />
<pre><code class="language-powershell">
# Если у тебя MAK-ключ а не KMS - просто укажи это
# Сначала убираем KMS-настройки
slmgr /ckms
# Затем активируем напрямую через Microsoft
slmgr /ato
</code></pre>
<h3>PowerShell не может выполнить скрипт — ошибка политики выполнения</h3>
<p>Если получаешь «невозможно загрузить файл, так как выполнение скриптов отключено»:</p>
<pre><code class="language-powershell">
# Проверяем текущую политику
Get-ExecutionPolicy
# Разрешаем выполнение скриптов для текущего пользователя
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
# Или на один запуск через обход политики
powershell -ExecutionPolicy Bypass -File .\activate.ps1
</code></pre>
"Безопасность
<br />
Не устанавливай Unrestricted глобально на продакшн-системах. RemoteSigned для CurrentUser — разумный компромисс: локальные скрипты работают, загруженные из интернета требуют подписи.<br />
<h3>ospp.vbs не найден</h3>
<pre><code class="language-powershell">
# Ищем по всем дискам
Get-PSDrive -PSProvider FileSystem | ForEach-Object {
Get-ChildItem "$($_.Root)Program Files*\Microsoft Office" -Recurse -Filter "ospp.vbs" -ErrorAction SilentlyContinue
}
</code></pre>
<h3>Ошибка «Windows Script Host отключён»</h3>
<pre><code class="language-powershell">
# Проверяем статус WSH
$wsh = Get-ItemProperty "HKLM:\SOFTWARE\Microsoft\Windows Script Host\Settings" -ErrorAction SilentlyContinue
if ($wsh.Enabled -eq 0) {
# Включаем WSH
Set-ItemProperty "HKLM:\SOFTWARE\Microsoft\Windows Script Host\Settings" -Name "Enabled" -Value 1
Write-Host "WSH включён" -ForegroundColor Green
}
</code></pre>
<h2>Альтернативные варианты активации</h2>
<p>PowerShell + slmgr — не единственный путь. Вот что ещё есть:</p>
<h3>Через GUI (Параметры Windows)</h3>
<p>Пуск — Параметры — Система — Активация. Там же можно ввести ключ и проверить статус. Удобно для одной машины, бесполезно для автоматизации.</p>
<h3>Телефонная активация</h3>
<p>Когда онлайн не работает. Получаешь Installation ID через <code>slmgr /dti</code>, звонишь по номеру который показывает мастер активации, получаешь Confirmation ID, вводишь через <code>slmgr /atp КОД</code>.</p>
<h3>DISM для образов Windows</h3>
<pre><code class="language-powershell">
# Для применения ключа к образу (например, при развёртывании)
DISM /Online /Set-Edition:Professional /ProductKey:XXXXX-XXXXX-XXXXX-XXXXX-XXXXX /AcceptEULA
</code></pre>
<h3>Windows ADK и KMS Activation Toolkit</h3>
<p>Для корпоративных развёртываний через MDT или SCCM — активация встраивается в задачи последовательности. Это отдельная тема, но slmgr-команды там те же, просто вызываются в другом контексте.</p>
<h2>Безопасность</h2>
"Раздел
<br />
Этот раздел не для галочки. Ошибки здесь стоят дороже чем ошибки в настройке активации.<br />
<p><strong>Ключи продукта — это деньги. Относись к ним соответственно:</strong></p>
<ul>
<li>Никогда не храни ключи в открытом виде в скриптах которые лежат в общем доступе</li>
<li>Не передавай ключи через мессенджеры и электронную почту в открытом виде</li>
<li>Для корпоративного использования — храни в защищённом хранилище (KeePass, CyberArk, HashiCorp Vault)</li>
<li>Не покупай ключи на сомнительных сайтах — серые схемы, ключи слетают</li>
</ul>
<p><strong>Права доступа к скриптам:</strong></p>
<pre><code class="language-powershell">
# Ограничиваем доступ к скрипту с ключом
$acl = Get-Acl "C:\Scripts\activate.ps1"
$acl.SetAccessRuleProtection($true, $false)
# Добавляем только нужных пользователей
$rule = New-Object System.Security.AccessControl.FileSystemAccessRule("DOMAIN\SysAdmins","FullControl","Allow")
$acl.AddAccessRule($rule)
Set-Acl "C:\Scripts\activate.ps1" $acl
</code></pre>
<p><strong>Логирование активаций:</strong></p>
<pre><code class="language-powershell">
# Записываем кто и когда запустил активацию
$logEntry = "$(Get-Date) | $env:USERNAME | $env:COMPUTERNAME | Activation attempt"
Add-Content "\\server\logs\activations.log" $logEntry
</code></pre>
<h2>Профилактика: как не попасть в эту ситуацию снова</h2>
<p>Слетевшая активация — это или истёкший KMS (не достучался до сервера 180 дней), или переустановка системы, или замена железа. Каждый из этих случаев предсказуем.</p>
<p><strong>Мониторинг статуса активации:</strong></p>
<pre><code class="language-powershell">
# Скрипт для проверки статуса (запускать через Task Scheduler раз в неделю)
$status = (Get-WmiObject SoftwareLicensingProduct -Filter "Name like 'Windows%'" | Where-Object { $_.PartialProductKey } | Select-Object -First 1).LicenseStatus
if ($status -ne 1) {
# Отправляем уведомление
Send-MailMessage -To "admin@company.local" -From "monitoring@company.local" -Subject "ALERT: Активация Windows слетела на $env:COMPUTERNAME" -SmtpServer "mail.company.local"
}
</code></pre>
<p><strong>Автозапуск активации при старте системы:</strong></p>
<pre><code class="language-powershell">
# Создаём задачу в планировщике: проверяем и активируем при каждом входе
$action = New-ScheduledTaskAction -Execute "powershell.exe" -Argument "-NoProfile -ExecutionPolicy Bypass -Command `"slmgr /ato`""
$trigger = New-ScheduledTaskTrigger -AtLogOn
$settings = New-ScheduledTaskSettingsSet -RunOnlyIfNetworkAvailable
Register-ScheduledTask -TaskName "Windows Activation Check" -Action $action -Trigger $trigger -Settings $settings -RunLevel Highest -Force
</code></pre>
<p><strong>Резервная копия ключа перед переустановкой:</strong></p>
<pre><code class="language-powershell">
# Смотрим частичный ключ (последние 5 символов)
slmgr /dli
# Для получения полного OEM-ключа (если зашит в BIOS/UEFI)
(Get-WmiObject -Query "SELECT OA3xOriginalProductKey FROM SoftwareLicensingService").OA3xOriginalProductKey
# Сохраняем информацию о лицензии
slmgr /dlv > "C:\Backup\license_info_$(Get-Date -Format 'yyyyMMdd').txt"
</code></pre>
<p><strong>Для KMS-среды — проверяй счётчик клиентов:</strong></p>
<pre><code class="language-powershell">
# На KMS-сервере: смотрим сколько клиентов подключилось
slmgr /dli
# Нужно минимум 25 клиентов Windows или 5 клиентов Office для запуска KMS
</code></pre>
<h2>Обновление Windows и Office: что проверить</h2>
"Перед
<br />
Feature Update (например, 22H2 до 24H2) иногда сбрасывает активацию. Сохрани вывод slmgr /dlv перед обновлением. После обновления проверь статус. Если слетело — slmgr /ato обычно восстанавливает без ввода ключа.<br />
<pre><code class="language-powershell">
# До обновления: сохраняем состояние
slmgr /dlv > "$env:USERPROFILE\Desktop\before_update_license.txt"
# После обновления: проверяем
slmgr /xpr
# Если слетело - восстанавливаем
slmgr /ato
</code></pre>
<p>Для Office — обновления через Microsoft Update как правило не затрагивают активацию. Но если переходишь с Office 2019 на Office 2021 — это уже переустановка со своим ключом.</p>
<pre><code class="language-powershell">
# Откат активации Office если что-то пошло не так
# Смотрим установленные ключи
$ospp = (Get-ChildItem "C:\Program Files*\Microsoft Office" -Recurse -Filter "ospp.vbs" -ErrorAction SilentlyContinue | Select-Object -First 1).FullName
cscript //nologo $ospp /dstatus
# Удаляем конкретный ключ по последним 5 символам
cscript //nologo $ospp /unpkey:XXXXX
# Вводим и активируем заново
cscript //nologo $ospp /inpkey:НОВЫЙ-КЛЮЧ-ЗДЕСЬ
cscript //nologo $ospp /act
</code></pre>
<h2>FAQ</h2>
<h3>Почему PowerShell не запускает slmgr и пишет «не является внутренней или внешней командой»?</h3>
<p>slmgr.vbs — это VBScript, а не исполняемый файл. PowerShell запускает его через cscript или через прямой вызов. Правильный вариант:</p>
<pre><code class="language-powershell">
# Через cscript
cscript //nologo C:\Windows\System32\slmgr.vbs /ato
# Или напрямую (PowerShell вызывает через wscript)
slmgr /ato
</code></pre>
<p>Если slmgr /ato не работает — Windows Script Host может быть отключён. Смотри раздел Troubleshooting выше.</p>
<h3>Как проверить срок действия KMS-активации через PowerShell без всплывающего окна?</h3>
<pre><code class="language-powershell">
$product = Get-WmiObject SoftwareLicensingProduct -Filter "Name like 'Windows%'" | Where-Object { $_.PartialProductKey }
$expiry = [datetime]::FromFileTime($product.LicenseExpirationDate)
Write-Host "Статус лицензии: $($product.LicenseStatus)"
Write-Host "Истекает: $expiry"
</code></pre>
<p>LicenseStatus = 1 означает активна. Дата истечения для KMS будет примерно через 180 дней от последней активации.</p>
<h3>Что если slmgr /ato показывает успех, но Windows всё равно показывает «не активирована»?</h3>
<p>Три варианта:</p>
<ul>
<li>Кешированный статус в интерфейсе — перезагрузи компьютер</li>
<li>Активация прошла для другой редакции — проверь через <code>slmgr /dlv</code> что ключ соответствует установленной редакции (Home, Pro, Enterprise)</li>
<li>Служба лицензирования зависла — перезапусти <code>Stop-Service sppsvc; Start-Service sppsvc</code></li>
</ul>
<h3>Можно ли активировать Office 365 через ospp.vbs?</h3>
<p>Зависит от типа лицензии. Если это Microsoft 365 Apps for Enterprise (корпоративная подписка через Volume Licensing) — да, ospp.vbs работает с KMS или MAK. Если это персональная подписка Microsoft 365 — активация только через учётную запись Microsoft, ospp.vbs не подходит.</p>
<h3>Как активировать Windows 11 без ключа через PowerShell?</h3>
<p>Без ключа и без KMS-сервера полноценная активация невозможна. Команда <code>slmgr /rearm</code> сбрасывает 30-дневный льготный период (до 3 раз), но это временное решение, а не активация. Для получения лицензии — купи ключ в Microsoft Store или используй корпоративный KMS.</p>
<h3>Как запустить скрипт активации на удалённом компьютере через PowerShell?</h3>
<pre><code class="language-powershell">
# Активация на удалённой машине
Invoke-Command -ComputerName PC-Name -ScriptBlock {
slmgr /ato
} -Credential (Get-Credential)
# Или для нескольких машин сразу
$computers = @("PC001", "PC002", "PC003")
Invoke-Command -ComputerName $computers -ScriptBlock {
$result = cscript //nologo C:\Windows\System32\slmgr.vbs /ato 2>&1
[PSCustomObject]@{
Computer = $env:COMPUTERNAME
Result = $result
}
} | Format-Table -AutoSize
</code></pre>
<p>WinRM должен быть включён на целевых машинах. Для включения: <code>Enable-PSRemoting -Force</code> на каждой машине или через GPO.</p>
<h2>Что в итоге</h2>
<p>Разобрались с механикой активации — slmgr для Windows, ospp.vbs для Office, KMS для корпоративных сред. Три готовых <a href="https://it-apteka.com/powershell-skripty-v-windows-kak-sozdat-zapustit-i-avtomatizirovat-vypolnenie/" title="PowerShell скрипты в Windows: как создать, запустить и автоматизировать выполнение" target="_blank" rel="noopener" data-wpil-monitor-id="1700">скрипта которые можно запустить</a> прямо сейчас. Таблица ошибок с командами лечения — от 0xC004F074 до зависшего WSH.</p>
<p>Главное что нужно помнить: активация через PowerShell — это не магия. Это те же механизмы что работают под графическим интерфейсом, просто через командную строку. Понимая что делает каждая команда — ты не просто копируешь строчки, а управляешь системой. Это разница между «оно заработало» и «я знаю почему заработало».</p>
"Не
<br />
Если после всех шагов активация не прошла — напиши в комментариях: код ошибки, версию Windows, MAK или KMS. Разберёмся по конкретной ситуации.<br />
Коротко: что делать прямо сейчас
Открой PowerShell от имени администратора. Для Windows — запусти slmgr /ato. Для Office — перейди в папку установки и запусти cscript ospp.vbs /act. Если получаешь ошибку — смотри раздел Troubleshooting ниже, там все разобрано по кодам.
Диагноз: зачем вообще это нужно
Получил новую машину. Windows 11 стоит, но в правом нижнем углу красуется «Активируйте Windows». Office открывается — и сразу лезет окно с предложением купить подписку. Знакомо?
Графический интерфейс — это хорошо, когда делаешь одну машину руками. Когда нужно прогнать активацию на 20 рабочих станциях или воспроизвести процесс без кликов, PowerShell — единственный нормальный вариант.
В этой статье разберём всё: как работает активация через командную строку, какие команды за что отвечают, как написать скрипт который не падает, и что делать когда всё-таки падает. На выходе получишь рабочий набор команд который можно копировать и использовать.
Времени займёт 15-20 минут на первый раз. Потом — минута на машину.
Что потребуется:
- Windows 11 (Home, Pro, Enterprise)
- PowerShell 5.1 или выше — уже встроен в систему
- Права администратора
- Лицензионный ключ или доступ к KMS-серверу
- Для Office: установленный пакет Office 2016/2019/2021/365
Что будет в статье:
- Как запустить PowerShell правильно
- Команды активации Windows через slmgr
- Команды активации Office через ospp.vbs
- Проверка статуса лицензии
- Готовые скрипты для автоматизации
- Troubleshooting по кодам ошибок
- FAQ
Как устроена активация Windows: коротко про механику
Прежде чем давать команды — одна минута теории. Иначе будешь бездумно копировать строки и не понимать что происходит. А потом удивляться ошибкам.
Windows использует два основных способа активации:
- MAK (Multiple Activation Key) — один ключ, активация через серверы Microsoft напрямую. Каждая активация «сжигает» одну квоту из общего пула. Подходит для небольшого числа машин или для домашних пользователей.
- KMS (Key Management Service) — корпоративный вариант. Внутри сети стоит KMS-сервер, машины обращаются к нему каждые 180 дней. Без доступа к серверу активация слетает. Используется в доменных средах.
За всё это отвечает инструмент slmgr.vbs — скрипт Windows Script Host, который управляет лицензированием. PowerShell запускает его через cscript или вызывает напрямую. Результат одинаковый.
Office — отдельная история. У него свой механизм и свой инструмент — ospp.vbs. Он лежит в папке установки Office. Принципы те же: MAK или KMS, но работает независимо от Windows.
%%{init: {
'theme': 'base',
'themeVariables': {
'primaryColor': '#ffffff',
'primaryTextColor': '#1e293b',
'primaryBorderColor': '#94a3b8',
'lineColor': '#64748b',
'fontSize': '15px',
'fontFamily': 'ui-sans-serif, system-ui, sans-serif'
},
'flowchart': {'curve': 'linear', 'nodeSpacing': 50, 'rankSpacing': 50}
}}%%
flowchart TD
A["PowerShell (Admin)"] --> B["slmgr.vbs"]
A --> C["ospp.vbs"]
B --> D["Windows License Service"]
C --> E["Office License Service"]
D --> F["Microsoft KMS Server"]
D --> G["Microsoft MAK Server"]
E --> F
E --> G
style A fill:#f8fafc,stroke:#3b82f6,stroke-width:2px,color:#1e40af
style B fill:#f8fafc,stroke:#94a3b8,stroke-width:1px,color:#1e293b
style C fill:#f8fafc,stroke:#94a3b8,stroke-width:1px,color:#1e293b
style D fill:#f8fafc,stroke:#94a3b8,stroke-width:1px,color:#1e293b
style E fill:#f8fafc,stroke:#94a3b8,stroke-width:1px,color:#1e293b
style F fill:#f8fafc,stroke:#22c55e,stroke-width:2px,color:#15803d
style G fill:#f8fafc,stroke:#22c55e,stroke-width:2px,color:#15803d
Запуск PowerShell от имени администратора
Без прав администратора команды активации просто не выполнятся. Не ошибку дадут — именно не выполнятся, тихо или с невнятным отказом. Проверь это первым делом.
Три способа открыть PowerShell от администратора:
Способ 1 — через поиск: нажми Win, набери «PowerShell», в результатах кликни правой кнопкой — «Запуск от имени администратора».
Способ 2 — через Win+X: нажми Win+X — увидишь «Терминал (администратор)» или «Windows PowerShell (администратор)».
Способ 3 — из уже открытого PowerShell:
Start-Process powershell -Verb RunAs
Как проверить что запущен от администратора — в заголовке окна должно быть «Администратор: Windows PowerShell» или строка приглашения выглядит как PS C:\Windows\system32>.
Проверка прав одной командой
Выполни команду ниже. Если вернёт True — ты администратор. False — закрой и открой заново с правами.
([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)
Активация Windows 11 через PowerShell
Шаг 1. Проверь текущий статус лицензии
Сначала смотри что есть. Бывает, Windows уже активирована — просто слетело отображение. Или ключ введён, но активация не прошла. Это разные ситуации с разными решениями.
slmgr /xpr
Появится всплывающее окно. Три варианта ответа:
- «Срок действия лицензии этого компьютера истекает…» — KMS-активация, всё нормально
- «Постоянно активирована» — MAK-ключ, всё хорошо
- «Льготный период» или «не активирована» — нужна активация
Хочешь текстовый вывод без всплывашки — используй другую команду:
slmgr /dli
Покажет: описание лицензии, последние 5 символов ключа, статус активации. Удобно для скриптов — результат можно парсить.
Полный отчёт со всеми деталями:
slmgr /dlv
Шаг 2. Введи лицензионный ключ
Если ключа нет в системе или нужно заменить существующий:
slmgr /ipk XXXXX-XXXXX-XXXXX-XXXXX-XXXXX
Замени X на свой ключ. Формат: пять групп по пять символов через дефис. Пробелы не нужны.
После выполнения появится окно «Ключ продукта успешно установлен». Если окно не появилось — что-то пошло не так, смотри Troubleshooting.
Шаг 3. Запусти активацию
slmgr /ato
Система обратится к серверам Microsoft и попробует активировать ключ. Если всё хорошо — появится «Продукт успешно активирован». Если нет — код ошибки. Коды разбираются в разделе Troubleshooting.
Шаг 4. Проверь результат
slmgr /xpr
Должно показать «Постоянно активирована» для MAK или дату следующей активации для KMS.
Таблица ключевых команд slmgr
| Команда |
Что делает |
Когда использовать |
slmgr /xpr |
Показывает статус и срок активации |
Первичная проверка |
slmgr /dli |
Краткая информация о лицензии |
Скрипты, диагностика |
slmgr /dlv |
Полная информация о лицензии |
Детальная диагностика |
slmgr /ipk КЛЮЧ |
Устанавливает ключ продукта |
Ввод нового ключа |
slmgr /ato |
Запускает онлайн-активацию |
После ввода ключа |
slmgr /cpky |
Удаляет ключ из реестра |
Перед передачей машины |
slmgr /upk |
Удаляет установленный ключ |
Смена ключа |
slmgr /skms СЕРВЕР |
Задаёт KMS-сервер вручную |
Корпоративные сети |
slmgr /ckms |
Сбрасывает KMS-сервер на автообнаружение |
После ручной настройки |
slmgr /rearm |
Сбрасывает счётчик льготного периода |
Временное решение без ключа |
Активация через KMS-сервер в корпоративной сети
Если работаешь в домене — сервер должен обнаружиться автоматически через DNS. Но бывает что нужно указать вручную:
# Указываем KMS-сервер и порт (по умолчанию 1688)
slmgr /skms kms.company.local:1688
# Запускаем активацию
slmgr /ato
# Проверяем результат
slmgr /xpr
Где kms.company.local — замени на имя своего KMS-сервера. Уточни у системного администратора или проверь через nslookup _vlmcs._tcp.
Активация Office через PowerShell
Office живёт по своим правилам. Его активация идёт через отдельный скрипт ospp.vbs который лежит в папке установки.
Шаг 1. Найди папку установки Office
Путь зависит от версии и разрядности:
| Версия Office |
Путь |
| Office 2016/2019/2021 (64-бит) |
C:\Program Files\Microsoft Office\Office16 |
| Office 2016/2019/2021 (32-бит на 64-бит Windows) |
C:\Program Files (x86)\Microsoft Office\Office16 |
| Office 365 / Microsoft 365 |
C:\Program Files\Microsoft Office\Office16 |
| Office 2013 |
C:\Program Files\Microsoft Office\Office15 |
Если не уверен где стоит — найди автоматически через PowerShell:
Get-ChildItem "C:\Program Files*\Microsoft Office" -Recurse -Filter "ospp.vbs" | Select-Object FullName
Команда просмотрит оба Program Files и вернёт полный путь к ospp.vbs.
Шаг 2. Проверь текущий статус лицензии Office
# Переходим в папку Office
cd "C:\Program Files\Microsoft Office\Office16"
# Смотрим статус
cscript ospp.vbs /dstatus
В выводе ищи строки:
- LICENSE STATUS: —LICENSED— — всё активировано
- LICENSE STATUS: —OOB_GRACE— — льготный период
- LICENSE STATUS: —UNLICENSED— — не активировано
Шаг 3. Введи ключ и активируй
# Вводим ключ (замени XXXXX на свой)
cscript ospp.vbs /inpkey:XXXXX-XXXXX-XXXXX-XXXXX-XXXXX
# Запускаем активацию
cscript ospp.vbs /act
После /act должно появиться «Product activation successful». Если нет — смотри Troubleshooting.
Шаг 4. Проверь активацию
cscript ospp.vbs /dstatus
Активация Office через KMS
Для корпоративных установок через KMS-сервер:
# Указываем KMS-сервер
cscript ospp.vbs /sethst:kms.company.local
# Указываем порт (по умолчанию 1688, можно пропустить)
cscript ospp.vbs /setprt:1688
# Запускаем активацию
cscript ospp.vbs /act
# Проверяем
cscript ospp.vbs /dstatus
Таблица команд ospp.vbs
| Команда |
Что делает |
/dstatus |
Статус лицензий всех продуктов Office |
/inpkey:КЛЮЧ |
Устанавливает ключ продукта |
/unpkey:XXXXX |
Удаляет ключ (последние 5 символов) |
/act |
Запускает активацию |
/sethst:СЕРВЕР |
Задаёт KMS-хост |
/setprt:ПОРТ |
Задаёт порт KMS (по умолчанию 1688) |
/remhst |
Удаляет настроенный KMS-хост |
/dinstid |
Показывает Installation ID для телефонной активации |
/actcid:КОД |
Вводит Confirmation ID для телефонной активации |
Готовые скрипты PowerShell
Вот тут — самое полезное. Если нужно активировать больше одной машины или автоматизировать процесс — эти скрипты сэкономят время.
Скрипт 1: Проверка и активация Windows
# Скрипт: активация Windows 11 через PowerShell
# Запускать от имени администратора
param(
[string]$ProductKey = ""
)
function Write-Status {
param([string]$Message, [string]$Color = "White")
Write-Host "[$(Get-Date -Format 'HH:mm:ss')] $Message" -ForegroundColor $Color
}
# Проверка прав администратора
$isAdmin = ([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)
if (-not $isAdmin) {
Write-Status "Ошибка: запусти скрипт от имени администратора" "Red"
exit 1
}
Write-Status "Проверяем текущий статус лицензии..." "Cyan"
# Получаем статус без всплывающего окна
$licenseStatus = (Get-WmiObject SoftwareLicensingProduct -Filter "Name like 'Windows%'" | Where-Object { $_.PartialProductKey } | Select-Object -First 1).LicenseStatus
switch ($licenseStatus) {
0 { $statusText = "Не активирована" }
1 { $statusText = "Активирована" }
2 { $statusText = "OOB Grace Period" }
3 { $statusText = "OOT Grace Period" }
4 { $statusText = "Non-Genuine Grace Period" }
5 { $statusText = "Notification" }
6 { $statusText = "Extended Grace Period" }
default { $statusText = "Неизвестный статус: $licenseStatus" }
}
Write-Status "Текущий статус: $statusText" "Yellow"
if ($licenseStatus -eq 1) {
Write-Status "Windows уже активирована. Ничего делать не нужно." "Green"
exit 0
}
# Если передан ключ - устанавливаем его
if ($ProductKey -ne "") {
Write-Status "Устанавливаем ключ продукта..." "Cyan"
$result = cscript //nologo C:\Windows\System32\slmgr.vbs /ipk $ProductKey 2>&1
Write-Status $result "White"
}
# Запускаем активацию
Write-Status "Запускаем активацию..." "Cyan"
$activationResult = cscript //nologo C:\Windows\System32\slmgr.vbs /ato 2>&1
Write-Status $activationResult "White"
# Финальная проверка
$finalStatus = (Get-WmiObject SoftwareLicensingProduct -Filter "Name like 'Windows%'" | Where-Object { $_.PartialProductKey } | Select-Object -First 1).LicenseStatus
if ($finalStatus -eq 1) {
Write-Status "Активация прошла успешно!" "Green"
} else {
Write-Status "Активация не удалась. Статус: $finalStatus" "Red"
exit 1
}
Использование:
# Просто проверить и активировать с текущим ключом
.\activate-windows.ps1
# С передачей нового ключа
.\activate-windows.ps1 -ProductKey "XXXXX-XXXXX-XXXXX-XXXXX-XXXXX"
Скрипт 2: Проверка и активация Office
# Скрипт: активация Microsoft Office через PowerShell
# Запускать от имени администратора
param(
[string]$OfficeKey = ""
)
# Ищем ospp.vbs автоматически
$osppPaths = @(
"C:\Program Files\Microsoft Office\Office16\ospp.vbs",
"C:\Program Files (x86)\Microsoft Office\Office16\ospp.vbs",
"C:\Program Files\Microsoft Office\Office15\ospp.vbs",
"C:\Program Files (x86)\Microsoft Office\Office15\ospp.vbs"
)
$osppPath = $null
foreach ($path in $osppPaths) {
if (Test-Path $path) {
$osppPath = $path
break
}
}
if (-not $osppPath) {
# Пробуем найти через поиск
$found = Get-ChildItem "C:\Program Files*\Microsoft Office" -Recurse -Filter "ospp.vbs" -ErrorAction SilentlyContinue | Select-Object -First 1
if ($found) {
$osppPath = $found.FullName
}
}
if (-not $osppPath) {
Write-Host "Ошибка: ospp.vbs не найден. Office установлен?" -ForegroundColor Red
exit 1
}
Write-Host "Найден ospp.vbs: $osppPath" -ForegroundColor Cyan
# Показываем текущий статус
Write-Host "Проверяем статус лицензии Office..." -ForegroundColor Cyan
cscript //nologo $osppPath /dstatus
# Если передан ключ - устанавливаем
if ($OfficeKey -ne "") {
Write-Host "Устанавливаем ключ Office..." -ForegroundColor Cyan
cscript //nologo $osppPath /inpkey:$OfficeKey
}
# Активируем
Write-Host "Запускаем активацию Office..." -ForegroundColor Cyan
cscript //nologo $osppPath /act
# Финальный статус
Write-Host "Проверяем результат..." -ForegroundColor Cyan
cscript //nologo $osppPath /dstatus
Скрипт 3: Активация и Windows, и Office за один запуск
# Комплексная активация: Windows + Office
# Запускать от имени администратора
$ErrorActionPreference = "Continue"
$timestamp = Get-Date -Format "yyyy-MM-dd_HH-mm"
$logFile = "$env:TEMP\activation_log_$timestamp.txt"
function Log {
param([string]$msg, [string]$color = "White")
$line = "[$(Get-Date -Format 'HH:mm:ss')] $msg"
Write-Host $line -ForegroundColor $color
Add-Content $logFile $line
}
# Проверка администратора
$isAdmin = ([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)
if (-not $isAdmin) {
Log "Нужны права администратора" "Red"
exit 1
}
Log "=== Начало активации ===" "Cyan"
# --- WINDOWS ---
Log "--- Windows ---" "Yellow"
$winStatus = (Get-WmiObject SoftwareLicensingProduct -Filter "Name like 'Windows%'" | Where-Object { $_.PartialProductKey } | Select-Object -First 1).LicenseStatus
if ($winStatus -eq 1) {
Log "Windows уже активирована" "Green"
} else {
Log "Запускаем активацию Windows..."
$result = cscript //nologo C:\Windows\System32\slmgr.vbs /ato 2>&1
Log $result
$newStatus = (Get-WmiObject SoftwareLicensingProduct -Filter "Name like 'Windows%'" | Where-Object { $_.PartialProductKey } | Select-Object -First 1).LicenseStatus
if ($newStatus -eq 1) {
Log "Windows активирована успешно" "Green"
} else {
Log "Windows активация не удалась (статус: $newStatus)" "Red"
}
}
# --- OFFICE ---
Log "--- Office ---" "Yellow"
$osppPath = Get-ChildItem "C:\Program Files*\Microsoft Office" -Recurse -Filter "ospp.vbs" -ErrorAction SilentlyContinue | Select-Object -First 1 -ExpandProperty FullName
if (-not $osppPath) {
Log "Office не найден, пропускаем" "Yellow"
} else {
Log "Папка Office: $osppPath"
$officeResult = cscript //nologo $osppPath /act 2>&1
Log $officeResult
$officeStatus = cscript //nologo $osppPath /dstatus 2>&1
if ($officeStatus -match "LICENSED") {
Log "Office активирован успешно" "Green"
} else {
Log "Office активация не удалась" "Red"
}
}
Log "=== Готово. Лог: $logFile ===" "Cyan"
Проверка активации
После активации всегда проверяй результат. Не верь на слово сообщению «активировано» — смотри сам.
Проверка Windows
# Способ 1: всплывающее окно со статусом
slmgr /xpr
# Способ 2: через WMI, удобно для скриптов
Get-WmiObject SoftwareLicensingProduct -Filter "Name like 'Windows%'" | Where-Object { $_.PartialProductKey } | Select-Object Name, LicenseStatus, PartialProductKey
# LicenseStatus = 1 означает активирована
# Способ 3: через реестр
(Get-ItemProperty "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion").ProductName
(Get-ItemProperty "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion").RegisteredOwner
Проверка Office
# Находим ospp.vbs и проверяем
$ospp = (Get-ChildItem "C:\Program Files*\Microsoft Office" -Recurse -Filter "ospp.vbs" -ErrorAction SilentlyContinue | Select-Object -First 1).FullName
cscript //nologo $ospp /dstatus
В выводе ищи строку LICENSE STATUS. Значение —LICENSED— означает что всё хорошо.
Системные требования и совместимость
| Компонент |
Требование |
Примечание |
| ОС |
Windows 10/11 (все редакции) |
Команды slmgr работают начиная с Vista |
| PowerShell |
5.1 и выше |
Встроен в Windows 10/11 |
| Права |
Локальный администратор |
Обязательно, без вариантов |
| Office |
2013, 2016, 2019, 2021, 365 |
ospp.vbs есть во всех версиях |
| Сеть |
Доступ к серверам Microsoft или KMS |
Порт 1688 TCP для KMS, 80/443 для MAK |
| Windows Script Host |
Должен быть включён |
По умолчанию включён в Windows 11 |
На момент публикации актуальны Windows 11 24H2 и Office 2021/Microsoft 365. Перед установкой проверь свежие релизы на сайте Microsoft.
Таблица портов
| Протокол/Порт |
Направление |
Назначение |
| TCP 1688 |
Клиент -> KMS-сервер |
KMS-активация Windows и Office |
| TCP 80 |
Клиент -> Microsoft |
MAK-активация через HTTP |
| TCP 443 |
Клиент -> Microsoft |
MAK-активация через HTTPS |
| UDP 53 |
Клиент -> DNS |
Обнаружение KMS через DNS SRV записи |
Troubleshooting: ошибки и их решения
Вот где большинство статей заканчивается и начинается реальная жизнь. Разберём самые частые ошибки.
Ошибка 0xC004F074 — сервер активации недоступен
Ошибка 0xC004F074
Сообщение: The Key Management Service (KMS) is unavailable. Означает что клиент не может достучаться до KMS-сервера.
Проверяй по порядку:
# 1. Проверяем DNS-запись KMS
nslookup -type=srv _vlmcs._tcp
# 2. Проверяем доступность KMS-сервера (замени kms.company.local)
Test-NetConnection -ComputerName kms.company.local -Port 1688
# 3. Проверяем какой KMS настроен сейчас
slmgr /dlv | findstr "KMS"
# 4. Если нужно - задаём KMS вручную
slmgr /skms kms.company.local:1688
slmgr /ato
Если Test-NetConnection возвращает TcpTestSucceeded: False — проблема в сети или файрволе. Порт 1688 TCP должен быть открыт между клиентом и KMS-сервером.
Ошибка 0x8007007B — неверный формат имени
Ошибка 0x8007007B
Сообщение: The filename, directory name, or volume label syntax is incorrect. Обычно это ключ в неверном формате или лишние символы.
# Проверяем: ключ должен быть строго в формате XXXXX-XXXXX-XXXXX-XXXXX-XXXXX
# Убираем пробелы и лишние символы
$key = "XXXXX-XXXXX-XXXXX-XXXXX-XXXXX"
$key = $key.Trim()
$key = $key -replace "\s+", ""
slmgr /ipk $key
Ошибка 0xC004C008 — ключ уже использован максимальное количество раз
Ошибка 0xC004C008
MAK-ключ исчерпал лимит активаций. Нужно либо получить новый ключ, либо позвонить в Microsoft для сброса.
Варианты выхода:
- Телефонная активация:
slmgr /dti — получишь Installation ID, затем звонишь в Microsoft и получаешь Confirmation ID
- Использовать другой ключ
- Если корпоративная лицензия — обратиться к Volume Licensing Service Center
# Получаем Installation ID для телефонной активации
slmgr /dti
Ошибка 0xC004E003 — сбой программного лицензирования
# Сбрасываем и перезапускаем службу лицензирования
Stop-Service -Name sppsvc -Force
Start-Service -Name sppsvc
# Ждём секунду и пробуем снова
Start-Sleep -Seconds 2
slmgr /ato
Ошибка 0x8007232B — DNS не содержит записи типа ресурса KMS
Ошибка 0x8007232B
Windows пытается найти KMS через DNS и не находит. Типично для домашних компьютеров с корпоративными ключами, или для KMS-ключей на машинах без KMS-инфраструктуры.
# Если у тебя MAK-ключ а не KMS - просто укажи это
# Сначала убираем KMS-настройки
slmgr /ckms
# Затем активируем напрямую через Microsoft
slmgr /ato
PowerShell не может выполнить скрипт — ошибка политики выполнения
Если получаешь «невозможно загрузить файл, так как выполнение скриптов отключено»:
# Проверяем текущую политику
Get-ExecutionPolicy
# Разрешаем выполнение скриптов для текущего пользователя
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
# Или на один запуск через обход политики
powershell -ExecutionPolicy Bypass -File .\activate.ps1
Безопасность при изменении ExecutionPolicy
Не устанавливай Unrestricted глобально на продакшн-системах. RemoteSigned для CurrentUser — разумный компромисс: локальные скрипты работают, загруженные из интернета требуют подписи.
ospp.vbs не найден
# Ищем по всем дискам
Get-PSDrive -PSProvider FileSystem | ForEach-Object {
Get-ChildItem "$($_.Root)Program Files*\Microsoft Office" -Recurse -Filter "ospp.vbs" -ErrorAction SilentlyContinue
}
Ошибка «Windows Script Host отключён»
# Проверяем статус WSH
$wsh = Get-ItemProperty "HKLM:\SOFTWARE\Microsoft\Windows Script Host\Settings" -ErrorAction SilentlyContinue
if ($wsh.Enabled -eq 0) {
# Включаем WSH
Set-ItemProperty "HKLM:\SOFTWARE\Microsoft\Windows Script Host\Settings" -Name "Enabled" -Value 1
Write-Host "WSH включён" -ForegroundColor Green
}
Альтернативные варианты активации
PowerShell + slmgr — не единственный путь. Вот что ещё есть:
Через GUI (Параметры Windows)
Пуск — Параметры — Система — Активация. Там же можно ввести ключ и проверить статус. Удобно для одной машины, бесполезно для автоматизации.
Телефонная активация
Когда онлайн не работает. Получаешь Installation ID через slmgr /dti, звонишь по номеру который показывает мастер активации, получаешь Confirmation ID, вводишь через slmgr /atp КОД.
DISM для образов Windows
# Для применения ключа к образу (например, при развёртывании)
DISM /Online /Set-Edition:Professional /ProductKey:XXXXX-XXXXX-XXXXX-XXXXX-XXXXX /AcceptEULA
Windows ADK и KMS Activation Toolkit
Для корпоративных развёртываний через MDT или SCCM — активация встраивается в задачи последовательности. Это отдельная тема, но slmgr-команды там те же, просто вызываются в другом контексте.
Безопасность
Раздел про безопасность - читай внимательно
Этот раздел не для галочки. Ошибки здесь стоят дороже чем ошибки в настройке активации.
Ключи продукта — это деньги. Относись к ним соответственно:
- Никогда не храни ключи в открытом виде в скриптах которые лежат в общем доступе
- Не передавай ключи через мессенджеры и электронную почту в открытом виде
- Для корпоративного использования — храни в защищённом хранилище (KeePass, CyberArk, HashiCorp Vault)
- Не покупай ключи на сомнительных сайтах — серые схемы, ключи слетают
Права доступа к скриптам:
# Ограничиваем доступ к скрипту с ключом
$acl = Get-Acl "C:\Scripts\activate.ps1"
$acl.SetAccessRuleProtection($true, $false)
# Добавляем только нужных пользователей
$rule = New-Object System.Security.AccessControl.FileSystemAccessRule("DOMAIN\SysAdmins","FullControl","Allow")
$acl.AddAccessRule($rule)
Set-Acl "C:\Scripts\activate.ps1" $acl
Логирование активаций:
# Записываем кто и когда запустил активацию
$logEntry = "$(Get-Date) | $env:USERNAME | $env:COMPUTERNAME | Activation attempt"
Add-Content "\\server\logs\activations.log" $logEntry
Профилактика: как не попасть в эту ситуацию снова
Слетевшая активация — это или истёкший KMS (не достучался до сервера 180 дней), или переустановка системы, или замена железа. Каждый из этих случаев предсказуем.
Мониторинг статуса активации:
# Скрипт для проверки статуса (запускать через Task Scheduler раз в неделю)
$status = (Get-WmiObject SoftwareLicensingProduct -Filter "Name like 'Windows%'" | Where-Object { $_.PartialProductKey } | Select-Object -First 1).LicenseStatus
if ($status -ne 1) {
# Отправляем уведомление
Send-MailMessage -To "admin@company.local" -From "monitoring@company.local" -Subject "ALERT: Активация Windows слетела на $env:COMPUTERNAME" -SmtpServer "mail.company.local"
}
Автозапуск активации при старте системы:
# Создаём задачу в планировщике: проверяем и активируем при каждом входе
$action = New-ScheduledTaskAction -Execute "powershell.exe" -Argument "-NoProfile -ExecutionPolicy Bypass -Command `"slmgr /ato`""
$trigger = New-ScheduledTaskTrigger -AtLogOn
$settings = New-ScheduledTaskSettingsSet -RunOnlyIfNetworkAvailable
Register-ScheduledTask -TaskName "Windows Activation Check" -Action $action -Trigger $trigger -Settings $settings -RunLevel Highest -Force
Резервная копия ключа перед переустановкой:
# Смотрим частичный ключ (последние 5 символов)
slmgr /dli
# Для получения полного OEM-ключа (если зашит в BIOS/UEFI)
(Get-WmiObject -Query "SELECT OA3xOriginalProductKey FROM SoftwareLicensingService").OA3xOriginalProductKey
# Сохраняем информацию о лицензии
slmgr /dlv > "C:\Backup\license_info_$(Get-Date -Format 'yyyyMMdd').txt"
Для KMS-среды — проверяй счётчик клиентов:
# На KMS-сервере: смотрим сколько клиентов подключилось
slmgr /dli
# Нужно минимум 25 клиентов Windows или 5 клиентов Office для запуска KMS
Обновление Windows и Office: что проверить
Перед крупным обновлением Windows
Feature Update (например, 22H2 до 24H2) иногда сбрасывает активацию. Сохрани вывод slmgr /dlv перед обновлением. После обновления проверь статус. Если слетело — slmgr /ato обычно восстанавливает без ввода ключа.
# До обновления: сохраняем состояние
slmgr /dlv > "$env:USERPROFILE\Desktop\before_update_license.txt"
# После обновления: проверяем
slmgr /xpr
# Если слетело - восстанавливаем
slmgr /ato
Для Office — обновления через Microsoft Update как правило не затрагивают активацию. Но если переходишь с Office 2019 на Office 2021 — это уже переустановка со своим ключом.
# Откат активации Office если что-то пошло не так
# Смотрим установленные ключи
$ospp = (Get-ChildItem "C:\Program Files*\Microsoft Office" -Recurse -Filter "ospp.vbs" -ErrorAction SilentlyContinue | Select-Object -First 1).FullName
cscript //nologo $ospp /dstatus
# Удаляем конкретный ключ по последним 5 символам
cscript //nologo $ospp /unpkey:XXXXX
# Вводим и активируем заново
cscript //nologo $ospp /inpkey:НОВЫЙ-КЛЮЧ-ЗДЕСЬ
cscript //nologo $ospp /act
FAQ
Почему PowerShell не запускает slmgr и пишет «не является внутренней или внешней командой»?
slmgr.vbs — это VBScript, а не исполняемый файл. PowerShell запускает его через cscript или через прямой вызов. Правильный вариант:
# Через cscript
cscript //nologo C:\Windows\System32\slmgr.vbs /ato
# Или напрямую (PowerShell вызывает через wscript)
slmgr /ato
Если slmgr /ato не работает — Windows Script Host может быть отключён. Смотри раздел Troubleshooting выше.
Как проверить срок действия KMS-активации через PowerShell без всплывающего окна?
$product = Get-WmiObject SoftwareLicensingProduct -Filter "Name like 'Windows%'" | Where-Object { $_.PartialProductKey }
$expiry = [datetime]::FromFileTime($product.LicenseExpirationDate)
Write-Host "Статус лицензии: $($product.LicenseStatus)"
Write-Host "Истекает: $expiry"
LicenseStatus = 1 означает активна. Дата истечения для KMS будет примерно через 180 дней от последней активации.
Что если slmgr /ato показывает успех, но Windows всё равно показывает «не активирована»?
Три варианта:
- Кешированный статус в интерфейсе — перезагрузи компьютер
- Активация прошла для другой редакции — проверь через
slmgr /dlv что ключ соответствует установленной редакции (Home, Pro, Enterprise)
- Служба лицензирования зависла — перезапусти
Stop-Service sppsvc; Start-Service sppsvc
Можно ли активировать Office 365 через ospp.vbs?
Зависит от типа лицензии. Если это Microsoft 365 Apps for Enterprise (корпоративная подписка через Volume Licensing) — да, ospp.vbs работает с KMS или MAK. Если это персональная подписка Microsoft 365 — активация только через учётную запись Microsoft, ospp.vbs не подходит.
Как активировать Windows 11 без ключа через PowerShell?
Без ключа и без KMS-сервера полноценная активация невозможна. Команда slmgr /rearm сбрасывает 30-дневный льготный период (до 3 раз), но это временное решение, а не активация. Для получения лицензии — купи ключ в Microsoft Store или используй корпоративный KMS.
Как запустить скрипт активации на удалённом компьютере через PowerShell?
# Активация на удалённой машине
Invoke-Command -ComputerName PC-Name -ScriptBlock {
slmgr /ato
} -Credential (Get-Credential)
# Или для нескольких машин сразу
$computers = @("PC001", "PC002", "PC003")
Invoke-Command -ComputerName $computers -ScriptBlock {
$result = cscript //nologo C:\Windows\System32\slmgr.vbs /ato 2>&1
[PSCustomObject]@{
Computer = $env:COMPUTERNAME
Result = $result
}
} | Format-Table -AutoSize
WinRM должен быть включён на целевых машинах. Для включения: Enable-PSRemoting -Force на каждой машине или через GPO.
Что в итоге
Разобрались с механикой активации — slmgr для Windows, ospp.vbs для Office, KMS для корпоративных сред. Три готовых скрипта которые можно запустить прямо сейчас. Таблица ошибок с командами лечения — от 0xC004F074 до зависшего WSH.
Главное что нужно помнить: активация через PowerShell — это не магия. Это те же механизмы что работают под графическим интерфейсом, просто через командную строку. Понимая что делает каждая команда — ты не просто копируешь строчки, а управляешь системой. Это разница между «оно заработало» и «я знаю почему заработало».
Не заработало? Пиши.
Если после всех шагов активация не прошла — напиши в комментариях: код ошибки, версию Windows, MAK или KMS. Разберёмся по конкретной ситуации.