Активация Windows 11 и Office через PowerShell: команды, скрипты, диагностика

активация Windows 11 и Office через PowerShell
Коротко: что делать прямо сейчас
Открой 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.

PowerShell (Admin)

slmgr.vbs

ospp.vbs

Windows License Service

Office License Service

Microsoft KMS Server

Microsoft MAK Server

Запуск 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. Разберёмся по конкретной ситуации.
Андрей А.
Author: Андрей А.

Руководитель ИТ / Кризис-менеджер 25 лет в IT: от инженера в МегаФоне до руководителя отдела. Знаю, как выглядит бардак: нестабильные сети, устаревшая инфраструктура, конфликты в команде, раздутые сроки. Помогаю бизнесу выходить из кризиса: навожу порядок в легаси, стабилизирую то, что разваливается, выстраиваю прогнозируемые процессы. Не раз возвращал к жизни ИТ-структуры — знаю цену хаосу. 📍 Ищу проект для полной реорганизации / стабилизации. 📬 Telegram: @over_dude ✉️ mail@it-apteka.com

Оставайтесь на связи

Рецепты от IT-боли. Без воды, без рекламы, без маркетинговой шелухи.

Подписаться на IT-Аптеку →

Мы ВКонтакте

IT-Аптека — советы, новости и помощь рядом.

Вступить в группу ВКонтакте →
Поделитесь:

8 комментариев к “Активация Windows 11 и Office через PowerShell: команды, скрипты, диагностика”

  1. Максим Н.

    А это вообще легально? Просто интересуюсь, у нас в конторе 15 компов и хочется автоматизировать активацию чтоб каждый раз не бегать по машинам руками.

    1. Скрипт сам по себе легальный — он просто автоматизирует штатные команды Windows. Вопрос легальности в том какие ключи используешь. Если у компании Volume License или подписка Microsoft 365 Business — автоматизировать активацию через PowerShell абсолютно нормально и даже правильно. Это стандартная практика для корпоративных деплойментов.

  2. Спасибо за статью! Подскажи, скрипт активации office 365 через powershell — у меня выдает ошибку «не удается найти указанный файл». Делаю всё по инструкции, windows 11 pro 23h2. Уже третий час сижу с этим.

    1. Скорее всего дело в пути к 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 — разберёмся.

  3. Команда Get-WmiObject -query ‘select * from SoftwareLicensingProduct’ у меня ничего не выводит на Windows 11. Это нормально или что-то не так с системой? Активация при этом показывает что всё ок.

    1. Попробуй с фильтром — без него команда возвращает сотни строк и терминал просто не показывает: Get-WmiObject -query «select * from SoftwareLicensingProduct where LicenseStatus=1» | Select-Object Name, LicenseStatus. Если активация в порядке — всё нормально, просто вывод без фильтра слишком большой.

  4. отличный гайд, добавил в закладки. давно искал нормальную инструкцию по powershell для активации без лишней воды

Оставьте комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Прокрутить вверх