Vous interrogez Win32_PageFileSetting
et obtenez systématiquement « 0 instance », alors que pagefile.sys
est présent ? Voici l’explication, les solutions durables et les alternatives PowerShell pour l’inventaire et le dépannage sur Windows 10/11 et Windows Server.
Interrogation de Win32_PageFileSetting
renvoyant une réponse vide
Problème observé
- Toutes les commandes WMI/CIM (
Get-WmiObject
,Get-CimInstance
, requêtes WQL,wmic
) renvoient zéro instance pour la classeWin32_PageFileSetting
, sur des postes Windows 10/11 et des serveurs Windows Server 2016 → 2025. - Les tests réalisés en PowerShell 5.1 (mode administrateur,
-Property *
, etc.) n’y changent rien. - Pourtant, le fichier d’échange
pagefile.sys
existe et est utilisé par le système.
Exemples typiques
# WMI (hérité)
Get-WmiObject -Class Win32_PageFileSetting
# CIM (recommandé)
Get-CimInstance -ClassName Win32_PageFileSetting
# WQL
Get-CimInstance -Query "SELECT * FROM Win32_PageFileSetting"
# WMIC
wmic pagefileset list /format:list
Dans tous ces cas, la sortie peut être vide ou ne pas contenir d’objet Win32_PageFileSetting
.
Pourquoi ça arrive
Win32_PageFileSetting
ne reflète que la configuration statique du fichier d’échange (chemin, taille minimale et maximale). Lorsque l’option « Gestion automatique du fichier d’échange » est activée, Windows ne conserve pas (ou ne matérialise pas) de taille fixe dans la configuration ; la classe Win32_PageFileSetting
n’a alors aucune instance à exposer. C’est un comportement normal par conception : pas d’entrée statique ⇢ pas d’objet WMI.
À l’inverse, l’état courant du fichier d’échange (taille allouée, utilisation et pic) est accessible via Win32_PageFileUsage
, même quand la gestion est automatique.
Ce qu’il faut retenir
- Gestion auto activée :
Win32_PageFileSetting
retourne zéro instance (normal) ; utilisezWin32_PageFileUsage
pour l’état runtime. - Taille fixe définie :
Win32_PageFileSetting
expose une ou plusieurs instances (une par entrée statique). - Propriété de contrôle : le booléen
AutomaticManagedPagefile
deWin32_ComputerSystem
indique si Windows gère le fichier d’échange automatiquement.
Solution
Créer une entrée statique (interface graphique)
- Ouvrez Panneau de configuration ▸ Système puis Paramètres système avancés.
- Cliquez sur Performances ▸ Avancé ▸ Mémoire virtuelle.
- Décochez « Gestion automatique du fichier d’échange pour tous les lecteurs ».
- Sélectionnez un lecteur, puis choisissez Taille personnalisée (indiquez Taille initiale et maximale) ou Taille gérée par le système par lecteur (ce choix par lecteur crée également une entrée explicite).
- Validez et redémarrez l’ordinateur.
Après redémarrage, la requête expose désormais l’objet configuré :
Get-CimInstance -ClassName Win32_PageFileSetting |
Select-Object Name, InitialSize, MaximumSize
Alternative : obtenir l’état sans toucher à la configuration
Si vous ne souhaitez pas modifier la machine (inventaire, supervision), interrogez Win32_PageFileUsage
:
Get-CimInstance -ClassName Win32_PageFileUsage |
Select-Object Name, AllocatedBaseSize, CurrentUsage, PeakUsage
Et pour savoir si la gestion automatique est active :
(Get-CimInstance -ClassName Win32_ComputerSystem).AutomaticManagedPagefile
En combinant les deux approches, vous couvrez à la fois l’état runtime et la configuration statique quand elle existe.
Référence rapide des classes et propriétés utiles
Classe / Propriété | Rôle | Disponibilité avec « gestion auto » | Quand l’utiliser |
---|---|---|---|
Win32_PageFileSetting | Paramètres statiques (chemin, taille min/max) | Souvent aucune instance | Audit de configuration figée, conformité |
Win32_PageFileUsage | Taille allouée, utilisation courante, pic, chemin | Toujours renseigné | Inventaire runtime, capacité, surveillance |
Win32_ComputerSystem – AutomaticManagedPagefile | Indique si le fichier d’échange est géré automatiquement | Toujours renseigné | Décision d’audit : auto vs statique |
Vérifications rapides en PowerShell
# 1) La gestion automatique est-elle active ?
(Get-CimInstance -ClassName Win32_ComputerSystem).AutomaticManagedPagefile
# 2) Quelles sont les entrées statiques (s’il y en a) ?
Get-CimInstance -ClassName Win32_PageFileSetting |
Select-Object Name, InitialSize, MaximumSize
# 3) Qu’est-ce qui est réellement alloué / utilisé ?
Get-CimInstance -ClassName Win32_PageFileUsage |
Select-Object Name, AllocatedBaseSize, CurrentUsage, PeakUsage
# 4) Valeur de registre effective (attention : lecture seule recommandée)
(Get-ItemProperty 'HKLM:\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management').PagingFiles
Procédures avancées
Définir une taille fixe par script (avec redémarrage)
Cette procédure crée une entrée statique claire, visible dans Win32_PageFileSetting
. À utiliser dans un change contrôlé ; un redémarrage est requis pour que Windows réalloue le fichier.
$drive = 'C:'
$minMB = 4096 # taille initiale
$maxMB = 8192 # taille maximale
# 1) Désactiver la gestion automatique
$cs = Get-CimInstance -ClassName Win32_ComputerSystem
Set-CimInstance -InputObject $cs -Property @{ AutomaticManagedPagefile = $false }
# 2) Écrire l’entrée statique (registre)
$regPath = 'HKLM:\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management'
$entry = "{0}\pagefile.sys {1} {2}" -f $drive, $minMB, $maxMB
Set-ItemProperty -Path $regPath -Name PagingFiles -Type MultiString -Value $entry
# 3) Redémarrage requis pour prise en compte
Write-Host 'Redémarrez la machine pour appliquer la nouvelle taille du pagefile.'
Astuce : pour plusieurs lecteurs, définissez une valeur par ligne (REG_MULTI_SZ) :
$values = @(
'C:\pagefile.sys 4096 8192',
'D:\pagefile.sys 2048 4096'
)
Set-ItemProperty -Path $regPath -Name PagingFiles -Type MultiString -Value $values
Récupérer l’état sur un parc de machines sans interruption
Pour l’inventaire à grande échelle, utilisez des sessions CIM et Win32_PageFileUsage
(aucun changement de configuration, compatible gestion auto) :
$computers = @('PC-001','PC-002','SRV-01') # ou Get-Content .\machines.txt
$sessions = New-CimSession -ComputerName $computers -ErrorAction SilentlyContinue
$report = foreach ($s in $sessions) {
try {
$cs = Get-CimInstance -Class Win32_ComputerSystem -CimSession $s
$pfUse = Get-CimInstance -Class Win32_PageFileUsage -CimSession $s -ErrorAction Stop
$pfSet = Get-CimInstance -Class Win32_PageFileSetting -CimSession $s -ErrorAction SilentlyContinue
[PSCustomObject]@{
ComputerName = $s.ComputerName
AutoManaged = $cs.AutomaticManagedPagefile
PageFileSettingCnt = @($pfSet).Count
PageFilesInUse = ($pfUse | ForEach-Object Name) -join '; '
AllocatedMB_Total = ($pfUse | Measure-Object -Sum -Property AllocatedBaseSize).Sum
CurrentUsageMB = ($pfUse | Measure-Object -Sum -Property CurrentUsage).Sum
PeakUsageMB = ($pfUse | Measure-Object -Sum -Property PeakUsage).Sum
}
} catch {
[PSCustomObject]@{
ComputerName = $s.ComputerName
AutoManaged = $null
PageFileSettingCnt = $null
PageFilesInUse = $null
AllocatedMB_Total = $null
CurrentUsageMB = $null
PeakUsageMB = $null
Error = $_.Exception.Message
}
}
}
$report | Sort-Object ComputerName | Format-Table -AutoSize
# Export-CSV .\pagefile-inventory.csv -NoTypeInformation -Encoding UTF8
Exemples de résultats attendus
Gestion automatique activée
PS> (Get-CimInstance -Class Win32_ComputerSystem).AutomaticManagedPagefile
True
PS> Get-CimInstance -Class Win32_PageFileSetting
# (aucune sortie)
PS> Get-CimInstance -Class Win32_PageFileUsage |
Select Name,AllocatedBaseSize,CurrentUsage,PeakUsage
Name AllocatedBaseSize CurrentUsage PeakUsage
---
C:\pagefile.sys 2436 128 512
Taille fixe (entrée statique créée)
PS> (Get-CimInstance -Class Win32_ComputerSystem).AutomaticManagedPagefile
False
PS> Get-CimInstance -Class Win32_PageFileSetting |
Select Name,InitialSize,MaximumSize
Name InitialSize MaximumSize
---
C:\pagefile.sys 4096 8192
PS> Get-CimInstance -Class Win32_PageFileUsage |
Select Name,AllocatedBaseSize,CurrentUsage,PeakUsage
Name AllocatedBaseSize CurrentUsage PeakUsage
---
C:\pagefile.sys 4096 212 650
Cas particuliers et points d’attention
- Plusieurs volumes : Windows peut répartir les fichiers d’échange ;
Win32_PageFileUsage
retournera une instance par fichier (C:, D:, …). Agrégez les tailles si vous cherchez un total. - Serveur sans pagefile : c’est possible mais déconseillé dans la plupart des scénarios. Si aucun fichier n’est présent,
Win32_PageFileUsage
peut ne rien renvoyer non plus. Documentez explicitement ce cas dans vos politiques. - WMIC/WMI vs CIM :
Get-WmiObject
etwmic
sont hérités. PréférezGet-CimInstance
(protocole WS-Man, meilleure fiabilité et remoting). - Redémarrage : tout changement de taille/statut du pagefile exige un redémarrage pour être effectif.
- Registre : la valeur
PagingFiles
(REG_MULTI_SZ) se trouve sousHKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management
. En gestion auto, il peut ne pas y avoir de tailles fixes associées. - Permissions : pour modifier la configuration, exécutez PowerShell en administrateur. Pour l’inventaire pur, des droits de lecture suffisent.
- Remoting : ouvrez WinRM (5985/5986) ou utilisez DCOM si nécessaire. Sur des réseaux segmentés, un proxy de gestion (Gateway) peut simplifier l’accès.
Modèle d’inventaire riche (statique + runtime)
Le bloc ci-dessous produit un objet consolidé mélangeant statique (s’il existe) et runtime. Idéal pour un pipeline vers CSV/JSON.
$cs = Get-CimInstance -Class Win32_ComputerSystem
$pfSet = Get-CimInstance -Class Win32_PageFileSetting -ErrorAction SilentlyContinue
$pfUse = Get-CimInstance -Class Win32_PageFileUsage
[PSCustomObject]@{
ComputerName = $env:COMPUTERNAME
AutoManaged = $cs.AutomaticManagedPagefile
Setting_Count = @($pfSet).Count
Setting_Detail = if ($pfSet) { ($pfSet | ForEach-Object { "{0} (min:{1} max:{2})" -f $_.Name, $_.InitialSize, $_.MaximumSize }) -join '; ' } else { 'n/a' }
InUse_Files = ($pfUse | ForEach-Object Name) -join '; '
InUse_AllocatedMB = ($pfUse | Measure-Object -Sum -Property AllocatedBaseSize).Sum
InUse_CurrentMB = ($pfUse | Measure-Object -Sum -Property CurrentUsage).Sum
InUse_PeakMB = ($pfUse | Measure-Object -Sum -Property PeakUsage).Sum
}
FAQ
Pourquoi Win32_PageFileSetting
est-il vide alors que pagefile.sys
est bien présent ?
Parce que la classe expose uniquement des entrées statiques. En mode « géré par le système », Windows ajuste dynamiquement la taille et n’enregistre pas de min/max fixes exploitables par Win32_PageFileSetting
.
Comment savoir rapidement si la gestion automatique est active ?
Avec CIM : (Get-CimInstance Win32_ComputerSystem).AutomaticManagedPagefile
renvoie True
ou False
.
Je veux l’usage en temps réel sans changer la machine ; que dois‑je interroger ?
Win32_PageFileUsage
: Name
(chemin), AllocatedBaseSize
(MB), CurrentUsage
(MB), PeakUsage
(MB).
Pourquoi recommandez‑vous CIM plutôt que WMI classique ?
Get-CimInstance
s’appuie sur WS‑Man, gère mieux le remoting, et reste aligné avec les versions modernes de Windows et PowerShell. Get-WmiObject
et wmic
sont conservés pour compatibilité mais ne sont plus l’option privilégiée.
Bonnes pratiques de configuration
- Serveurs applicatifs gourmands : fixez une taille minimale raisonnable pour éviter les extensions fréquentes (coûteuses en I/O) et laissez une marge maximale suffisante.
- Machines avec crash dump : pour générer un vidage mémoire complet, la taille du pagefile sur la partition système doit être suffisante (au moins la RAM utile + overhead). Ajustez selon votre politique de dump.
- Disques multiples : placer le fichier d’échange sur un disque rapide peut améliorer la résilience en cas de pression mémoire, mais mesurez l’impact réel selon votre workload.
- Surveillance : capturez régulièrement
PeakUsage
afin de calibrer la taille minimale réaliste au fil du temps.
Résumé opérationnel
- Symptôme :
Win32_PageFileSetting
vide ⇒ normal si gestion auto. - Diagnostic : vérifiez
AutomaticManagedPagefile
(Win32_ComputerSystem
). - Solution : créez une entrée statique (GUI/registre) si vous devez auditer la config figée.
- Alternative : utilisez
Win32_PageFileUsage
pour l’état runtime sans modifier la machine.
Annexe : comparer les sorties en un coup d’œil
Scénario | Commande | Sortie attendue | Interprétation |
---|---|---|---|
Gestion auto activée | Get-CimInstance Win32_PageFileSetting | 0 instance | Normal : pas d’entrée statique |
Gestion auto activée | Get-CimInstance Win32_PageFileUsage | 1+ instance(s) | État runtime (taille allouée/utilisation) |
Taille fixe configurée | Get-CimInstance Win32_PageFileSetting | ≥1 instance | Chemin + min/max visibles |
Vérification mode | (Get-CimInstance Win32_ComputerSystem).AutomaticManagedPagefile | True /False | Auto géré ou statique |
Conclusion
L’absence d’instances dans Win32_PageFileSetting
n’est pas une anomalie : c’est la conséquence directe d’une gestion automatique du fichier d’échange, aujourd’hui activée par défaut sur la plupart des systèmes Windows. Pour auditer la configuration statique, définissez une taille fixe (ou une « taille gérée par le système » par lecteur) ; pour l’inventaire et la supervision sans changement, appuyez‑vous sur Win32_PageFileUsage
. En combinant ces signaux avec AutomaticManagedPagefile
, vous obtenez une vision complète, fiable et actionnable du pagefile dans vos environnements Windows 10/11 et Windows Server.