La correction est intégrée au TP (Voir les encadrés de couleur vert)
Ce que vous allez apprendre dans ce TP
- Découvrir les cmdlets avec Get-Command et Get-Member
- Filtrer, trier et exporter des objets
- Écrire un script paramétré et l’exécuter à distance
Introduction #
Ce que vous allez apprendre dans cette section
- Découvrir les cmdlets avec Get-Command et Get-Member
- Filtrer, trier et exporter des objets
- Écrire un script paramétré et l’exécuter à distance
Contexte. Votre responsable vous demande un état des serveurs avant une migration. Plutôt que de cliquer dans chaque console, vous écrivez un script d'inventaire réutilisable.
Prérequis : une machine virtuelle Windows Server 2025 jetable (évaluation gratuite) avec un compte administrateur, et PowerShell ouvert en tant qu'administrateur · Durée estimée : 45 min
Un scriptInventaire.ps1, un rapport CSV et une page HTML.Mise en place #
Étapes guidées, avec leur correction.
1. Préparer l’espace de travail
Pourquoi ? Un dossier dédié évite de mélanger scripts et rapports.
CréezC:\TP\ScriptsetC:\TP\Rapports, vérifiez la version de PowerShell et autorisez les scripts locaux.Voir la correction
New-Item -ItemType Directory C:\TP\Scripts, C:\TP\Rapports -Force $PSVersionTable.PSVersion Set-ExecutionPolicy RemoteSigned -Scope LocalMachine -Force Get-ExecutionPolicy -List2. Explorer le système
Pourquoi ? Get-Member révèle les propriétés disponibles avant de les sélectionner.
Affichez le nom, la version, le build, la mémoire totale et le dernier démarrage du serveur.Voir la correction
Get-CimInstance Win32_OperatingSystem | Get-Member -MemberType Property | Select-Object -First 15 $os = Get-CimInstance Win32_OperatingSystem $cs = Get-CimInstance Win32_ComputerSystem [pscustomobject]@{ Nom = $env:COMPUTERNAME Systeme = $os.Caption Build = $os.BuildNumber RAM_Go = [math]::Round($cs.TotalPhysicalMemory / 1GB, 1) Demarrage = $os.LastBootUpTime }3. Disques et services
Pourquoi ? Les deux causes d’incident les plus fréquentes : disque plein et service arrêté.
Listez les volumes avec leur pourcentage libre, puis les services en démarrage automatique qui ne tournent pas.Voir la correction
Get-Volume | Where-Object DriveLetter | Select-Object DriveLetter, FileSystemLabel, @{n='Taille_Go'; e={[math]::Round($_.Size/1GB,1)}}, @{n='Libre_pct'; e={[math]::Round(100*$_.SizeRemaining/$_.Size,1)}} Get-Service | Where-Object { $_.StartType -eq 'Automatic' -and $_.Status -ne 'Running' } | Select-Object Name, DisplayName, Status4. Écrire le script
Pourquoi ? Un script paramétré se réutilise et s’exécute à distance.
ÉcrivezC:\TP\Scripts\Inventaire.ps1qui renvoie un objet par serveur (système, RAM, disque C libre, nombre de services auto arrêtés, dernier correctif).Voir la correction
@' [CmdletBinding()] param() $os = Get-CimInstance Win32_OperatingSystem $c = Get-Volume -DriveLetter C [pscustomobject]@{ Serveur = $env:COMPUTERNAME Systeme = $os.Caption RAM_Go = [math]::Round((Get-CimInstance Win32_ComputerSystem).TotalPhysicalMemory/1GB,1) C_Libre_pct = [math]::Round(100*$c.SizeRemaining/$c.Size,1) ServicesArretes = (Get-Service | Where-Object { $_.StartType -eq 'Automatic' -and $_.Status -ne 'Running' }).Count DernierCorrectif = (Get-HotFix | Sort-Object InstalledOn -Descending | Select-Object -First 1).HotFixID } '@ | Set-Content C:\TP\Scripts\Inventaire.ps1 -Encoding UTF8 & C:\TP\Scripts\Inventaire.ps15. Produire les rapports
Pourquoi ? Le CSV s’ouvre dans un tableur, le HTML se partage.
Exportez le résultat en CSV et en page HTML horodatés dansC:\TP\Rapports.Voir la correction
$stamp = Get-Date -Format 'yyyy-MM-dd_HHmm' $inv = & C:\TP\Scripts\Inventaire.ps1 $inv | Export-Csv "C:\TP\Rapports\inventaire_$stamp.csv" -NoTypeInformation -Encoding UTF8 $inv | ConvertTo-Html -Title 'Inventaire' -PreContent "<h1>Inventaire du $stamp</h1>" | Set-Content "C:\TP\Rapports\inventaire_$stamp.html" -Encoding UTF8 Get-ChildItem C:\TP\Rapports6. Exécuter à distance
Pourquoi ? Invoke-Command interroge plusieurs serveurs en parallèle.
Lancez le script sur le serveur local et une seconde machine (oulocalhostdeux fois si vous n’en avez qu’une), puis regroupez les résultats.Voir la correction
Enable-PSRemoting -Force $cibles = 'localhost', $env:COMPUTERNAME Invoke-Command -ComputerName $cibles -FilePath C:\TP\Scripts\Inventaire.ps1 | Select-Object * -ExcludeProperty RunspaceId | Sort-Object C_Libre_pct | Format-Table -AutoSize
Niveau de difficulté : ●○○○○ (1/5)
Mon suivi
Connectez-vous pour suivre votre progression et prendre des notes. Se connecter
💬 Questions sur cette leçon
Aucune question pour l'instant : soyez le premier à demander de l'aide ou à partager votre configuration.
Articles recommandés
PowerShell pour l’administrateur Windows
Maîtriser PowerShell pour administrer Windows : cmdlets et aide, pipeline d'objets, filtres et fo...
Windows et Windows Server : versions, éditions et architecture
Découvrir l'écosystème Windows pour l'administrateur : Windows 11 et Windows Server 2025, édition...
Réseau Windows : IP, DNS, DHCP, pare-feu et accès à distance
Configurer et diagnostiquer le réseau sous Windows en PowerShell, déployer un serveur DHCP, maîtr...
Stockage Windows : disques, volumes, Storage Spaces et RAID
Administrer le stockage sous Windows : GPT et MBR, partitions et volumes en PowerShell, NTFS et R...
Active Directory Domain Services et DNS
Comprendre et déployer Active Directory : forêt, domaines, unités d'organisation, contrôleurs de ...
Services, tâches planifiées, journaux d’événements et performances
Piloter les services Windows et leur récupération, automatiser avec le planificateur de tâches, e...
Sauvegarde, Hyper-V et dépannage de Windows
Sauvegarder et restaurer avec Windows Server Backup (y compris l'état du système et Active Direct...
Utilisateurs, groupes, autorisations NTFS et partages SMB
Gérer les comptes et groupes locaux, comprendre UAC, appliquer des autorisations NTFS avec hérita...
Stratégies de groupe (GPO) : configurer le parc depuis Active Directory
Concevoir et dépanner les stratégies de groupe : configuration ordinateur et utilisateur, liaison...