Dieser Artikel beschreibt detailliert, wie überprüft werden kann, welche Windows 10-Geräte für ein Upgrade auf Windows 11 geeignet sind , und wie dieses Upgrade mithilfe von FleetDM-Richtlinien und PowerShell-Skripten automatisch initiiert werden kann.
Das Verfahren umfasst Folgendes:
- Erkennen und Speichern der erforderlichen Systemkomponenten (TPM 2.0 und Secure Boot) in der Registrierung
- Überprüfung der Hardware- und Softwareanforderungen zur Feststellung der Upgrade-Berechtigung
- Automatisierter Download und unbeaufsichtigte Installation von Windows 11 auf kompatiblen Geräten
Geräte mit TPM und Secure Boot klassifizieren
Erstellen Sie die Erkennungsrichtlinie (FleetDM-Registry)
Verwenden Sie die folgende Abfrage, um das Vorhandensein von Registrierungsschlüsseln zu überprüfen, die den TPM- und Secure-Boot- Status speichern:
SELECT 1 WHERE EXISTS ( SELECT 1 FROM registry WHERE path = 'HKEY_LOCAL_MACHINE\Software\FleetDM\TPMVersion' ) AND EXISTS ( SELECT 1 FROM registry WHERE path = 'HKEY_LOCAL_MACHINE\Software\FleetDM\SecureBoot' );Führen Sie das zugehörige Skript aus (füllen Sie die Registrierung aus).
Fügen Sie dieses PowerShell-Skript der obigen Richtlinie hinzu. Es erkennt die TPM-Version und den Secure-Boot-Status und schreibt diese anschließend in die Windows-Registrierung für FleetDM.
$TPM = Get-WmiObject -Namespace "Root\CIMv2\Security\MicrosoftTpm" -Class Win32_Tpm$SecureBoot = Confirm-SecureBootUEFI$TPMVersion = $TPM.SpecVersion$SecureBootEnabled = if ($SecureBoot) { 1 } else { 0 }# Write values to the registry (example)New-Item -Path "HKLM:\Software\FleetDM" -Force | Out-NullSet-ItemProperty -Path "HKLM:\Software\FleetDM" -Name "TPMVersion" -Value $TPMVersionSet-ItemProperty -Path "HKLM:\Software\FleetDM" -Name "SecureBoot" -Value $SecureBootEnabledErwartetes Ergebnis: HKLM\Software\FleetDM\TPMVersion und HKLM\Software\FleetDM\SecureBoot werden erstellt/aktualisiert.
Prüfen Sie, ob ein Windows 10-Gerät für Windows 11 geeignet ist.
Erstellen Sie die folgende Richtlinie, um die Mindestanforderungen (RAM, CPU-Kerne, Architektur, TPM 2.0, Secure Boot) zu überprüfen und nicht konforme Geräte auszuschließen.
SELECT 1 FROM os_version as os JOIN system_info as si WHERE os.name NOT LIKE 'Microsoft Windows 10%' OR si.physical_memory < 4 * 1024 * 1024 * 1024 OR si.cpu_physical_cores < 2 OR si.cpu_type NOT LIKE '%x86_64%' OR NOT EXISTS ( SELECT * FROM registry WHERE path = 'HKEY_LOCAL_MACHINE\Software\FleetDM\TPMVersion' AND data LIKE '2%' ) OR NOT EXISTS ( SELECT * FROM registry WHERE path = 'HKEY_LOCAL_MACHINE\Software\FleetDM\SecureBoot' AND data = '1' );Interpretation: Die Abfrage gibt 1 zurück, wenn das Gerät kein kompatibles Windows 10-Gerät ist. Verwenden Sie sie als Richtlinie für Nichtkonformität, um nur berechtigte Geräte beizubehalten (solche, für die die Abfrage nicht 1 zurückgibt).
Windows 11-Upgrade auslösen (berechtigte Geräte)
Hängen Sie das unten stehende Bereitstellungsskript an kompatible Geräte an. Es lädt die Windows 11 ISO-Datei herunter, bindet das Image ein, kopiert die Quelldateien lokal und plant eine automatische Installation unter SYSTEM .
# ImportsImport-Module BitsTransfer# Variables$uri = "https://production-bucket-public-files.s3.eu-west-3.amazonaws.com/Win11_24H2_French_x64.iso"$destination = "C:\Win11.iso"$log = "C:\logs\download_win11_iso.log"# Create the logs folder if it doesn't existif (-not (Test-Path -Path "C:\logs")) { New-Item -Path "C:\logs" -ItemType Directory | Out-Null}# Start the downloadtry { "`n[$(Get-Date)] Starting download..." | Out-File -Append $log if (-not (Test-Path $destination)){ Start-BitsTransfer -Source $uri -Destination $destination } "`n[$(Get-Date)] Download completed successfully." | Out-File -Append $log} catch { "`n[$(Get-Date)] Error during download: $_" | Out-File -Append $log}# Additional variables$isoPath = "C:\Win11.iso"$setupFolder = "C:\Temp\Win11Files"$taskName = "Win11SilentUpgrade"# Step 1 - Mount the ISOMount-DiskImage -ImagePath $isoPath -PassThru | Out-NullStart-Sleep -Seconds 2$vol = Get-Volume -DiskImage (Get-DiskImage -ImagePath $isoPath)$driveLetter = $vol.DriveLetter# Step 2 - Copy ISO content locallyNew-Item -ItemType Directory -Force -Path $setupFolder | Out-NullCopy-Item "$driveLetter`:\*" -Destination $setupFolder -Recurse# Unmount the ISODismount-DiskImage -ImagePath $isoPath# Step 3 - Create and schedule the installation task$action = New-ScheduledTaskAction -Execute "C:\Temp\Win11Files\setup.exe" -Argument "/auto upgrade /migratedrivers none /resizerecoverypartition enable /dynamicupdate disable /eula accept /quiet /noreboot /uninstall disable /compat ignorewarning /copylogs C:\logs\WinSetup.log"$principal = New-ScheduledTaskPrincipal -UserId "SYSTEM" -LogonType ServiceAccount -RunLevel Highest$task = New-ScheduledTask -Action $action -Principal $principal -Trigger (New-ScheduledTaskTrigger -Once -At (Get-Date).AddMinutes(1))Register-ScheduledTask -TaskName $taskName -InputObject $task -Force# Step 4 - Start the task immediatelyStart-ScheduledTask -TaskName $taskName