Активация 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.

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

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

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

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

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

Мы ВКонтакте

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

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

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

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

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