Активация Windows Server через DISM выполняется командой DISM /Online /Set-Edition с указанием целевой редакции и ключа продукта. Для стандартной активации используется slmgr /ipk для ввода ключа и slmgr /ato для онлайн-активации. Оба инструмента работают из командной строки под администратором.
Когда нужна активация через командную строку
Графический интерфейс это хорошо. Но бывают ситуации, когда без командной строки никак.
Server Core. Нет GUI вообще. Только терминал.
Массовое развёртывание. Активировать 20 серверов через GUI, это потерянный день. Скрипт на PowerShell справится за 10 минут.
Удалённое управление. Подключились через SSH или PowerShell Remoting, вводите команды, не нужен RDP.
Конвертация Evaluation. DISM единственный способ конвертировать пробную версию в полную.
Мой знакомый Павел (облачный инженер, управляет 40+ серверами в Azure Stack и on-premise на Dell PowerEdge R750xs с Xeon Gold 5320) управляет всем через PowerShell. Говорит, что GUI это для тех, кто обслуживает один сервер. Для десятков серверов только автоматизация.
slmgr: основной инструмент активации
slmgr.vbs (Software License Manager) это скрипт для управления лицензиями Windows. Короче, это ваш главный инструмент.
# Основные команды slmgr
# Ввод ключа продукта
slmgr /ipk XXXXX-XXXXX-XXXXX-XXXXX-XXXXX
# Активация через интернет
slmgr /ato
# Краткая информация о лицензии
slmgr /dli
# Подробная информация
slmgr /dlv
# Статус активации
slmgr /xpr
# Удаление текущего ключа
slmgr /upk
# Удаление ключа из реестра
slmgr /cpky
# Сброс состояния лицензирования
slmgr /rearm
# Получение Installation ID (для телефонной активации)
slmgr /dti
# Ввод Confirmation ID (телефонная активация)
slmgr /atp CONFIRMATION-IDТут такое дело: slmgr это VBScript, поэтому иногда нужно вызывать через cscript:
# Если slmgr напрямую не работает или выдаёт GUI-окна
# cscript выводит результат в консоль
cscript C:WindowsSystem32slmgr.vbs /dli
# Для удалённого выполнения (на другом сервере)
cscript C:WindowsSystem32slmgr.vbs /ipk XXXXX-XXXXX-XXXXX-XXXXX-XXXXX SERVERNAME
# Или через PowerShell Remoting
Invoke-Command -ComputerName SERVER01 -ScriptBlock {
cscript C:WindowsSystem32slmgr.vbs /ato
}Кстати, при вызове slmgr без cscript результат выводится во всплывающем окне (VBScript MsgBox). На Server Core это может быть проблемой, потому что окно не отображается. Всегда используйте cscript на серверах без GUI.
DISM: конвертация и смена редакции
DISM (Deployment Image Servicing and Management) это инструмент для обслуживания образов Windows. Но он также умеет менять редакцию системы.
# Проверяем текущую редакцию
DISM /Online /Get-CurrentEdition
# Смотрим доступные варианты перехода
DISM /Online /Get-TargetEditions
# Конвертация (смена редакции + активация)
DISM /Online /Set-Edition:ServerStandard /ProductKey:XXXXX-XXXXX-XXXXX-XXXXX-XXXXX /AcceptEula
# Для Datacenter:
DISM /Online /Set-Edition:ServerDatacenter /ProductKey:XXXXX-XXXXX-XXXXX-XXXXX-XXXXX /AcceptEulaВот в чём прикол: DISM /Set-Edition одновременно меняет редакцию И вводит ключ. После перезагрузки сервер уже активирован. Два в одном.
А знаете что? DISM /Set-Edition нужен только для конвертации Evaluation или для повышения редакции (Standard в Datacenter). Если у вас уже полная версия и нужно просто ввести ключ, хватит slmgr.
Конвертация Evaluation в полную версию: пошагово
Это самый частый сценарий использования DISM. Вы установили Evaluation для тестирования, всё настроили, а теперь хотите перевести в продакшен без переустановки.
На самом деле процесс простой, но есть подводные камни.
# Шаг 1: проверяем текущую редакцию
DISM /Online /Get-CurrentEdition
# Покажет: ServerStandardEval или ServerDatacenterEval
# Шаг 2: смотрим доступные целевые редакции
DISM /Online /Get-TargetEditions
# Покажет: ServerStandard и/или ServerDatacenter
# Шаг 3: конвертируем (нужен Retail или Volume ключ, не GVLK!)
DISM /Online /Set-Edition:ServerStandard /ProductKey:XXXXX-XXXXX-XXXXX-XXXXX-XXXXX /AcceptEula
# Шаг 4: ОБЯЗАТЕЛЬНО перезагрузите сервер
shutdown /r /t 0
# Шаг 5: после перезагрузки проверяем
cscript C:WindowsSystem32slmgr.vbs /dli
# Должно показать: RETAIL channel или VOLUME_KMSCLIENTГрубо говоря, конвертация это in-place upgrade редакции. Все роли, настройки, данные сохраняются. Но перезагрузка обязательна, и она может занять 5-10 минут (не выключайте сервер в это время).
Если честно, один раз я видел, как конвертация зависла посредине из-за сбоя питания. Сервер загрузился в странном состоянии: ни Eval, ни Standard. Пришлось переустанавливать. Поэтому перед конвертацией сделайте бэкап. Это не паранойя, а здравый смысл.
Таблица: slmgr vs DISM для разных сценариев
| Сценарий | Инструмент | Команда |
|---|---|---|
| Ввод нового ключа | slmgr | slmgr /ipk КЛЮЧ |
| Онлайн-активация | slmgr | slmgr /ato |
| Проверка статуса | slmgr | slmgr /dli или /dlv |
| Конвертация Evaluation | DISM | DISM /Online /Set-Edition |
| Standard в Datacenter | DISM | DISM /Online /Set-Edition:ServerDatacenter |
| Телефонная активация | slmgr | slmgr /dti + slmgr /atp |
| Настройка KMS-клиента | slmgr | slmgr /skms + slmgr /ato |
| Сброс таймера активации | slmgr | slmgr /rearm |
PowerShell: продвинутая активация
Для тех, кто автоматизирует.
# Проверка статуса лицензии через PowerShell
Get-CimInstance -ClassName SoftwareLicensingProduct |
Where-Object { $_.PartialProductKey } |
Select-Object Name, Description, LicenseStatus, PartialProductKey
# LicenseStatus:
# 0 = Unlicensed
# 1 = Licensed
# 2 = OOBGrace (начальный период)
# 3 = OOTGrace (после замены железа)
# 4 = NonGenuineGrace
# 5 = Notification
# Ещё полезная команда: посмотреть дату истечения
Get-CimInstance -ClassName SoftwareLicensingProduct |
Where-Object { $_.PartialProductKey } |
Select-Object Name, LicenseStatus,
@{N='GracePeriodRemaining';E={
if ($_.GracePeriodRemaining -gt 0) {
"$([math]::Round($_.GracePeriodRemaining / 1440)) дней"
} else { "Активирована навсегда" }
}}Для массовой активации серверов:
# Скрипт массовой активации
# Список серверов из файла, один ключ на все
$servers = Get-Content "C:servers.txt"
$key = "XXXXX-XXXXX-XXXXX-XXXXX-XXXXX"
$results = foreach ($server in $servers) {
Write-Host "Activating $server..." -ForegroundColor Cyan
try {
Invoke-Command -ComputerName $server -ScriptBlock {
param($productKey)
# Вводим ключ
$service = Get-CimInstance -ClassName SoftwareLicensingService
Invoke-CimMethod -InputObject $service -MethodName "InstallProductKey" -Arguments @{ProductKey = $productKey}
# Обновляем статус
Invoke-CimMethod -InputObject $service -MethodName "RefreshLicenseStatus"
# Ждём пару секунд для обновления
Start-Sleep -Seconds 3
# Проверяем результат
$product = Get-CimInstance -ClassName SoftwareLicensingProduct |
Where-Object { $_.PartialProductKey }
[PSCustomObject]@{
Server = $env:COMPUTERNAME
Status = if ($product.LicenseStatus -eq 1) { "Licensed" } else { "Failed: $($product.LicenseStatus)" }
Edition = $product.Name
}
} -ArgumentList $key -ErrorAction Stop
} catch {
[PSCustomObject]@{
Server = $server
Status = "Error: $($_.Exception.Message)"
Edition = "N/A"
}
}
}
# Выводим сводку
$results | Format-Table -AutoSize
Write-Host "Licensed: $($results | Where-Object Status -eq 'Licensed' | Measure-Object | Select -ExpandProperty Count) / $($results.Count)"По факту, скрипт выглядит громоздко. Но он делает за 5 минут то, на что вручную уйдёт полдня. Написал один раз, используешь всегда.
Настройка KMS через командную строку
KMS-активация полностью настраивается из терминала. Никакого GUI не нужно.
Настройка KMS-хоста
# На сервере, который будет KMS-хостом
# Устанавливаем роль (если ещё нет)
Install-WindowsFeature -Name VolumeActivation
# Вводим KMS Host Key
slmgr /ipk XXXXX-XXXXX-XXXXX-XXXXX-XXXXX
# Активируем хост
slmgr /ato
# Проверяем
slmgr /dlv
# Смотрим текущий счётчик KMS-активаций
slmgr /dli
# Настраиваем DNS SRV-запись автоматически
# KMS-хост по умолчанию регистрирует _vlmcs._tcp в DNSНастройка KMS-клиента
# На серверах, которые будут активироваться через KMS
# Вводим GVLK-ключ
# Server 2022 Standard:
slmgr /ipk VDYBN-27WPP-V4HQT-9VMD4-VMK7H
# Server 2022 Datacenter:
slmgr /ipk WX4NM-KYWYW-QJJR4-XV3QB-6VM33
# Server 2019 Standard:
slmgr /ipk N69G4-B89J2-4G8F4-WWYCC-J464C
# Server 2019 Datacenter:
slmgr /ipk WMDGN-G9PQG-XVVXX-R3X43-63DFG
# Указываем KMS-сервер (если не через DNS)
slmgr /skms kms.domain.local:1688
# Активируем
slmgr /ato
# Проверяем
slmgr /dliКстати, если KMS-сервер зарегистрирован в DNS (SRV-запись _vlmcs._tcp), то указывать его вручную через /skms не нужно. Клиенты найдут KMS-сервер автоматически через DNS. Это рекомендуемый способ, потому что при замене KMS-сервера не придётся менять настройки на клиентах.
Активация через прокси-сервер
В корпоративных сетях серверы часто выходят в интернет через прокси. Онлайн-активация (slmgr /ato) не сработает, если прокси не настроен для системных служб.
# Настройка прокси для WinHTTP (используется системными службами)
netsh winhttp set proxy proxy.domain.local:8080
# Или с bypass-списком
netsh winhttp set proxy proxy.domain.local:8080 "localhost;*.domain.local"
# Проверка текущих настроек
netsh winhttp show proxy
# Импорт настроек прокси из Internet Explorer
netsh winhttp import proxy source=ie
# После настройки прокси пробуем активировать
slmgr /atoТут такое дело: многие забывают, что slmgr использует WinHTTP, а не WinINET. Настройки прокси в Internet Explorer или системных параметрах Windows не влияют на WinHTTP. Нужно настраивать отдельно через netsh. На самом деле это одна из самых частых причин, почему активация не работает в корпоративных сетях, хотя браузер нормально открывает сайты.
Мой друг Артём (сетевой инженер, обслуживает инфраструктуру с двумя прокси-серверами Squid на Linux) потратил полдня, пытаясь понять, почему новый Windows Server не активируется. Интернет работал. Сайты открывались. Но slmgr /ato упорно выдавал ошибку 0xC004F074. Оказалось, прокси не был настроен для WinHTTP. Одна команда netsh, и активация прошла за 5 секунд.
Деактивация и перенос лицензии
Если нужно перенести лицензию на другой сервер (например, при замене оборудования), ключ нужно сначала удалить с текущего сервера:
# Удаление ключа с текущего сервера
slmgr /upk
# Удаляет ключ из памяти, но оставляет в реестре
slmgr /cpky
# Удаляет ключ из реестра (для безопасности)
# На новом сервере вводим ключ и активируем
slmgr /ipk XXXXX-XXXXX-XXXXX-XXXXX-XXXXX
slmgr /atoКстати, перенос работает только для Retail-ключей. OEM-ключи привязаны к железу и не переносятся. MAK-ключи можно перенести, но количество активаций ограничено (определяется контрактом Volume Licensing). Если MAK-ключ исчерпал лимит активаций, нужно обратиться в Microsoft для увеличения счётчика.
Диагностика проблем через командную строку
Когда активация не работает, командная строка лучший инструмент для диагностики.
# Проверяем подключение к серверам активации Microsoft
nslookup activation.sls.microsoft.com
ping activation.sls.microsoft.com
# Проверяем KMS-сервер
nslookup -type=SRV _vlmcs._tcp.domain.local
# Проверяем порт KMS (1688)
Test-NetConnection kms.domain.local -Port 1688
# Смотрим логи активации
Get-EventLog -LogName Application -Source "Microsoft-Windows-Security-SPP" -Newest 20
# Принудительная повторная активация
slmgr /ato
# Если нужно указать другой KMS-сервер
slmgr /skms new-kms.domain.local:1688
slmgr /atoНа самом деле 90% проблем с активацией сводятся к трём причинам:
- Нет доступа к серверу активации (файрвол блокирует порт 1688 для KMS или 443 для онлайн-активации)
- Неправильный ключ (ключ от другой редакции или версии)
- Счётчик KMS не набран (для активации Windows Server через KMS нужно минимум 5 запросов от разных машин)
Мой коллега Тимур (Senior SysAdmin, обслуживает гибридную инфраструктуру с 25 серверами Lenovo ThinkSystem SR650 V2) всегда начинает диагностику с Test-NetConnection к порту 1688. Если порт закрыт, дальше можно не смотреть. Открываете порт на файрволе, и активация проходит.
Особенности DISM для разных версий Server
DISM работает одинаково на всех версиях, но есть нюансы.
Server 2016: конвертация Evaluation через DISM поддерживается. Важно: не используйте GVLK-ключ для конвертации, нужен Retail или MAK.
Server 2019: аналогично 2016. Всё то же самое. Но бывали баги, когда после конвертации Evaluation сервер показывал неправильную редакцию в System Properties. Решается перезагрузкой.
Server 2022: аналогично. Плюс поддержка конвертации в Azure Edition (если применимо).
Грубо говоря, синтаксис команд не менялся годами. Что работало на 2016, работает и на 2022. Меняются только ключи.
Телефонная активация серверов
Знаете что, иногда серверы стоят в изолированной сети без доступа к интернету. В этом случае телефонная активация единственный вариант (кроме KMS, если он настроен в той же сети).
# Шаг 1: вводим ключ
slmgr /ipk XXXXX-XXXXX-XXXXX-XXXXX-XXXXX
# Шаг 2: получаем Installation ID
slmgr /dti
# Запишите длинный числовой код (Installation ID)
# Шаг 3: звоним по телефону
# Россия: 8-800-200-8001
# Следуем инструкциям робота, диктуем Installation ID
# Шаг 4: получаем Confirmation ID и вводим
slmgr /atp XXXXX-XXXXX-XXXXX-XXXXX-XXXXX-XXXXX-XXXXX-XXXXX
# Шаг 5: проверяем
slmgr /dliТут такое дело: телефонная активация работает для Retail и MAK ключей. Для KMS не поддерживается (KMS требует сетевого взаимодействия по определению).
Автоматизация активации при развёртывании
Если разворачиваете серверы часто, можно автоматизировать активацию через unattend.xml.
# Фрагмент unattend.xml для автоматической активации
# Добавляется в секцию specialize:
# <settings pass="specialize">
# <component name="Microsoft-Windows-Shell-Setup">
# <ProductKey>XXXXX-XXXXX-XXXXX-XXXXX-XXXXX</ProductKey>
# </component>
# </settings>
# Для KMS-активации в unattend.xml используйте GVLK-ключ
# Сервер автоматически найдёт KMS-хост через DNSНа самом деле для массового развёртывания лучше использовать MDT (Microsoft Deployment Toolkit) или SCCM. Они автоматизируют не только активацию, но и всю установку. MDT бесплатный и справляется с задачами малого и среднего бизнеса.
А ещё есть VAMT (Volume Activation Management Tool). Это утилита от Microsoft для централизованного управления активацией. Через VAMT можно активировать, переактивировать и мониторить статус всех серверов из одной консоли.
# Установка VAMT (входит в Windows ADK)
# Скачайте Windows ADK с сайта Microsoft
# При установке выберите "Volume Activation Management Tool"
# VAMT работает с базой данных (LocalDB или SQL Server)
# Позволяет:
# - Сканировать сеть на наличие машин
# - Просматривать статус активации
# - Массово активировать через MAK Proxy
# - Отслеживать лицензионное покрытиеНу и в завершение: командная строка для активации серверов это не сложно. Пять основных команд (slmgr /ipk, /ato, /dli, /dlv, /xpr) покрывают 95% задач. DISM нужен только для конвертации Evaluation или смены редакции. PowerShell для массовой автоматизации. VAMT для централизованного управления всеми серверами из одной консоли.
Если честно, автоматизация активации через скрипты это то, что отличает грамотного админа от того, кто кликает мышкой по 20 серверам. Написали скрипт один раз, запускаете каждый раз при развёртывании нового сервера. А ключи для активации Windows Server (Standard и Datacenter) можно приобрести в keytrust24.store с моментальной доставкой.



