Dans nos précédents articles de blog, nous avons exploré différentes approches de la migration vers Windows 11 : en utilisant SCCM, par l'intermédiaire de XOAP, via les GPO et les clés de registre et Mise à jour de Windows dans les paramètres. Dans ce billet, nous allons vous présenter une autre méthode - déployer le paquet de mise à niveau de Windows 11 à l'aide de notre logiciel PowerShell App Deployment Toolkit (Téléchargez-le ici gratuitement).
Utiliser PSADT pour migrer de Windows 10 à Windows 11
Pour commencer, extraire le contenu de votre fichier ISO Windows 11 et les inclure dans votre paquet PSADT. Ensuite, vous utiliserez la fonction setup.exe à partir de l'ISO extraite, ainsi que des paramètres de ligne de commande spécifiques pour passer de Windows 10 à Windows 11.
Une fois votre fichier source prêt, il est temps de modifier le script "Deploy-Application.ps1". Dans la partie pré-installation, il vérifiera si une tâche planifiée existe. et le supprimer (en cas d'échec).
#### (Pre-Install) Supprimer la tâche planifiée -------------------------------------------->
$DELTaskName = 'Win11Upgrade' (mise à niveau de Win11)
# Vérifier si la tâche existe
$DELTaskExists = Get-ScheduledTask -TaskName $DELTaskName -ErrorAction SilentlyContinue
if ($DELTaskExists) {
# Supprimer la tâche
Unregister-ScheduledTask -TaskName $DELTaskName -Confirm:$false
Write-Output "(Pré-installation) La tâche '$DELTaskName' a été supprimée".
} else {
Write-Output "(Pré-installation) La tâche '$DELTaskName' n'existe pas. Passer à l'installation"
}
Dans la partie installation, une tâche planifiée sera créée et lancée. La boucle While est utilisée pour vérifier si la tâche est toujours en cours d'exécution après son lancement.
###># CREATE SCHEDULED TASK -------------------------------------------------------->
$STExecutable = "$dirfiles\ISO\Setup.exe"
$STArguments = "/Auto Upgrade /EULA accept /NoReboot"
$STTaskName = "Win11Upgrade"
$STTriggerTime = (Get-Date).AddSeconds(15)
$STPriority = 4
$STTrigger = New-ScheduledTaskTrigger -Once -At $STTriggerTime
$STSettings = New-ScheduledTaskSettingsSet -StartWhenAvailable -Priority $STPriority -RunOnlyIfNetworkAvailable -AllowStartIfOnBatteries -DontStopIfGoingOnBatteries
# Créer une nouvelle action de tâche planifiée
$STAction = New-ScheduledTaskAction -Execute $STExecutable -Argument $STArguments -WorkingDirectory (Split-Path $STExecutable)
# Créer un nouveau principal de tâche planifiée pour le compte SYSTEM
$STPrincipal = New-ScheduledTaskPrincipal -UserID "NT AUTHORITY\SYSTEM" -LogonType ServiceAccount -RunLevel Highest
# Créer et enregistrer la nouvelle tâche planifiée
$STTask = New-ScheduledTask -Action $STAction -Trigger $STTrigger -Settings $STSettings -Principal $STPrincipal
Register-ScheduledTask -TaskName $STTaskName -InputObject $STTask
#### KICK OFF SCHEDULED TASK ------------------------------------------------------>
Démarrage-Sommeil 10
Start-ScheduledTask -TaskName "Win11Upgrade" (tâche planifiée)
#### SURVEILLER LA TÂCHE PLANIFIÉE ------------------------------------------------------->
$STTaskName = "Win11Upgrade"
# Boucle jusqu'à ce que la tâche ne soit plus en cours d'exécution
while ((Get-ScheduledTask -TaskName $STTaskName).State -eq "Running")
{
# Obtenir des informations sur la tâche
$taskInfo = Get-ScheduledTaskInfo -TaskName $STTaskName
# Vérifier si la tâche est exécutée par le SYSTÈME
if ((Get-ScheduledTask -TaskName $STTaskName).Principal.UserId -eq "SYSTEM")
{
# Écriture sur la sortie
Write-Output "$STTaskName est toujours exécuté en tant que SYSTEM"
}
else
{
Write-Output "$STTaskName est toujours en cours d'exécution, mais pas en tant que SYSTEM"
}
# Attendez 10 secondes avant de vérifier à nouveau
Start-Sleep -Seconds 10
}
Write-Output "$STTaskName a fini de s'exécuter"
Dans la partie post-installation, la tâche programmée créée est supprimée.
#### (Post-Install) Supprimer la tâche programmée -------------------------------------------->
$DELTaskName = "Win11Upgrade"
# Vérifier si la tâche existe
$DELTaskExists = Get-ScheduledTask -TaskName $DELTaskName -ErrorAction SilentlyContinue
if ($DELTaskExists) {
# Supprimer la tâche
Unregister-ScheduledTask -TaskName $DELTaskName -Confirm:$false
Write-Output "(Post-installation) La tâche '$DELTaskName' a été supprimée".
} else {
Write-Output "(Post-Install) La tâche '$DELTaskName' n'existe pas."
}
Il y a quelques options à prendre en considération si vous souhaitez développer ce paquet :
- Ajouter la vérification des prérequis de Windows 11
- L'étendre avec des fonctions PSADT telles que :
- Show-InstallationBienvenue
- Afficher l'état d'avancement de l'installation
- Afficher l'invite à l'installation et au redémarrage - Ajuster les options disponibles pour les tâches planifiées :
- RunOnlyIfNetworkAvailable (Exécution uniquement si le réseau est disponible)
- AllowStartIfOnBatteries
- DontStopIfGoingOnBatteries - Ajouter d'autres paramètres à l'exécution de setup.exe (par exemple "/Product Server" comme solution de contournement pour la vérification des conditions préalables).
Vous êtes prêt à partir !
La mise à niveau vers Windows 11 avec PSADT est une option flexible si vous souhaitez mieux contrôler le processus. Avec quelques modifications de scripts, vous pouvez gérer la mise à niveau du début à la fin.