Dieser Leitfaden findet die Windows 10 Geräte, die auf Windows 11 umsteigen können, und startet dann automatisch das Upgrade auf ihnen. Er basiert auf Fleet-Richtlinien und PowerShell-Skripten.
Funktion/Feature
Überblick
Der Prozess hat drei Phasen:
- Lesen des TPM 2.0- und Secure Boot-Status jedes Geräts und Speichern in der Windows-Registrierung.
- Überprüfen der Hardware- und Softwareanforderungen, um zu entscheiden, welche Geräte qualifiziert sind.
- Herunterladen von Windows 11 und stille Installation auf den qualifizierten Geräten.
So verwenden Sie es
Schritt 1. TPM und Secure Boot in der Registrierung aufzeichnen
- Erstellen Sie eine Richtlinie mit der untenstehenden Abfrage. Sie überprüft, ob die beiden Registrierungswerte, die den TPM und Secure Boot Status halten, bereits existieren.
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ügen Sie das folgende PowerShell-Skript dieser Richtlinie hinzu. Es liest die TPM-Version und den Secure Boot-Status und schreibt beide Werte in die Registrierung.
$TPM = Get-WmiObject -Namespace "Root\CIMv2\Security\MicrosoftTpm" -Class Win32_Tpm
$SecureBoot = Confirm-SecureBootUEFI
$TPMVersion = $TPM.SpecVersion
$SecureBootEnabled = if ($SecureBoot) { 1 } else { 0 }
# Werte in die Registrierung schreiben (Beispiel)
New-Item -Path "HKLM:\Software\FleetDM" -Force | Out-Null
Set-ItemProperty -Path "HKLM:\Software\FleetDM" -Name "TPMVersion" -Value $TPMVersion
Set-ItemProperty -Path "HKLM:\Software\FleetDM" -Name "SecureBoot" -Value $SecureBootEnabledNachdem das Skript ausgeführt wurde, existieren HKLM\Software\FleetDM\TPMVersion und HKLM\Software\FleetDM\SecureBoot und halten die aktuellen Werte.
Schritt 2. Überprüfen, welche Windows 10 Geräte qualifiziert sind
- Erstellen Sie eine zweite Richtlinie mit der untenstehenden Abfrage. Sie überprüft RAM, CPU-Kerne, Architektur, TPM 2.0 und Secure Boot.
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'
);- Lesen Sie das Ergebnis richtig herum: Die Abfrage gibt 1 zurück, wenn das Gerät kein qualifiziertes Windows 10-Gerät ist. Behandeln Sie es als eine Nichteinhaltungsrichtlinie. Die Geräte, bei denen es nicht 1 zurückgibt, sind die, die Sie upgraden können.
Schritt 3. Starten Sie das Upgrade auf qualifizierten Geräten
- Fügen Sie das folgende Skript den Geräten hinzu, die Schritt 2 bestanden haben.
- Das Skript lädt die Windows 11 ISO herunter, bindet sie ein, kopiert die Installationsdateien auf die lokale Festplatte und plant eine stille Installation, die als SYSTEM ausgeführt wird.
# Imports
Import-Module BitsTransfer
# Variablen
$uri = "https://production-bucket-public-files.s3.eu-west-3.amazonaws.com/Win11_24H2_French_x64.iso" # Französische Lokalisierung — ersetzen Sie die URL mit der ISO für Ihre Sprache und Region
$destination = "C:\Win11.iso"
$log = "C:\logs\download_win11_iso.log"
# Erstellen Sie den Logs Ordner wenn er nicht existiert
if (-not (Test-Path -Path "C:\logs")) {
New-Item -Path "C:\logs" -ItemType Directory | Out-Null
}
# Starten Sie den Download
try {
"`n[$(Get-Date)] Starte Download..." | Out-File -Append $log
if (-not (Test-Path $destination)){
Start-BitsTransfer -Source $uri -Destination $destination
}
"`n[$(Get-Date)] Download wurde erfolgreich abgeschlossen." | Out-File -Append $log
} catch {
"`n[$(Get-Date)] Fehler während des Downloads: $_" | Out-File -Append $log
}
# Zusätzliche Variablen
$isoPath = "C:\Win11.iso"
$setupFolder = "C:\Temp\Win11Files"
$taskName = "Win11SilentUpgrade"
# Schritt 1 - Mount die ISO
Mount-DiskImage -ImagePath $isoPath -PassThru | Out-Null
Start-Sleep -Seconds 2
$vol = Get-Volume -DiskImage (Get-DiskImage -ImagePath $isoPath)
$driveLetter = $vol.DriveLetter
# Schritt 2 - Kopieren Sie den ISO Inhalt lokal
New-Item -ItemType Directory -Force -Path $setupFolder | Out-Null
Copy-Item "$driveLetter`:\*" -Destination $setupFolder -Recurse
# Unmount die ISO
Dismount-DiskImage -ImagePath $isoPath
# Schritt 3 - Erstellen und planen Sie die Installations Aufgabe
$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
# Schritt 4 - Starten Sie die Aufgabe sofort
Start-ScheduledTask -TaskName $taskNameTipps und Best Practices
- Ändern Sie die ISO, bevor Sie etwas ausführen. Das Skript verweist auf eine französische ISO. Ersetzen Sie die URL durch die ISO für Ihre Sprache und Region.
- Führen Sie zuerst Schritt 1 aus und geben Sie ihm Zeit. Schritt 2 hängt von den in Schritt 1 geschriebenen Registrierungswerten ab. Ein Gerät ohne diese zeigt immer als nicht qualifiziert an.
- Beginnen Sie mit einer kleinen Gruppe. Die Einrichtung läuft still und ohne Neustartaufforderung. Testen Sie es an einigen Geräten, bevor Sie die gesamte Flotte aktualisieren.
-
Behalten Sie die Protokolle. Das Download-Protokoll geht an
C:\logs\download_win11_iso.logund das Setup-Protokoll anC:\logs\WinSetup.log. Überprüfen Sie diese zuerst, wenn etwas fehlschlägt. - Planen Sie den Download. Jedes Gerät zieht eine vollständige Windows 11 ISO, vermeiden Sie also langsame oder nutzungsabhängige Verbindungen.
Fehlerbehebung und FAQ
Fehlerbehebung
- Ein Gerät, von dem Sie erwarteten, dass es qualifiziert, zeigt an, dass es nicht berechtigt ist. Überprüfen Sie, ob das Skript von Schritt 1 auf diesem Gerät ausgeführt wurde und ob beide Registrierungswerte existieren. Überprüfen Sie dann die Anforderungen in der Abfrage von Schritt 2: Windows 10, mindestens 4 GB RAM, mindestens 2 physische CPU-Kerne, einen x86_64-Prozessor, TPM-Version 2 und aktivierten Secure Boot.
-
Das Upgrade hat nicht begonnen. Öffnen Sie
C:\logs\download_win11_iso.log, um zu sehen, ob die ISO heruntergeladen wurde. Wenn ja, suchen Sie nach der geplanten AufgabeWin11SilentUpgradeauf dem Gerät. -
Das Setup ist teilweise fehlgeschlagen. Lesen Sie
C:\logs\WinSetup.log, wo das Skript Windows-Setup anweist, seine Protokolle zu kopieren.
FAQ
-
Gibt die Abfrage von Schritt 2 die qualifizierten Geräte zurück?
Nein, das Gegenteil. Sie gibt 1 für Geräte zurück, die nicht qualifiziert sind. Qualifizierte Geräte sind die, bei denen sie nicht 1 zurückgibt.
-
Warum TPM und Secure Boot in der Registrierung speichern?
Damit die Berechtigungsrichtlinie sie mit einer einfachen Registrierungsabfrage lesen kann.
-
Welches Konto führt das Upgrade aus?
SYSTEM, durch eine geplante Aufgabe, die das Skript erstellt und sofort startet.
-
Startet das Skript das Gerät neu?
Der Setup-Befehl enthält/noreboot, sodass das Skript keinen Neustart selbst erzwingt.