В этой статье мы расскажем, как проверить совместимость ваших компьютеров с Windows 11 с помощью PowerShell. Мы будем использовать официальный скрипт HardwareReadiness.ps1 от Microsoft, который можно скачать по ссылке: https://aka.ms/HWReadinessScript.
Минимальные требования для запуска Windows 11:
1. Совместимый x64 процессор (полный список поддерживаемых CPU)
2. 4+ ГБ оперативной памяти (RAM)
3. Минимальный размер диска — 64 ГБ
4. Устройство с UEFI и включенной Secure Boot
5. Видеокарта, совместимая с DirectX 12 и WDDM 2.0 драйверов
6. TPM 2.0 модуль
7. Монитор с разрешением 720p
Шаги для проверки совместимости компьютера вручную:
1. Скачайте скрипт HardwareReadiness.ps1
2. Откройте Windows PowerShell с правами администратора (так как в скрипте используется командлет Get-WMIObject, который не поддерживается в более новой версии PowerShell Core).
3. Разрешите запуск PowerShell скрипта в текущей сессии:
Set-ExecutionPolicy -Scope Process RemoteSigned
4. Запустите скрипт:
HardwareReadiness.ps1
Результат выполнения скрипта:
Скрипт вернет код 0, если компьютер совместим с требованиями Windows 11 (returnCode: 0, returnResult: CAPABLE):
{"returnCode":0,"returnReason":"","logging":"Storage: OSDiskSize=427GB. PASS; Memory: System_Memory=32GB. PASS; TPM: TPMVersion=2.0, 0, 1.38. PASS; Processor: {AddressWidth=64; MaxClockSpeed=3901; NumberOfLogicalCores=12; Manufacturer=AuthenticAMD; Caption=AMD64 Family 25 Model 80 Stepping 0; }. PASS; SecureBoot: Capable. PASS; ","returnResult":"CAPABLE"}
Массовая проверка компьютеров на совместимость с Windows 11
Если необходимо проверить множество корпоративных компьютеров, можно использовать такие инструменты как SCCM, Intune или даже WSUS для запуска сторонних скриптов. В более простом случае можно использовать групповые политики для запуска скрипта и сохранения результатов в свойствах компьютера в Active Directory.
Модификация скрипта для записи информации в AD
Чтобы записать информацию о совместимости в Active Directory, отредактируйте скрипт HardwareReadiness.ps1 и добавьте в конце следующий код перед блоком #SIG # Begin signature block:
$outObject = $outObject | ConvertTo-Json -Compress
$computer = $env:COMPUTERNAME
$ComputerSearcher = New-Object DirectoryServices.DirectorySearcher
# Укажите ваше имя домена
$ComputerSearcher.SearchRoot = "LDAP://DC=CONTOSO,DC=COM"
$ComputerSearcher.Filter = "(&(objectCategory=Computer)(CN=$Computer))"
$computerObj = [ADSI]$ComputerSearcher.FindOne().Path
$computerObj.Put( "Info", $outObject )
$computerObj.SetInfo()
Этот код запишет в атрибут компьютера Info в Active Directory информацию о совместимости с Windows 11.
Запуск скрипта через GPO
1. Скопируйте скрипт в папку \\winitpro.loc\Netlogon на контроллере домена.
2. Откройте консоль управления доменными групповыми политиками (gpmc.msc) и создайте новую GPO для OU с компьютерами.
3. Перейдите в раздел Конфигурация компьютера > Политики > Настройки Windows > Скрипты (Запуск / Завершение работы) -> Запуск (Англ: Computer Configuration > Policies > Windows Settings > Scripts (Startup / Shutdown) -> Startup) вкладка PowerShell Scripts и укажите UNC путь к скрипту HardwareReadiness.ps1.
Также включите следующие параметры политики:
— Configure Logon Script Delay и задайте 1 минуту задержки запуска скрипта.
— Always wait for the network at computer startup and logon в разделе Computer Configuration -> Admin Templates -> System -> Logon.
Проверка результатов в Active Directory
Перезагрузите компьютер. Затем откройте консоль ADUC (dsa.msc) и откройте свойства компьютера. На вкладке редактора атрибутов проверьте, что в параметре Info теперь содержится информация о совместимости с Windows 11.
Вывод информации о совместимых и несовместимых компьютерах из Active Directory
После того как логон скрипт отработает на всех компьютерах, можно быстро получить информацию о совместимых и несовместимых компьютерах с помощью командлета Get-ADComputer:
Get-ADComputer -Filter {enabled -eq "true"} -properties * | Where-Object {$_.info -ne $null}
Чтобы вывести более подробную информацию о несовместимых компьютерах:
$Report = @()
$computers = Get-ADComputer -Filter {enabled -eq "true"} -properties * | Where-Object { $_.Info -match '"returnCode":1'}
foreach ($computer in $computers){
$jsonString = $computer.info
$object = $jsonString | ConvertFrom-Json
$returnReasonValues = $object.returnReason -split ', '
$CompInfo = [PSCustomObject]@{
"Computer" = $computer.name
"NonCompatibleItems" = $returnReasonValues
}
$Report += $CompInfo
}
$Report | fl
Для преобразования данных из JSON формата используется командлет ConvertFrom-Json.