De mon côté, l’aventure IT a commencé en décembre 1995 avec mon tout premier ordinateur : un 486 SX-33 développé par Intel. Je ne saurais me rappeler de sa quantité de mémoire vive, mais je pense que je pouvais les compter sur les doigts d’une seule main 🤣.
![L’attribut alt de cette image est vide, son nom de fichier est image-1.png.](https://jloulinux.azurewebsites.net/wp-content/uploads/2024/08/image-1.png)
Plus sérieusement, que ce passe-t-il si une application métier, toujours fonctionnelle et devant perdurer, doit être migrée au plus vite pour une raison X ?
Microsoft a peut-être une réponse grâce au le service Azure Migrate :
Azure Migrate offre un service simplifié de migration, de modernisation et d’optimisation pour Azure. Toutes les étapes de pré-migration telles que la détection, les évaluations et le dimensionnement des ressources locales sont incluses pour l’infrastructure, les données et les applications. L’infrastructure extensible d’Azure Migrate permet d’intégrer des outils tiers, ce qui augmente l’étendue des cas d’utilisation pris en charge.
Pour vous faire une meilleure idée d’Azure Migrate, un atelier exercice dédié à la migration vers Azure conçu par Microsoft avait déjà été détaillé sur ce blog juste ici.
Comme le montre le schéma ci-dessous, l’objectif de cet exercice est de migrer plusieurs serveurs virtuels gérés sous un serveur Hyper-V vers le Cloud Azure :
Qu’est-ce que Disk2vhd ?
Il s’agit d’un petit utilitaire très pratique développé par Mark Russinovich et disponible dans la suite Sysinternals :
Disk2vhd est un utilitaire qui crée des versions VHD (Virtual Hard Disk – Microsoft’s Virtual Machine disk format) de disques physiques à utiliser dans Microsoft Virtual PC ou Microsoft Hyper-V virtual machines (VMs). La différence entre Disk2vhd et d’autres outils physiques à virtuels est que vous pouvez exécuter Disk2vhd sur un système en ligne.
Disk2vhd utilise la capacité d’instantané de volume de Windows, introduite dans Windows XP, pour créer des instantanés cohérents à un instant donné des volumes que vous souhaitez inclure dans une conversion. Vous pouvez même demander à Disk2vhd de créer les VHD sur des volumes locaux, même ceux en cours de conversion (bien que les performances soient meilleures lorsque le VHD se trouve sur un disque différent de ceux en cours de conversion).
Au travers de ce nouvel article, je souhaitais tester avec vous la copie de plusieurs serveurs physiques fonctionnant sous d’anciens OS afin de tester un portage rapide et simple vers Azure :
Windows XP Professional- Windows 7 Professional x64
- Windows 10 Enterprise x64
- Windows Server 2008 R2 x64
- Windows Server 2012 R2 x64
- Windows Server 2016 x64
Pour cela, cet article repose sur la méthode de préparation d’un fichier VHD proposée par Microsoft et exposée juste ici, dont les principales commandes de préparation sont disponibles sur mon GitHub.
- Etape 0 – Rappel des prérequis
- Etape I – Préparation de la machine virtuelle hôte (Hyper-V)
- Etape II – Création de la machine virtuelle invitée
- Etape III – Génération du fichier VHD
- Etape IV – Préparation du fichier VHD
- Etape V – Création de la machine virtuelle Azure
Etape 0 – Rappel des prérequis :
Pour réaliser cet exercice de migration individuelle, il vous faudra disposer de :
- Un tenant Microsoft
- Une souscription Azure valide
N’ayant pas d’anciens serveurs physiques à disposition, j’ai choisi de les simuler grâce à un environnement virtualisé Hyper-V recréé sous Azure.
Il est en effet possible dans Azure d’imbriquer de la virtualisation. Cela demande malgré tout quelques exigences, comme le SKU de la machine virtuelle Hyper-V, mais aussi sa génération.
Etape I – Préparation de la machine virtuelle hôte (Hyper-V) :
Depuis le portail Azure, commencez par rechercher le service des machines virtuelles :
![L’attribut alt de cette image est vide, son nom de fichier est image-2.png.](https://jloulinux.azurewebsites.net/wp-content/uploads/2024/08/image-2.png)
Cliquez-ici pour créer votre machine virtuelle hôte (Hyper-V) :
![L’attribut alt de cette image est vide, son nom de fichier est image-3.png.](https://jloulinux.azurewebsites.net/wp-content/uploads/2024/08/image-3.png)
Renseignez tous les champs, en prenant soin de bien sélectionner les valeurs suivantes :
![L’attribut alt de cette image est vide, son nom de fichier est image-4-1024x680.png.](https://jloulinux.azurewebsites.net/wp-content/uploads/2024/08/image-4-1024x680.png)
Choisissez une taille de machine virtuelle présent dans la famille Dsv3, puis cliquez sur Suivant :
![L’attribut alt de cette image est vide, son nom de fichier est image-5.png.](https://jloulinux.azurewebsites.net/wp-content/uploads/2024/08/image-5.png)
Rajoutez un second disque pour stocker la ou les futures machines virtuelles invitées :
![L’attribut alt de cette image est vide, son nom de fichier est image-6.png.](https://jloulinux.azurewebsites.net/wp-content/uploads/2024/08/image-6.png)
Conservez les options par défaut, puis cliquez sur OK :
![L’attribut alt de cette image est vide, son nom de fichier est image-7.png.](https://jloulinux.azurewebsites.net/wp-content/uploads/2024/08/image-7.png)
Cliquez ensuite sur Suivant :
![L’attribut alt de cette image est vide, son nom de fichier est image-8.png.](https://jloulinux.azurewebsites.net/wp-content/uploads/2024/08/image-8.png)
Retirez l’adresse IP publique pour des questions de sécurité, puis lancez la validation Azure :
![L’attribut alt de cette image est vide, son nom de fichier est image-9.png.](https://jloulinux.azurewebsites.net/wp-content/uploads/2024/08/image-9.png)
Une fois la validation réussie, lancez la création des ressources Azure :
![L’attribut alt de cette image est vide, son nom de fichier est image-10-1024x793.png.](https://jloulinux.azurewebsites.net/wp-content/uploads/2024/08/image-10-1024x793.png)
Quelques minutes plus tard, cliquez-ici pour voir votre machine virtuelle hôte (Hyper-V) :
![L’attribut alt de cette image est vide, son nom de fichier est image-11-1024x454.png.](https://jloulinux.azurewebsites.net/wp-content/uploads/2024/08/image-11-1024x454.png)
Ensuite, cliquez-ici pour déployer le service Azure Bastion :
![L’attribut alt de cette image est vide, son nom de fichier est image-12-1024x444.png.](https://jloulinux.azurewebsites.net/wp-content/uploads/2024/08/image-12-1024x444.png)
Attendez quelques minutes la fin du déploiement d’Azure Bastion, indispensable pour continuer les prochaines opérations :
![L’attribut alt de cette image est vide, son nom de fichier est image-14.png.](https://jloulinux.azurewebsites.net/wp-content/uploads/2024/08/image-14.png)
Peu après, constatez le déploiement réussi d’Azure Bastion, puis renseignez les identifiants renseignés lors de la création de votre VM hôte (Hyper-V) :
![L’attribut alt de cette image est vide, son nom de fichier est image-16.png.](https://jloulinux.azurewebsites.net/wp-content/uploads/2024/08/image-16.png)
Une fois connecté sur votre machine virtuelle hôte (Hyper-V), ouvrez Windows PowerShell :
![L’attribut alt de cette image est vide, son nom de fichier est image-17.png.](https://jloulinux.azurewebsites.net/wp-content/uploads/2024/08/image-17.png)
Exécutez la commande suivante pour installer les deux rôles suivants :
- Rôle DHCP
- Rôle Hyper-V
Install-WindowsFeature -Name DHCP,Hyper-V –IncludeManagementTools
Attendez environ une minute que l’installation des 2 rôles se termine :
![L’attribut alt de cette image est vide, son nom de fichier est image-18.png.](https://jloulinux.azurewebsites.net/wp-content/uploads/2024/08/image-18.png)
Lancez la commande suivante pour lancer un redémarrage immédiat de votre VM hôte (Hyper-V) :
Shutdown -R
![L’attribut alt de cette image est vide, son nom de fichier est image-19.png.](https://jloulinux.azurewebsites.net/wp-content/uploads/2024/08/image-19.png)
Attendez environ 30 secondes que le redémarrage se termine pour vous reconnecter à celle-ci, toujours via le service Azure Bastion :
![L’attribut alt de cette image est vide, son nom de fichier est image-20.png.](https://jloulinux.azurewebsites.net/wp-content/uploads/2024/08/image-20.png)
Une fois la session Bastion rouverte, ouvrez PowerShell en mode ISE :
![L’attribut alt de cette image est vide, son nom de fichier est image-21.png.](https://jloulinux.azurewebsites.net/wp-content/uploads/2024/08/image-21.png)
Lancez le script suivant afin de créer un switch virtuel dans Hyper-V de type interne :
$switchName = "InternalNAT"
New-VMSwitch -Name $switchName -SwitchType Internal
New-NetNat –Name $switchName –InternalIPInterfaceAddressPrefix “192.168.0.0/24”
$ifIndex = (Get-NetAdapter | ? {$_.name -like "*$switchName)"}).ifIndex
New-NetIPAddress -IPAddress 192.168.0.1 -InterfaceIndex $ifIndex -PrefixLength 24
![L’attribut alt de cette image est vide, son nom de fichier est image-22.png.](https://jloulinux.azurewebsites.net/wp-content/uploads/2024/08/image-22.png)
Lancez le script suivant afin de configurer un périmètre DHCP avec une règle de routage, couplé au serveur DNS d’Azure :
Add-DhcpServerV4Scope -Name "DHCP-$switchName" -StartRange 192.168.0.50 -EndRange 192.168.0.100 -SubnetMask 255.255.255.0
Set-DhcpServerV4OptionValue -Router 192.168.0.1 -DnsServer 168.63.129.16
Restart-service dhcpserver
![L’attribut alt de cette image est vide, son nom de fichier est image-23.png.](https://jloulinux.azurewebsites.net/wp-content/uploads/2024/08/image-23.png)
Ouvrez le Gestionnaire de disques depuis le menu démarrer afin de configurer le disque de données ajouté sur votre VM hôte (Hyper-V) :
![L’attribut alt de cette image est vide, son nom de fichier est image-24.png.](https://jloulinux.azurewebsites.net/wp-content/uploads/2024/08/image-24.png)
Dès l’ouverture du Gestionnaire de disques, cliquez sur OK pour démarrer l’initialisation du disque de données :
![L’attribut alt de cette image est vide, son nom de fichier est image-25.png.](https://jloulinux.azurewebsites.net/wp-content/uploads/2024/08/image-25.png)
Sur celui-ci, créez un nouveau volume :
![L’attribut alt de cette image est vide, son nom de fichier est image-26.png.](https://jloulinux.azurewebsites.net/wp-content/uploads/2024/08/image-26.png)
Cliquez sur Suivant :
![L’attribut alt de cette image est vide, son nom de fichier est image-27.png.](https://jloulinux.azurewebsites.net/wp-content/uploads/2024/08/image-27.png)
Cliquez sur Suivant :
![L’attribut alt de cette image est vide, son nom de fichier est image-28.png.](https://jloulinux.azurewebsites.net/wp-content/uploads/2024/08/image-28.png)
Cliquez sur Suivant :
![L’attribut alt de cette image est vide, son nom de fichier est image-29.png.](https://jloulinux.azurewebsites.net/wp-content/uploads/2024/08/image-29.png)
Cliquez sur Suivant :
![L’attribut alt de cette image est vide, son nom de fichier est image-30.png.](https://jloulinux.azurewebsites.net/wp-content/uploads/2024/08/image-30.png)
Cliquez sur Terminer :
![L’attribut alt de cette image est vide, son nom de fichier est image-31.png.](https://jloulinux.azurewebsites.net/wp-content/uploads/2024/08/image-31.png)
L’environnement Hyper-V est maintenant en place. Nous allons maintenant pouvoir créer ensemble une ou plusieurs machines virtuelles invitées.
Etape II – Création de la machine virtuelle invitée :
Pour cela, il est nécessaire de récupérer l’image au format ISO afin de créer la machine virtuelle invitée, puis d’y installer l’OS. Pour ma part, je suis passé par mon abonnement Visual Studio :
![L’attribut alt de cette image est vide, son nom de fichier est image-32-1024x658.png.](https://jloulinux.azurewebsites.net/wp-content/uploads/2024/08/image-32-1024x658.png)
Stockez le fichier ISO sur le disque F de votre VM hôte (Hyper-V) :
![L’attribut alt de cette image est vide, son nom de fichier est image-33-1024x284.png.](https://jloulinux.azurewebsites.net/wp-content/uploads/2024/08/image-33-1024x284.png)
Depuis votre VM hôte (Hyper-V), ouvrez votre console Hyper-V Manager :
![L’attribut alt de cette image est vide, son nom de fichier est image-34.png.](https://jloulinux.azurewebsites.net/wp-content/uploads/2024/08/image-34.png)
Cliquez-ici pour créer votre machine virtuelle invitée :
![L’attribut alt de cette image est vide, son nom de fichier est image-35.png.](https://jloulinux.azurewebsites.net/wp-content/uploads/2024/08/image-35.png)
Cliquez sur Suivant :
![L’attribut alt de cette image est vide, son nom de fichier est image-36.png.](https://jloulinux.azurewebsites.net/wp-content/uploads/2024/08/image-36.png)
Modifier les informations suivantes pour pointer vers le nouveau lecteur créé sur la VM hôte (Hyper-V), puis cliquez sur Suivant :
![L’attribut alt de cette image est vide, son nom de fichier est image-37.png.](https://jloulinux.azurewebsites.net/wp-content/uploads/2024/08/image-37.png)
Choisissez Génération 1 :
![L’attribut alt de cette image est vide, son nom de fichier est image-38.png.](https://jloulinux.azurewebsites.net/wp-content/uploads/2024/08/image-38.png)
Modifier la taille de la mémoire vive allouée à la VM invitée, puis cliquez sur Suivant :
![L’attribut alt de cette image est vide, son nom de fichier est image-39.png.](https://jloulinux.azurewebsites.net/wp-content/uploads/2024/08/image-39.png)
Utilisez le switch créé précédemment, puis cliquez sur Suivant :
![L’attribut alt de cette image est vide, son nom de fichier est image-40.png.](https://jloulinux.azurewebsites.net/wp-content/uploads/2024/08/image-40.png)
Cliquez sur Suivant :
![L’attribut alt de cette image est vide, son nom de fichier est image-41.png.](https://jloulinux.azurewebsites.net/wp-content/uploads/2024/08/image-41.png)
Utilisez le fichier ISO téléchargé précédemment, puis cliquez sur Suivant :
![L’attribut alt de cette image est vide, son nom de fichier est image-42.png.](https://jloulinux.azurewebsites.net/wp-content/uploads/2024/08/image-42.png)
Cliquez sur Terminer pour finaliser la création de votre machine virtuelle invitée :
![L’attribut alt de cette image est vide, son nom de fichier est image-43.png.](https://jloulinux.azurewebsites.net/wp-content/uploads/2024/08/image-43.png)
Une fois la machine virtuelle invitée créée, modifiez sa configuration comme ceci :
![L’attribut alt de cette image est vide, son nom de fichier est image-44.png.](https://jloulinux.azurewebsites.net/wp-content/uploads/2024/08/image-44.png)
Modifiez le nombre de processeurs virtuels afin d’accélérer l’installation de Windows, puis cliquez sur OK :
![L’attribut alt de cette image est vide, son nom de fichier est image-45.png.](https://jloulinux.azurewebsites.net/wp-content/uploads/2024/08/image-45.png)
Répétez les mêmes opérations pour les autres OS dont vous souhaitez tester la migration vers Azure :
![L’attribut alt de cette image est vide, son nom de fichier est image-46-1024x190.png.](https://jloulinux.azurewebsites.net/wp-content/uploads/2024/08/image-46-1024x190.png)
Double-cliquez sur votre machine virtuelle invitée :
![L’attribut alt de cette image est vide, son nom de fichier est image-47.png.](https://jloulinux.azurewebsites.net/wp-content/uploads/2024/08/image-47.png)
Cliquez-ici pour lancer le démarrage de la VM invitée :
![L’attribut alt de cette image est vide, son nom de fichier est image-48.png.](https://jloulinux.azurewebsites.net/wp-content/uploads/2024/08/image-48.png)
Choisissez les informations de langue qui vous correspondent, puis cliquez sur Suivant :
![L’attribut alt de cette image est vide, son nom de fichier est image-49.png.](https://jloulinux.azurewebsites.net/wp-content/uploads/2024/08/image-49.png)
Lancez l’installation de Windows :
![L’attribut alt de cette image est vide, son nom de fichier est image-50.png.](https://jloulinux.azurewebsites.net/wp-content/uploads/2024/08/image-50.png)
Attendez que le démarrage de l’installation se lance, puis cliquez-ici pour ne pas renseigner de clef de licence Windows :
![L’attribut alt de cette image est vide, son nom de fichier est image-51.png.](https://jloulinux.azurewebsites.net/wp-content/uploads/2024/08/image-51.png)
Choisissez une version Desktop de Windows, puis cliquez sur Suivant :
![L’attribut alt de cette image est vide, son nom de fichier est image-52.png.](https://jloulinux.azurewebsites.net/wp-content/uploads/2024/08/image-52.png)
Acceptez les termes et conditions de Microsoft, puis cliquez sur Suivant :
![L’attribut alt de cette image est vide, son nom de fichier est image-53.png.](https://jloulinux.azurewebsites.net/wp-content/uploads/2024/08/image-53.png)
Sélectionnez l’installation personnalisée de Windows :
![L’attribut alt de cette image est vide, son nom de fichier est image-54.png.](https://jloulinux.azurewebsites.net/wp-content/uploads/2024/08/image-54.png)
Validez l’installation sur le seul disque disponible, puis cliquez sur Suivant :
![L’attribut alt de cette image est vide, son nom de fichier est image-55.png.](https://jloulinux.azurewebsites.net/wp-content/uploads/2024/08/image-55.png)
Attendez maintenant que l’installation de Windows commence :
![L’attribut alt de cette image est vide, son nom de fichier est image-56.png.](https://jloulinux.azurewebsites.net/wp-content/uploads/2024/08/image-56.png)
Lancez le redémarrage de la machine virtuelle invitée :
![L’attribut alt de cette image est vide, son nom de fichier est image-63.png.](https://jloulinux.azurewebsites.net/wp-content/uploads/2024/08/image-63.png)
Donnez à nom si nécessaire à votre compte local Windows et un mot de passe :
![L’attribut alt de cette image est vide, son nom de fichier est image-57.png.](https://jloulinux.azurewebsites.net/wp-content/uploads/2024/08/image-57.png)
La machine virtuelle invitée avec l’ancien OS Windows est maintenant en place. Comme pour une machine physique, nous allons maintenant générer un fichier VHD afin de pouvoir préparer l’OS à être remonté sur Azure.
Avant cela, quelques modifications sont nécessaires.
Etape III – Génération du fichier VHD :
Sur votre VM hôte (Hyper-V), créez un nouveau dossier contenant une ou plusieurs versions de l’outil Disk2vhd selon l’ancienneté de l’OS concerné :
- Windows Server 2012, 2016, Windows 10 -> Disk2vhd v2.02
- Windows Server 2008 R2, Windows 7 -> Disk2vhd v1.6
![L’attribut alt de cette image est vide, son nom de fichier est image-179.png.](https://jloulinux.azurewebsites.net/wp-content/uploads/2024/08/image-179.png)
Partagez ce dossier sur le réseau :
![L’attribut alt de cette image est vide, son nom de fichier est image-61.png.](https://jloulinux.azurewebsites.net/wp-content/uploads/2024/08/image-61.png)
Créez un second dossier dédié au VHD généré par l’outil Disk2vhd, puis partagez ce dossier sur le réseau :
![L’attribut alt de cette image est vide, son nom de fichier est image-181.png.](https://jloulinux.azurewebsites.net/wp-content/uploads/2024/08/image-181.png)
Depuis la machine virtuelle invitée, ouvrez l’application Disk2vhd depuis le premier partage, puis sauvegardez votre fichier VHD sur le second partage :
![L’attribut alt de cette image est vide, son nom de fichier est image-185.png.](https://jloulinux.azurewebsites.net/wp-content/uploads/2024/08/image-185.png)
Le traitement VSC peut prendre entre 5 minutes et 2 heures :
![L’attribut alt de cette image est vide, son nom de fichier est image-71.png.](https://jloulinux.azurewebsites.net/wp-content/uploads/2024/08/image-71.png)
Le message de succès apparaît alors à la fin du traitement :
![L’attribut alt de cette image est vide, son nom de fichier est image-72.png.](https://jloulinux.azurewebsites.net/wp-content/uploads/2024/08/image-72.png)
Effectuez ces mêmes opérations de génération du fichier VHD pour chacun des OS comme ceci :
![L’attribut alt de cette image est vide, son nom de fichier est image-187.png.](https://jloulinux.azurewebsites.net/wp-content/uploads/2024/08/image-187.png)
Fermez la session utilisateur de votre machine virtuelle invitée :
![L’attribut alt de cette image est vide, son nom de fichier est image-75.png.](https://jloulinux.azurewebsites.net/wp-content/uploads/2024/08/image-75.png)
Eteignez également votre machine virtuelle invitée :
![L’attribut alt de cette image est vide, son nom de fichier est image-76.png.](https://jloulinux.azurewebsites.net/wp-content/uploads/2024/08/image-76.png)
Effectuez ces opérations d’arrêt pour chacune des machines virtuelles invitées :
![L’attribut alt de cette image est vide, son nom de fichier est image-189.png.](https://jloulinux.azurewebsites.net/wp-content/uploads/2024/08/image-189.png)
Les machines virtuelles de départ sont maintenant toutes éteintes. Avant de pouvoir transférer le fichier VHD vers Azure, il est nécessaire d’effectuer plusieurs opérations au niveau de l’OS, mais également du fichier VHD.
Etape IV – Préparation du fichier VHD :
Pour cela, nous allons recréer de nouvelles machines virtuelles identiques, dans lesquelles nous allons passer plusieurs commandes PowerShell.
Toujours sur Hyper-V Manager, cliquez-ici pour créer une nouvelle machine virtuelle invitée :
![L’attribut alt de cette image est vide, son nom de fichier est image-78.png.](https://jloulinux.azurewebsites.net/wp-content/uploads/2024/08/image-78.png)
Cliquez sur Suivant :
![L’attribut alt de cette image est vide, son nom de fichier est image-79.png.](https://jloulinux.azurewebsites.net/wp-content/uploads/2024/08/image-79.png)
Modifier les informations suivantes, puis cliquez sur Suivant :
![L’attribut alt de cette image est vide, son nom de fichier est image-191.png.](https://jloulinux.azurewebsites.net/wp-content/uploads/2024/08/image-191.png)
Choisissez Génération 1 :
![L’attribut alt de cette image est vide, son nom de fichier est image-81.png.](https://jloulinux.azurewebsites.net/wp-content/uploads/2024/08/image-81.png)
Modifier la taille de la mémoire vive allouée à la VM invitée, puis cliquez sur Suivant :
![L’attribut alt de cette image est vide, son nom de fichier est image-82.png.](https://jloulinux.azurewebsites.net/wp-content/uploads/2024/08/image-82.png)
Utilisez le même switch que précédemment, puis cliquez sur Suivant :
![L’attribut alt de cette image est vide, son nom de fichier est image-83.png.](https://jloulinux.azurewebsites.net/wp-content/uploads/2024/08/image-83.png)
Rattachez le nouveau disque VHD généré via Disk2vhd, puis cliquez sur Suivant :
![L’attribut alt de cette image est vide, son nom de fichier est image-193.png.](https://jloulinux.azurewebsites.net/wp-content/uploads/2024/08/image-193.png)
Cliquez sur Terminer pour finaliser la création de votre machine virtuelle invitée :
![L’attribut alt de cette image est vide, son nom de fichier est image-195.png.](https://jloulinux.azurewebsites.net/wp-content/uploads/2024/08/image-195.png)
Une fois la machine virtuelle invitée créée, modifiez le nombre de processeurs virtuels, puis cliquez sur OK :
![L’attribut alt de cette image est vide, son nom de fichier est image-196.png.](https://jloulinux.azurewebsites.net/wp-content/uploads/2024/08/image-196.png)
Répétez les mêmes opérations pour les autres OS, puis double-cliquez sur une nouvelle machine virtuelle invitée :
![L’attribut alt de cette image est vide, son nom de fichier est image-198-1024x342.png.](https://jloulinux.azurewebsites.net/wp-content/uploads/2024/08/image-198-1024x342.png)
Cliquez-ici pour lancer le démarrage de la VM invitée :
![](/wp-content/uploads/2024/08/image-201.png)
Depuis le menu Démarrer, recherchez Windows PowerShell ISE en mode administrateur :
![](/wp-content/uploads/2024/08/image-202.png)
Confirmez le risque sécuritaire en cliquant sur Oui :
![](/wp-content/uploads/2024/08/image-203.png)
Ouvrez le fichier de script suivant, disponible sur mon GitHub :
![](/wp-content/uploads/2024/08/image-206.png)
Lancez la commande System File Checker (SFC) afin de vérifier les fichiers systèmes Windows :
sfc.exe /scannow
![](/wp-content/uploads/2024/08/image-207.png)
Quelques minutes plus tard, SFC vous confirme le succès du contrôle :
![](/wp-content/uploads/2024/08/image-208.png)
Lancez la commande netsh afin de réinitialiser les paramètre proxy :
netsh.exe winhttp reset proxy
![](/wp-content/uploads/2024/08/image-209.png)
Ouvrez via CMD en mode administrateur afin de lancez l’utilitaire Diskpart :
diskpart.exe
san policy=onlineall
exit
![](/wp-content/uploads/2024/08/image-210.png)
Configurez l’heure UTC pour Windows :
Set-ItemProperty -Path HKLM:\SYSTEM\CurrentControlSet\Control\TimeZoneInformation -Name RealTimeIsUniversal -Value 1 -Type DWord -Force
Set-Service -Name w32time -StartupType Automatic
![](/wp-content/uploads/2024/08/image-211.png)
Modifiez le profil d’alimentation en performances hautes :
powercfg.exe /setactive SCHEME_MIN
powercfg /setacvalueindex SCHEME_CURRENT SUB_VIDEO VIDEOIDLE 0
![](/wp-content/uploads/2024/08/image-212.png)
Réinitialisez les variables systèmes par défaut :
Set-ItemProperty -Path 'HKLM:\SYSTEM\CurrentControlSet\Control\Session Manager\Environment' -Name TEMP -Value "%SystemRoot%\TEMP" -Type ExpandString -Force
Set-ItemProperty -Path 'HKLM:\SYSTEM\CurrentControlSet\Control\Session Manager\Environment' -Name TMP -Value "%SystemRoot%\TEMP" -Type ExpandString -Force
![](/wp-content/uploads/2024/08/image-213.png)
Réinitialisez par défaut certains services Windows :
Get-Service -Name BFE, Dhcp, Dnscache, IKEEXT, iphlpsvc, nsi, mpssvc, RemoteRegistry |
Where-Object StartType -ne Automatic |
Set-Service -StartupType Automatic
Get-Service -Name Netlogon, Netman, TermService |
Where-Object StartType -ne Manual |
Set-Service -StartupType Manual
![](/wp-content/uploads/2024/08/image-214.png)
Activez le service bureau à distance RDP :
Set-ItemProperty -Path 'HKLM:\SYSTEM\CurrentControlSet\Control\Terminal Server' -Name fDenyTSConnections -Value 0 -Type DWord -Force
Set-ItemProperty -Path 'HKLM:\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services' -Name fDenyTSConnections -Value 0 -Type DWord -Force
![](/wp-content/uploads/2024/08/image-215.png)
Validez le port par défaut 3389 pour le protocole RDP :
![](/wp-content/uploads/2024/08/image-216.png)
L’auditeur écoute sur chaque interface réseau :
Set-ItemProperty -Path 'HKLM:\SYSTEM\CurrentControlSet\Control\Terminal Server\Winstations\RDP-Tcp' -Name LanAdapter -Value 0 -Type DWord -Force
![](/wp-content/uploads/2024/08/image-217.png)
Configurez le mode d’authentification au niveau du réseau (NLA) pour les connexions RDP selon l’OS :
Pour Windows Server 2012, 2016 et pour Windows 10 :
Set-ItemProperty -Path 'HKLM:\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp' -Name UserAuthentication -Value 1 -Type DWord -Force
Pour Windows Server 2008 R2 et pour Windows 7 :
Set-Itemproperty -path 'HKLM:\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp' -Name 'SecurityLayer' -value '0'
Set-Itemproperty -path 'HKLM:\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp' -Name 'UserAuthentication' -value '0'
![](/wp-content/uploads/2024/08/image-218.png)
Définissez la valeur keep-alive :
Set-ItemProperty -Path 'HKLM:\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services' -Name KeepAliveEnable -Value 1 -Type DWord -Force
Set-ItemProperty -Path 'HKLM:\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services' -Name KeepAliveInterval -Value 1 -Type DWord -Force
Set-ItemProperty -Path 'HKLM:\SYSTEM\CurrentControlSet\Control\Terminal Server\Winstations\RDP-Tcp' -Name KeepAliveTimeout -Value 1 -Type DWord -Force
![](/wp-content/uploads/2024/08/image-219.png)
Définissez les options de reconnexion :
Set-ItemProperty -Path 'HKLM:\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services' -Name fDisableAutoReconnect -Value 0 -Type DWord -Force
Set-ItemProperty -Path 'HKLM:\SYSTEM\CurrentControlSet\Control\Terminal Server\Winstations\RDP-Tcp' -Name fInheritReconnectSame -Value 1 -Type DWord -Force
Set-ItemProperty -Path 'HKLM:\SYSTEM\CurrentControlSet\Control\Terminal Server\Winstations\RDP-Tcp' -Name fReconnectSame -Value 0 -Type DWord -Force
![](/wp-content/uploads/2024/08/image-220.png)
Limitez le nombre de connexions simultanées :
Set-ItemProperty -Path 'HKLM:\SYSTEM\CurrentControlSet\Control\Terminal Server\Winstations\RDP-Tcp' -Name MaxInstanceCount -Value 4294967295 -Type DWord -Force
![](/wp-content/uploads/2024/08/image-221.png)
Supprimez tous les certificats auto-signés liés à l’écoute RDP :
if ((Get-Item -Path 'HKLM:\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp').Property -contains 'SSLCertificateSHA1Hash')
{
Remove-ItemProperty -Path 'HKLM:\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp' -Name SSLCertificateSHA1Hash -Force
}
![](/wp-content/uploads/2024/08/image-223.png)
Activez le pare-feu Windows sur les 3 profils réseaux (domaine, standard et public) :
Set-NetFirewallProfile -Profile Domain, Public, Private -Enabled True
![](/wp-content/uploads/2024/08/image-224.png)
Ouvrez l’explorateur de fichiers Windows, cliquez sur le menu Réseau, puis changez l’option suivante :
![](/wp-content/uploads/2024/08/image-225.png)
Activez l’option suivante :
![](/wp-content/uploads/2024/08/image-226.png)
Convertissez la connexion actuelle en réseau privé :
![](/wp-content/uploads/2024/08/image-227.png)
Activer le service à distance PowerShell :
![](/wp-content/uploads/2024/08/image-228.png)
Activez les règles de pare-feu suivantes pour autoriser le trafic RDP :
![](/wp-content/uploads/2024/08/image-230.png)
Activez la règle des requêtes ping à l’intérieur du réseau virtuel :
![](/wp-content/uploads/2024/08/image-231.png)
Créez les règles suivantes entrantes et sortantes point vers le service DNS d’Azure :
![](/wp-content/uploads/2024/08/image-232.png)
Ouvrez CMD en mode administrateur afin de lancer l’utilitaire Diskpart :
chkdsk.exe /f
![](/wp-content/uploads/2024/08/image-237.png)
Lancez le redémarrage de la machine virtuelle invitée :
![](/wp-content/uploads/2024/08/image-233.png)
N’appuyez sur aucune touche afin de lancer le contrôle du disque :
![](/wp-content/uploads/2024/08/image-239.png)
Attendez la fin de traitement :
![](/wp-content/uploads/2024/08/image-240.png)
Réouvrez la session Windows de votre machine virtuelle invitée :
![](/wp-content/uploads/2024/08/image-235.png)
Ouvrez CMD en mode administrateur afin de définir les paramètres des données de configuration de démarrage (BCD) :
cmd
bcdedit.exe /set "{bootmgr}" integrityservices enable
bcdedit.exe /set "{default}" device partition=C:
bcdedit.exe /set "{default}" integrityservices enable
bcdedit.exe /set "{default}" recoveryenabled Off
bcdedit.exe /set "{default}" osdevice partition=C:
bcdedit.exe /set "{default}" bootstatuspolicy IgnoreAllFailures
#Enable Serial Console Feature
bcdedit.exe /set "{bootmgr}" displaybootmenu yes
bcdedit.exe /set "{bootmgr}" timeout 5
bcdedit.exe /set "{bootmgr}" bootems yes
bcdedit.exe /ems "{current}" ON
bcdedit.exe /emssettings EMSPORT:1 EMSBAUDRATE:115200
exit
![](/wp-content/uploads/2024/08/image-241.png)
Réouvrez Windows PowerShell ISE en mode administrateur :
![](/wp-content/uploads/2024/08/image-236.png)
Activez la collecte des journaux d’erreur :
# Set up the guest OS to collect a kernel dump on an OS crash event
Set-ItemProperty -Path 'HKLM:\SYSTEM\CurrentControlSet\Control\CrashControl' -Name CrashDumpEnabled -Type DWord -Force -Value 2
Set-ItemProperty -Path 'HKLM:\SYSTEM\CurrentControlSet\Control\CrashControl' -Name DumpFile -Type ExpandString -Force -Value "%SystemRoot%\MEMORY.DMP"
Set-ItemProperty -Path 'HKLM:\SYSTEM\CurrentControlSet\Control\CrashControl' -Name NMICrashDump -Type DWord -Force -Value 1
![](/wp-content/uploads/2024/08/image-242.png)
# Set up the guest OS to collect user mode dumps on a service crash event
$key = 'HKLM:\SOFTWARE\Microsoft\Windows\Windows Error Reporting\LocalDumps'
if ((Test-Path -Path $key) -eq $false) {(New-Item -Path 'HKLM:\SOFTWARE\Microsoft\Windows\Windows Error Reporting' -Name LocalDumps)}
New-ItemProperty -Path $key -Name DumpFolder -Type ExpandString -Force -Value 'C:\CrashDumps'
New-ItemProperty -Path $key -Name CrashCount -Type DWord -Force -Value 10
New-ItemProperty -Path $key -Name DumpType -Type DWord -Force -Value 2
Set-Service -Name WerSvc -StartupType Manual
![](/wp-content/uploads/2024/08/image-243.png)
Vérifiez que le référentiel Windows Management Instrumentation (WMI) est toujours cohérent :
winmgmt.exe /verifyrepository
![](/wp-content/uploads/2024/08/image-244.png)
Assurez-vous qu’aucune autre application que TS n’utilise le port 3389 :
netstat.exe -anob | findstr 3389
![](/wp-content/uploads/2024/08/image-245.png)
Vérifiez les mises à jour Windows :
![](/wp-content/uploads/2024/08/image-249.png)
Lancez le redémarrage de la machine virtuelle invitée :
![](/wp-content/uploads/2024/08/image-250.png)
Depuis votre machine virtuelle hôte (Hyper-V), vérifiez la bonne ouverture de session RDP :
![](/wp-content/uploads/2024/08/image-253.png)
![](/wp-content/uploads/2024/08/image-256.png)
Eteignez votre machine virtuelle invitée :
![](/wp-content/uploads/2024/08/image-257.png)
Notre machine virtuelle invitée est maintenant prête à être migrée vers Azure. Pour cela, nous allons utilisez la commande PowerShell Add-AzVhd.
Etape V – Création de la machine virtuelle Azure :
Depuis le portail Azure, créez un nouveau groupe de ressources pour la machine virtuelle invitée dans le Cloud :
![](/wp-content/uploads/2024/08/image-258.png)
Depuis votre machine virtuelle hôte (Hyper-V), connectez-vous à votre environnement Azure via PowerShell ISE :
![](/wp-content/uploads/2024/08/image-259-1024x428.png)
Lancez les commandes PowerShell Azure suivantes afin de créer un disque managé Azure depuis le fichier VHD local :
Add-AzVhd -LocalFilePath C:\data.vhd -ResourceGroupName rgname -Location eastus -DiskName newDisk
![](/wp-content/uploads/2024/08/image-261-1024x426.png)
Une première étape de détection commence alors :
![](/wp-content/uploads/2024/08/image-263.png)
Suivi du calcul de Hash :
![](/wp-content/uploads/2024/08/image-264.png)
Pour finir par le transfert vers Azure :
![](/wp-content/uploads/2024/08/image-265.png)
Retournez sur le groupe de ressources Azure créé précédemment, constatez la présence d’un disque managé, puis cliquez dessus :
![](/wp-content/uploads/2024/08/image-262-1024x317.png)
Cliquez ici pour créer la machine virtuelle :
![](/wp-content/uploads/2024/08/image-267-1024x378.png)
Renseignez les informations de base :
![](/wp-content/uploads/2024/08/image-268-1024x682.png)
Choisissez la taille de votre VM, puis cliquez sur Suivant :
![](/wp-content/uploads/2024/08/image-269.png)
Sur l’onglet Réseau, reprenez le même réseau virtuel que celui utilisé pour votre machine virtuelle Hyper-V, puis lancez la validation Azure :
![](/wp-content/uploads/2024/08/image-270.png)
Une fois la validation Azure passée, lancez la création des ressources :
![](/wp-content/uploads/2024/08/image-271-1024x786.png)
Attendez quelques minutes le succès de la création de votre VM, puis cliquez ici :
![](/wp-content/uploads/2024/08/image-272-1024x476.png)
Attendez quelques minutes le démarrage complet de votre VM :
![](/wp-content/uploads/2024/08/image-275.png)
Vérifiez le bon démarrage de votre VM en actualisant si besoin plusieurs fois le screenshot suivant :
![](/wp-content/uploads/2024/08/image-276.png)
Constatez la présence de l’avertissement Azure suivant :
![](/wp-content/uploads/2024/08/image-273-1024x336.png)
Renseignez les identifiants renseignés lors de la création de votre VM invitée :
![](/wp-content/uploads/2024/08/image-274-1024x616.png)
Constatez la bonne ouverture de session Windows :
![](/wp-content/uploads/2024/08/image-277.png)
Une fois la session Windows ouverte, installez l’agent pour les machines virtuelles Azure disponible sur cette page GitHub :
![](/wp-content/uploads/2024/08/image-278.png)
Exécutez le fichier MSI d’installation depuis une session PowerShell avec les droits administrateurs :
![](/wp-content/uploads/2024/08/image-281.png)
Cliquez sur Suivant :
![](/wp-content/uploads/2024/08/image-282.png)
Acceptez les termes et conditions, puis cliquez sur Suivant :
![](/wp-content/uploads/2024/08/image-283.png)
Attendez quelques minutes la fin de l’installation de l’agent :
![](/wp-content/uploads/2024/08/image-284.png)
Cliquez sur Terminer :
![](/wp-content/uploads/2024/08/image-285.png)
Quelques minutes plus tard, constatez la disparition de l’alerte Azure sur votre VM :
![](/wp-content/uploads/2024/08/image-286-1024x305.png)
Vérifiez la bonne relation entre le management Azure et votre VM via le menu suivant :
![](/wp-content/uploads/2024/08/image-287-1024x350.png)
La commande suivante doit vous retourner la configuration IP renseignée sur votre VM :
![](/wp-content/uploads/2024/08/image-288.png)
Effectuez un test d’arrêt de votre machine virtuelle :
![](/wp-content/uploads/2024/08/image-289-1024x288.png)
Confirmez votre action en cliquant sur Oui :
![](/wp-content/uploads/2024/08/image-290.png)
Effectuez un test de démarrage de votre machine virtuelle :
![](/wp-content/uploads/2024/08/image-292-1024x385.png)
Vérifiez le succès des 2 opérations via les notifications Azure :
![](/wp-content/uploads/2024/08/image-294.png)
Cliquez-ici pour rouvrir la session Windows ouverte précédemment via Azure Bastion :
![](/wp-content/uploads/2024/08/image-293.png)
![](/wp-content/uploads/2024/08/image-295.png)
Effectuez les mêmes opérations pour les autres anciens OS à tester :
![](/wp-content/uploads/2024/08/image-298-1024x256.png)
Conclusion
Par cette démonstration, un portage rapide et en urgence de certaines anciennes versions Windows, client ou serveur, est parfaitement possible. Quelques manipulations de préparation sont nécessaires, mais ces dernières sont fonctionnelles pour les OS suivants :
- Windows 7 Professional x64
- Windows 10 Enterprise x64
- Windows Server 2008 R2 x64
- Windows Server 2012 R2 x64
- Windows Server 2016 x64