WindowsUpgradeChecker/upgradechecker.ps1

69 lines
1.9 KiB
PowerShell
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# Require admin rights
If (-not ([Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole(`
[Security.Principal.WindowsBuiltinRole]::Administrator)) {
Write-Error "Please run this script as Administrator."
exit
}
$results = @{}
# CPU Check (existence assumed OK for this test)
$cpu = Get-WmiObject Win32_Processor
$results["CPU Present"] = $true
# RAM Check
$ram = [math]::Round((Get-WmiObject Win32_ComputerSystem).TotalPhysicalMemory / 1GB, 2)
$results["RAM >= 4GB"] = $ram -ge 4
# TPM Check
try {
$tpm = Get-WmiObject -Namespace "Root\CIMv2\Security\MicrosoftTpm" -Class Win32_Tpm -ErrorAction Stop
$results["TPM Present"] = $tpm.TpmPresent
$results["TPM Ready"] = $tpm.SpecVersion -match "2\.0"
} catch {
$results["TPM Present"] = $false
$results["TPM Ready"] = $false
}
# Partition Style
try {
$disk = Get-Disk | Where-Object { $_.IsSystem -eq $true }
$results["Disk is GPT"] = $disk.PartitionStyle -eq 'GPT'
} catch {
$results["Disk is GPT"] = $false
}
# Boot Mode
try {
$firmware = Get-WmiObject -Class Win32_ComputerSystem
$results["UEFI Boot"] = $firmware.BootupState -like "*UEFI*"
} catch {
$results["UEFI Boot"] = $false
}
# Secure Boot (Optional)
try {
$sb = Confirm-SecureBootUEFI -ErrorAction Stop
$results["Secure Boot Enabled"] = $sb
} catch {
$results["Secure Boot Enabled"] = $false
}
# Final Verdict
$eligible = $true
foreach ($check in $results.Keys) {
if ($results[$check] -ne $true) {
$eligible = $false
}
}
# Output
Write-Host "Windows 11 Eligibility Check:" -ForegroundColor Cyan
$results.GetEnumerator() | Sort-Object Name | Format-Table -AutoSize
Write-Host "`nResult: " -NoNewline
if ($eligible) {
Write-Host "YES – This machine is eligible for Windows 11." -ForegroundColor Green
} else {
Write-Host "NO – This machine is NOT eligible for Windows 11." -ForegroundColor Red
}