DOC / 1535 lazyadmin.nl

Замена slmgr.vbs: управление активацией Windows через PowerShell OSLicense

Автоматизация активации Windows постепенно переходит от сценариев VBScript к командлетам PowerShell. Модуль OSLicense позволяет получать сведения о лицензии, выполнять активацию и настраивать KMS через структурированные объекты. Главное при переходе — проверить доступность модуля на целевых машинах и изменить обработку результатов, а не просто заменить название команды.

Почему стоит пересмотреть сценарии со slmgr.vbs

slmgr.vbs зависит от движка VBScript. В опубликованном плане Microsoft предусмотрены три этапа: компонент по требованию включён по умолчанию в Windows 11 24H2, примерно с 2027 года его планируют отключать по умолчанию, затем — полностью удалить в будущих выпусках. Точная дата последнего этапа не указана. Это не означает, что slmgr.vbs уже перестал работать на всех компьютерах. План прекращения поддержки VBScript у Microsoft.

Проверьте сценарии развёртывания, задания управления устройствами и обёртки, вызывающие cscript со slmgr.vbs. Для каждой зависимости запишите назначение команды и условия её запуска. Так будет проще проверить замену на тестовом компьютере.

Проверить наличие OSLicense

Модуль входит в Windows на поддерживаемых системах и требует Windows PowerShell 5.1. Не считайте его установленным только потому, что на компьютере есть PowerShell 7. Начните с Windows PowerShell:

Get-Module -ListAvailable -Name '*OSLicense*'
Get-Command -Module OSLicense

В справке Get-OSLicenseInfo доступность указана для обновления безопасности Windows 11 за сентябрь 2026 года KB5124008 и Windows Server vNext Preview Build 29651. Наличие модуля в предварительной сборке сервера не гарантирует его наличие на ваших действующих серверах. Проверяйте каждую поддерживаемую конфигурацию. Обзор OSLicense, сведения о доступности командлета.

Посмотреть состояние лицензии

Вместо разбора текстового вывода slmgr.vbs /dlv получите объект:

Get-OSLicenseInfo |
    Select-Object Name, ActivationID, LicenseStatus, PartialProductKey,
        GracePeriodRemaining, EvaluationEndDate

Для всех найденных продуктов используйте Get-OSLicenseInfo -All, для конкретного — параметр ActivationID. Список All может включать не только основную лицензию Windows.

Результат Get-OSLicenseInfo с выбранными свойствами лицензии Windows
Пример вывода PowerShell из исходного материала LazyAdmin.

LicenseStatus возвращается как локализованная строка. Поэтому проверка на строгое равенство английскому слову Licensed может ломаться в многоязычной среде. Не используйте EvaluationEndDate как единственный признак активации: дата может отсутствовать. Если команда не вернула объект, отдельно обработайте отсутствие лицензии или ошибку получения данных. Параметры, свойства и особенности Get-OSLicenseInfo.

Активировать систему и проверить результат

Операции изменения лицензирования выполняйте из повышенного сеанса. Одна команда Invoke-OSLicense выбирает одну операцию. Пример онлайн-активации:

$result = Invoke-OSLicense -ActivateOnline
if ($null -eq $result) {
    throw 'Служба лицензирования не вернула результат.'
}
if (-not $result.Success) {
    throw ('Ошибка активации: {0}; {1}' -f $result.ErrorCode, $result.ErrorMessage)
}
$result | Select-Object Success, Operation, ActivationID, ProductName

При наличии нескольких продуктов укажите проверенный ActivationID. Для установки ключа используется отдельный вызов:

$result = Invoke-OSLicense -InstallProductKey 'XXXXX-XXXXX-XXXXX-XXXXX-XXXXX'
$result | Select-Object Success, Operation, ErrorCode, ErrorMessage

Замените образец своим разрешённым ключом. Не записывайте весь возвращённый объект в общие журналы: результаты установки могут содержать ключ. После успешной установки активация выполняется отдельно. Параметры Rearm, UninstallProductKey, ClearProductKeyFromRegistry и ReinstallSystemLicenses предназначены для других самостоятельных операций; не запускайте их вместе как универсальное исправление. Справка Invoke-OSLicense.

Настроить корпоративный KMS

Сначала зафиксируйте текущую конфигурацию, затем задайте сервер своей организации:

Get-KmsLicenseInfo
Set-KmsLicenseInfo -ServerName 'kms01.example.com' -Port 1688

Имя в примере условное. Явное назначение KMS-сервера отключает автоматическое обнаружение этого сервера. Set-KmsLicenseInfo меняет только переданные параметры; пропущенные настройки сохраняются. Проверяйте Success в результате операции. Настройки Set-KmsLicenseInfo.

Отмена явных настроек выполняется отдельными операциями:

Invoke-KmsLicense -ClearServer
Invoke-KmsLicense -ClearPort

Сброс имени сервера и порта не очищает явно заданный домен поиска. Для него существует ClearDomain; ClearListeningPort относится к порту прослушивания KMS-хоста. Выбирайте одну операцию на вызов и проверяйте её результат. Справка Invoke-KmsLicense.

Порядок перехода для автоматизации

  1. Составьте список вызовов slmgr.vbs и разделите чтение состояния и изменение лицензии.
  2. Проверьте наличие модуля и команд на тестовых клиентах и серверах.
  3. Замените разбор текстовых сообщений на проверку объектов, включая отсутствие результата и Success.
  4. Проверьте ошибки сети, неверный ключ и выбор конкретного продукта.
  5. Обновите инструкции и затем переносите проверенные изменения в рабочую среду.

Примеры команд иллюстрируют отдельные операции и не являются общим сценарием, который нужно выполнить целиком. Снимки экрана показывают исходный пример; фактические значения зависят от системы и лицензии.

Исходный материал: LazyAdmin — Microsoft is Retiring slmgr.vbs – Here’s what to Use Instead, Rudy Mens. Русскоязычная инструкция подготовлена самостоятельно и дополнена проверкой по документации Microsoft; актуальность проверена 10 октября 2026 года.

ORIGINAL / ATTRIBUTION

Источник материала

Материал переработан для SYSADM.VIP. Оригинальный источник указан ниже.

Оригинал статьи на lazyadmin.nl ↗

https://lazyadmin.nl/powershell/microsoft-is-retiring-slmgr-vbs-heres-what-to-use-instead/

Материал проверен 10.10.2026. При изменении программного обеспечения сверяйтесь с актуальной документацией.
← Вернуться в базу знаний