Win32_PageFileSetting vide sur Windows 10/11 et Windows Server : diagnostic WMI/CIM et solutions PowerShell

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.

Sommaire

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 classe Win32_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) ; utilisez Win32_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 de Win32_ComputerSystem indique si Windows gère le fichier d’échange automatiquement.

Solution

Créer une entrée statique (interface graphique)

  1. Ouvrez Panneau de configuration ▸ Système puis Paramètres système avancés.
  2. Cliquez sur Performances ▸ Avancé ▸ Mémoire virtuelle.
  3. Décochez « Gestion automatique du fichier d’échange pour tous les lecteurs ».
  4. 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).
  5. 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ôleDisponibilité avec « gestion auto »Quand l’utiliser
Win32_PageFileSettingParamètres statiques (chemin, taille min/max)Souvent aucune instanceAudit de configuration figée, conformité
Win32_PageFileUsageTaille allouée, utilisation courante, pic, cheminToujours renseignéInventaire runtime, capacité, surveillance
Win32_ComputerSystemAutomaticManagedPagefileIndique si le fichier d’échange est géré automatiquementToujours 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 et wmic sont hérités. Préférez Get-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 sous HKLM\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énarioCommandeSortie attendueInterprétation
Gestion auto activéeGet-CimInstance Win32_PageFileSetting0 instanceNormal : pas d’entrée statique
Gestion auto activéeGet-CimInstance Win32_PageFileUsage1+ instance(s)État runtime (taille allouée/utilisation)
Taille fixe configuréeGet-CimInstance Win32_PageFileSetting≥1 instanceChemin + min/max visibles
Vérification mode(Get-CimInstance Win32_ComputerSystem).AutomaticManagedPagefileTrue/FalseAuto 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.

Sommaire