Windows Server 2025 / Exporter un inventaire du serveur et des disques en CSV
Les rapports au format CSV (valeurs séparées par des virgules) facilitent la comparaison des vérifications des serveurs lorsque leurs colonnes restent cohérentes. Interrogez le système d'exploitation, la mémoire et les informations sur le disque avec PowerShell, et incluez le nom de l'ordinateur et l'heure de collecte afin que chaque résultat ait une source claire.
Choisissez les champs et un emplacement de sortie protégé
Exécutez cet exemple localement sur chaque serveur dans Windows PowerShell 5.1. Apprenez la collecte et la sortie de fichiers séparément de l'authentification distante. Des noms de colonnes identiques facilitent ensuite la combinaison des rapports de plusieurs serveurs.
| Fichier | Contenu |
|---|---|
| server.csv | Nom de l'ordinateur, heure de collecte, version du système d'exploitation, heure de démarrage et mémoire |
| disks.csv | Nom de l'ordinateur, lecteur, capacité, espace libre et pourcentage libre |
Chaque exécution crée un nouveau dossier horodaté avec un identifiant court sous C:\LabReports pour éviter d'écraser les résultats précédents. Les noms de serveurs et la configuration interne peuvent être des informations opérationnelles sensibles ; définissez l'accès au dossier et la conservation.
Enregistrez et exécutez le script complet
Créez d’abord le dossier C:\LabScripts s’il n’existe pas, puis enregistrez ce qui suit sous C:\LabScripts\Collect-LabInventory.ps1 en utilisant UTF-8. Si vous ajoutez des commentaires non ASCII pour Windows PowerShell 5.1, vérifiez l’option UTF-8 avec marque d’ordre des octets (BOM) dans l’éditeur. Exécutez depuis une fenêtre Windows PowerShell ouverte en tant qu’administrateur ; aucun module supplémentaire n'est nécessaire.
$runLabel = (Get-Date -Format 'yyyyMMdd-HHmmss') + '-' + ([guid]::NewGuid().ToString('N').Substring(0,6))
$reportDirectory = Join-Path 'C:\LabReports' $runLabel
New-Item -ItemType Directory -Path $reportDirectory -Force -ErrorAction Stop | Out-Null
$os = Get-CimInstance Win32_OperatingSystem -ErrorAction Stop
$computer = Get-CimInstance Win32_ComputerSystem -ErrorAction Stop
$collectedAt = (Get-Date).ToString('o')
[pscustomobject]@{
ComputerName = $env:COMPUTERNAME
CollectedAt = $collectedAt
OS = $os.Caption
Version = $os.Version
LastBoot = $os.LastBootUpTime
MemoryGiB = [math]::Round($computer.TotalPhysicalMemory / 1GB,2)
} | Export-Csv -LiteralPath (Join-Path $reportDirectory 'server.csv') -NoTypeInformation -Encoding UTF8
Get-CimInstance Win32_LogicalDisk -Filter 'DriveType=3' -ErrorAction Stop | ForEach-Object {
[pscustomobject]@{
ComputerName = $env:COMPUTERNAME
CollectedAt = $collectedAt
Drive = $_.DeviceID
SizeGiB = [math]::Round($_.Size / 1GB,2)
FreeGiB = [math]::Round($_.FreeSpace / 1GB,2)
FreePercent = if ($_.Size -gt 0) { [math]::Round(100 * $_.FreeSpace / $_.Size,1) } else { $null }
}
} | Export-Csv -LiteralPath (Join-Path $reportDirectory 'disks.csv') -NoTypeInformation -Encoding UTF8
Write-Output $reportDirectory
Set-Location 'C:\LabScripts'
.\Collect-LabInventory.ps1
Le modèle d’information commun (CIM) fournit les classes de gestion interrogées ici. Les exemples de collecte d'informations informatiques de Microsoft expliquent l'approche. Les calculs de mémoire et de stockage utilisent la constante 1GB de PowerShell, soit 1 073 741 824 octets.
Vérifiez les deux fichiers générés
Utilisez le chemin de dossier réel imprimé à la fin de votre exécution. Son horodatage et son identifiant diffèrent à chaque fois, donc ne remplacez pas par un exemple littéral de dossier :
$reportPath = Read-Host 'Report directory printed by the script'
Import-Csv -LiteralPath (Join-Path $reportPath 'server.csv') | Format-List
Import-Csv -LiteralPath (Join-Path $reportPath 'disks.csv') | Format-Table
Le résumé doit identifier le serveur sur lequel vous avez exécuté le script. Le rapport sur les disques doit contenir des lignes pour ses disques fixes. Si la mémoire invitée diffère du paramètre de la machine virtuelle, considérez la mémoire dynamique et l'allocation actuelle. Ne confondez pas la mémoire d'un invité avec la mémoire physique totale de l'hôte.
Traitez le CSV comme des données
Export-Csv écrit les propriétés des objets sous forme de colonnes. Formater avec Format-Table avant l'export peut à la place sauvegarder les objets formatés. Le script sélectionne explicitement -NoTypeInformation et l'encodage UTF-8 pour Windows PowerShell 5.1.
Import-Csv retourne normalement des propriétés de type chaîne. Convertissez un champ en nombre avant de comparer les valeurs de capacité. Écartez d’abord les valeurs vides : une information manquante ne signifie pas 0 % d’espace libre. Une valeur réelle de 0 % reste incluse dans le filtre. La locale du tableur, les séparateurs décimaux et l'interprétation des dates peuvent différer ; conservez le CSV original et choisissez les paramètres d'importation délibérément.
Import-Csv -LiteralPath (Join-Path $reportPath 'disks.csv') |
Where-Object { -not [string]::IsNullOrWhiteSpace($_.FreePercent) } |
Where-Object { [double]$_.FreePercent -lt 20 } |
Select-Object ComputerName,Drive,FreePercent
Le seuil de 20 % est un exemple de filtre, pas une politique d'alerte universelle. Les seuils opérationnels devraient également tenir compte de l'espace libre absolu, de la croissance et des exigences de charge de travail.
Gérez les échecs partiels et préservez les résultats utiles
Si la création du répertoire ou une requête échoue, vérifiez les privilèges, l'espace libre et la prise en charge de la classe. Un fichier de sortie unique ne constitue pas un succès complet : vérifiez que les deux existent et contiennent les données attendues.
Collectez à nouveau sans redémarrer le serveur. CollectedAt doit changer tandis que LastBoot reste le même. Lors du nettoyage, identifiez uniquement le dossier créé par l'exécution concernée ; ne supprimez pas simplement toute l’arborescence LabReports ou d'autres dossiers d'inspection.




