# Introduction

Ce tutoriel couvre l'installation d'un système d'exploitation Windows sur du matériel dédié sans utiliser de console KVM.

## Prérequis
- Un serveur dédié fonctionnant dans un système de secours
- Plus de 8 Go de RAM sur le serveur

# Étape 1 - Préparer le serveur

Une fois que le serveur est dans le Système de Sauvetage (Linux x64), le logiciel suivant doit être installé:

 ```cmd
 apt update && apt install qemu-kvm
 ```

Ensuite, un ISO Windows doit être transféré sur le serveur. Les options possibles sont:

Windows Server 2025 (FR): [Télécharger](https://mirror.hetzner.de/bootimages/windows/SW_DVD9_Win_Server_STD_CORE_2025_24H2_64Bit_English_DC_STD_MLF_X23-81891.ISO)

```cmd
wget https://mirror.hetzner.de/bootimages/windows/SW_DVD9_Win_Server_STD_CORE_2025_24H2_64Bit_English_DC_STD_MLF_X23-81891.ISO
```

*Attention Toutes les données sur le drive(s) seront supprimées lors des prochaines étapes.*

Si le serveur a un lecteur NVME installé, le nom du lecteur peut être `/dev/nvme0n1` au lieu de `/dev/sda`. Pour obtenir les noms des lecteurs, vous pouvez exécuter `lsblk`

Commencer parted sur le disque désiré:
```cmd
parted /dev/nvme0n1
```

Création de la table de partition pour les lecteurs de moins de 2 To:
```cmd
mklabel msdos
```

Création de la table de partition pour les lecteurs de plus de 2 To:
```cmd
mklabel gpt
```

Le tout devrait ressembler à ceci:
```cmd
root@rescue ~ # parted /dev/nvme0n1
GNU Parted 3.2
Using /dev/nvme0n1
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) [mklabel msdos]
Warning: The existing disk label on /dev/nvme0n1 will be destroyed and all data on this disk will be
lost. Do you want to continue?
Yes/No? [yes]
(parted) [quit]
Information: You may need to update /etc/fstab.
```
*Toutes les entrées sont bordées de [ ]*

# Étape 2 - Création d'un tunnel SSH

Quitté la console et reouvrir cmd

Pour une installation ultérieure via VNC, un tunnel SSH est nécessaire. Sinon, l'installation peut être consultée ouvertement sur Internet.

Sous Linux et Windows avec OpenSSH installé, exécutez simplement la commande suivante localement et connectez-vous au serveur:

```cmd
ssh -L 8888:127.0.0.1:5901 root@your_host
```

# Étape 3 - Démarrage de l'installation de Windows

Maintenant, vous pouvez commencer avec l'installation réelle de Windows. Vérifiez d'abord si votre machine utilise UEFI ou BIOS pour démarrer:
```cmd
[ -d "/sys/firmware/efi" ] && echo "UEFI" || echo "BIOS"
```

Maintenant, exécutez l'une des commandes suivantes (modifiées en conséquence) sur le serveur:

- Avec BIOS:
*Avec Windows Server 2025, vous devez également ajouter -cpu host*
```cmd
qemu-system-x86_64 -enable-kvm -smp 4 -m 4096 -usbdevice tablet -k fr -boot d -cdrom SW_DVD9_Win_Server_STD_CORE_2025_24H2_64Bit_English_DC_STD_MLF_X23-81891.ISO -cpu host -drive file=/dev/sda,format=raw,media=disk -vnc 127.0.0.1:1
```

- Avec UEFI:
*Avec Windows Server 2025, vous devez également ajouter -cpu host*
```cmd
qemu-system-x86_64 -bios /usr/share/ovmf/OVMF.fd -enable-kvm -smp 48 -m 16g -usbdevice tablet -k en-us -boot d -cdrom SW_DVD9_Win_Server_STD_CORE_2025_24H2_64Bit_English_DC_STD_MLF_X23-81891.ISO -cpu host -drive file=/dev/sda,format=raw,media=disk -vnc 127.0.0.1:1
```

**Option    Signification**
-smp    Nombre de cœurs CPU
-m  Taille de la RAM utilisée
-cdrom  Chemin vers l'image ISO
-drive  disque dur sur lequel le système doit être installé
-vnc    Paramètres du serveur VNC

Ensuite, vous pouvez démarrer l'installation via VNC. Vous pouvez vous connecter à une visionneuse VNC de votre choix à l'adresse suivante: `127.0.0.1:8888`.

# Étape 4 - Configuration automatique de l'IP

Vous devez créer une tâche planifiée qui exécute le script PowerShell ci-dessous. Ce script ajoutera la configuration réseau correcte au serveur lorsqu'il démarre à partir de l'installation de Windows.

Gateway: 168.119.35.129
Netmask: 255.255.255.192
Broadcast: 168.119.35.191
IP Principale 168.119.35.191

```ps1
$IPAddress = "168.119.35.155"
$Gateway = "168.119.35.129"
$PrefixLength = 26
$DnsServers = @("8.8.8.8", "1.1.1.1")

foreach ($Adapter in Get-NetAdapter) {
    New-NetIPAddress -IPAddress $IPAddress -PrefixLength $PrefixLength -DefaultGateway $Gateway -InterfaceIndex $Adapter.InterfaceIndex
    Set-DnsClientServerAddress -InterfaceIndex $Adapter.InterfaceIndex -ServerAddresses $DnsServers
}
```

Les valeurs entre parenthèses doivent être ajustées en conséquence et le script doit alors être stocké sous 'C:\script.ps1'.

Suivez ces étapes pour configurer la tâche planifiée:

- 1.Définir les options de démarrage
![task01](images\task01.png "task01")

- 2.Définir les actions
![task02](images\task02.png "task02")

- 3.Entrez les options PowerShell `-ExecutionPolicy Bypass -File C:\script.ps1`
![task03](images\task03.png "task03")

- 4.Aperçu des options de tâche
![task04](images\task04.png "task04")

- 5.Les options de sécurité doivent être définies de manière à ce que le script démarre également sans connexion utilisateur.
![task](images\task.png "task")

# Étape 5 - Activer RDP et désactiver le pare-feu

Pour minimiser d'autres sources d'erreur, il est logique de désactiver le Pare-feu Windows ou d'autoriser les règles entrantes suivantes dans le Pare-feu Windows Defender:

```md
# Windows Defender Firewall with Advanced Security
Name                                  Group           Profile Enabled Action
Remote Desktop - Shadow (TCP-In)      Remote Desktop  All     Yes     Allow
Remote Desktop - User Mode (TCP-In)   Remote Desktop  All     Yes     Allow
Remote Desktop - User Mode (UDP-In)   Remote Desktop  All     Yes     Allow
```

*Désactivé le Pare-feu jusqua l'étape 7!*

Pour vous connecter au serveur via RDP plus tard, vous devez activer ceci:
![RDP](images\RDP.png "RDP")

Vous pouvez maintenant arrêter Windows et redémarrer le serveur. Après quelques minutes, il devrait être possible de se connecter au serveur via RDP.

# Étape 7 - Désactiver le script

Vous devez maintenant désactiver à nouveau la tâche planifiée et vérifier le pare-feu en conséquence et l'allumer à nouveau. Dans les paramètres réseau, vous devez définir les serveurs DNS, car ceux-ci n'ont pas été définis avec le script.
Hjälpte svaret dig? 0 användare blev hjälpta av detta svar (0 Antal röster)

Powered by WHMCompleteSolution