Manipulation du pagefile avec Powershell et scripting diskpart

Récemment, j'ai modifié mon template de machine virtuelle Windows Server porté par VMware pour y intégrer un deuxième disque virtuel afin d'y placer le fichier d'échange de Windows. Seulement, après génération de mon image Windows avec sysprep, mon deuxième disque n'est plus monté sur le système, et par conséquent ma configuration de fichier d'échange est invalide. J'ai donc dû traiter ce problème en deux temps : la première étape a été de faire en sorte de faire un batch pour diskpart afin de monter mon deuxième disque et l'initialiser correctement, et la deuxième étape a été de configurer le pagefile via Powshell afin de pouvoir intégrer le tout dans mon script de post-installation.

Tout d'abord, j'ai appris qu'il était possible de faire avaler à diskpart un fichier texte contenant les instructions qu'il doit exécuter à la suite. Par exemple, si je veux initialiser mon deuxième disque et affecter la lettre E à ma partition, je vais créer un fichier texte nommé "diskinit.txt" contenant ceci :

select disk 1
online disk
select partition 1
assign letter=E

Je conseille tout de même de tester une par une les commandes à la main pour s'assurer que cela fonctionne avant de les placer à la suite dans le fichier. Une fois que le fichier existe, il est possible d'appeler diskpart pour lui demander de traiter celui-ci, grâce au paramètre /s :

diskpart.exe /s diskinit.txt

Puisque cela fonctionne, j'ai dû m'atteler à la gestion du fichier d'échange sous Powershell. Il n'y a pas de commandlet natif sous Windows Server 2016 pour gérer le fichier d'échange comme un paramètre système standard. Il faut passer par WMI. Cette commande permet d'afficher les fichiers d'échange configurés sur la machine, uniquement si le fichier d'échange n'est pas gérée de manière automatique pour tous les disques du système :

Get-CimInstance -ClassName Win32_PagefileSetting

Maintenant que j'ai bien mon disque E:, je peux rajouter mon fichier d'échange sur cette partition et retirer celui présent sur le disque système.

New-CimInstance -ClassName Win32_PagefileSetting -Property @{Name "E:\pagefile.sys"}
Get-CimInstance -ClassName Win32_PagefileSetting | Where-Object { $_.Name -like "C:\pagefile.sys" } | Remove-CimInstance

A noter que cette instruction créée un fichier d'échange dont la taille est gérée par le système. Il est possible de spécifier une taille minimale et/ou maximale, en procédant par exemple comme ceci pour une taille mini de 1024 Mo et une taille maxi de 2048 Mo :

Get-CimInstance -ClassName Win32_PagefileSetting | Where-Object { $_.Name -like "E:\pagefile.sys" } | Set-CimInstance -Property @{InitialSize = 1024; MaximumSize = 2048}

Alternativement, ce qui est passé dans le dernier pipe peut être passé en pipe de l'instruction New-CimInstance exécutée en premier, afin d'avoir le bon réglage dès la création.

Vous pouvez trouver avoir bien plus de détails sur cette classe WMI et un script complet de gestion du pagefile via Powershell en suivant ce lien qui m'a aidé à comprendre et à scripter cette opération. 🙂

Création d'un support USB bootable d'installation de Windows

Il y avait aujourd'hui besoin de déployer un Windows Server 2016 sur une machine qui n'est pas supportée par le WDS. Situation habituelle dans un service IT : il y avait 3 clefs USB destinées aux installations de Windows, mais on en a prêté une, l'autre on s'en est servie pour faire du transfert de data, et l'autre... ben y a un 2012 dessus. Du coup, on se retrouve toujours dans la situation où l'on finit par trouver quelque part une clef USB et qu'on doit en faire un support d'installation. Et là, aussi con que ça puisse paraître, il y a toujours la petite question qu'on se pose : "comment on fait pour créer un support d'install de Windows déjà ?"..

Si il est possible d'utiliser par exemple une appli tierce comme Rufus, ou des outils Microsoft, j'ai découvert - à ma grande surprise d'ailleurs - qu'il était possible de réaliser une clef USB bootable d'installation de Windows grâce à diskpart et le fichier ISO du système d'exploitation que l'on va installer.
On ouvre une invite de commande, puis on exécute diskpart.
list disk nous renvoie tous les disques qui sont connectés au système, on va donc select disk xx est bien évidemment le numéro représentant le support USB.
clean efface les partitions présentes ; bien évidemment on aura pris le soin de choisir une clef dont le contenu n'est pas important...
create partition primary pour recréer une partition principale ;
active comme son nom l'indique, active la partition ;
format fs=ntfs quick pour formater ladite partition ; le quick permet de faire un formatage rapide, qui ne dure que quelques secondes ;
Et enfin, on finit par un assign pour donner une lettre dans l'explorateur à cette partition fraîchement formatée.
Ensuite, il ne reste plus qu'à décomposer avec 7-Zip par exemple le fichier ISO d'installation de Windows et à copier les répertoires extraits sur le support USB. Le fichier sources\boot.wim est le fichier qui va permettre au système d'installation de s'amorcer proprement.