Диагноз: зачем вообще это нужно
Получил новую машину. 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.
Запуск 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>.
([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 — сервер активации недоступен
Проверяй по порядку:
# 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 — неверный формат имени
# Проверяем: ключ должен быть строго в формате XXXXX-XXXXX-XXXXX-XXXXX-XXXXX
# Убираем пробелы и лишние символы
$key = "XXXXX-XXXXX-XXXXX-XXXXX-XXXXX"
$key = $key.Trim()
$key = $key -replace "\s+", ""
slmgr /ipk $key
Ошибка 0xC004C008 — ключ уже использован максимальное количество раз
Варианты выхода:
- Телефонная активация:
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
# Если у тебя MAK-ключ а не KMS - просто укажи это
# Сначала убираем KMS-настройки
slmgr /ckms
# Затем активируем напрямую через Microsoft
slmgr /ato
PowerShell не может выполнить скрипт — ошибка политики выполнения
Если получаешь «невозможно загрузить файл, так как выполнение скриптов отключено»:
# Проверяем текущую политику
Get-ExecutionPolicy
# Разрешаем выполнение скриптов для текущего пользователя
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
# Или на один запуск через обход политики
powershell -ExecutionPolicy Bypass -File .\activate.ps1
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: что проверить
# До обновления: сохраняем состояние
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 — это не магия. Это те же механизмы что работают под графическим интерфейсом, просто через командную строку. Понимая что делает каждая команда — ты не просто копируешь строчки, а управляешь системой. Это разница между «оно заработало» и «я знаю почему заработало».
Оставайтесь на связи
Рецепты от IT-боли. Без воды, без рекламы, без маркетинговой шелухи.
Подписаться на IT-Аптеку →




А это вообще легально? Просто интересуюсь, у нас в конторе 15 компов и хочется автоматизировать активацию чтоб каждый раз не бегать по машинам руками.
Скрипт сам по себе легальный — он просто автоматизирует штатные команды Windows. Вопрос легальности в том какие ключи используешь. Если у компании Volume License или подписка Microsoft 365 Business — автоматизировать активацию через PowerShell абсолютно нормально и даже правильно. Это стандартная практика для корпоративных деплойментов.
Спасибо за статью! Подскажи, скрипт активации office 365 через powershell — у меня выдает ошибку «не удается найти указанный файл». Делаю всё по инструкции, windows 11 pro 23h2. Уже третий час сижу с этим.
Скорее всего дело в пути к ospp.vbs — он отличается в зависимости от разрядности Office и версии. Проверь что файл вообще существует: dir «C:\Program Files\Microsoft Office\Office16\ospp.vbs». Если не нашлось — попробуй «C:\Program Files (x86)\Microsoft Office\Office16\ospp.vbs». Office 365 устанавливается в разные папки в зависимости от того 32 или 64-битная версия. Напиши что показывает dir — разберёмся.
Команда Get-WmiObject -query ‘select * from SoftwareLicensingProduct’ у меня ничего не выводит на Windows 11. Это нормально или что-то не так с системой? Активация при этом показывает что всё ок.
Попробуй с фильтром — без него команда возвращает сотни строк и терминал просто не показывает: Get-WmiObject -query «select * from SoftwareLicensingProduct where LicenseStatus=1» | Select-Object Name, LicenseStatus. Если активация в порядке — всё нормально, просто вывод без фильтра слишком большой.
отличный гайд, добавил в закладки. давно искал нормальную инструкцию по powershell для активации без лишней воды
Спасибо! Если будут вопросы по конкретным ошибкам — пиши, разберёмся.