Gestion des fichiers et du registre
PowerShell unifie l'accès aux fichiers, au registre, aux certificats et aux variables d'environnement via un système de PSDrives : des lecteurs virtuels navigables avec les mêmes cmdlets.
Gestion des fichiers
# Créer un dossier
New-Item -Path C:\Temp\MonDossier -ItemType Directory
# Copier des fichiers (avec wildcards)
Copy-Item -Path C:\Source*.log -Destination D:\Archives
# Déplacer
Move-Item -Path C:\Temp\fichier.txt -Destination C:\Archive
# Supprimer (récursif)
Remove-Item -Path C:\Temp\AncienDossier -Recurse -Force
# Lire le contenu d'un fichier
Get-Content -Path C:\Windows\System32\drivers\etc\hosts
# Écrire dans un fichier
"Ligne ajoutée le $(Get-Date)" | Add-Content -Path C:\Temp\journal.txt
# Remplacer du contenu
(Get-Content C:\config.txt) -replace 'ancien', 'nouveau' | Set-Content C:\config.txt
Recherche dans les fichiers
# Chercher du texte dans des fichiers (équivalent grep)
Select-String -Path C:\Logs*.log -Pattern "ERREUR" -CaseSensitive
# Chercher récursivement
Get-ChildItem -Path C:\Logs -Recurse -Filter *.log | Select-String -Pattern "CRITICAL"
Le registre Windows via PSDrive
# Naviguer dans le registre (HKLM = HKEY_LOCAL_MACHINE)
Set-Location HKLM:\SOFTWARE\Microsoft
# Lire une valeur de registre
Get-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion" -Name ProductName
# Créer une clé
New-Item -Path "HKCU:\SOFTWARE\MonApp"
# Créer/modifier une valeur
Set-ItemProperty -Path "HKCU:\SOFTWARE\MonApp" -Name "Version" -Value "1.0"
# Supprimer une clé
Remove-Item -Path "HKCU:\SOFTWARE\MonApp" -Recurse
Cas concret : audit des fichiers modifiés récemment
# Fichiers modifiés dans les dernières 24h dans C:\Windows\System32
$hier = (Get-Date).AddHours(-24)
Get-ChildItem -Path C:\Windows\System32 -Recurse -File |
Where-Object { $_.LastWriteTime -gt $hier } |
Select-Object FullName, LastWriteTime, Length |
Sort-Object LastWriteTime -Descending |
Export-Csv -Path C:\Temp\fichiers-recents.csv -NoTypeInformation
Erreurs fréquentes
- Oublier
-RecursesurRemove-Item: sans ce paramètre, PowerShell refuse de supprimer un dossier non vide. - Utiliser
HKEY_LOCAL_MACHINEau lieu deHKLM:: dans PowerShell, les PSDrives utilisent les abréviations (HKLM:,HKCU:). Set-ContentvsAdd-Content:Set-Contentécrase le fichier,Add-Contentajoute à la fin. Confondre les deux détruit des logs.
À retenir
- Les cmdlets
*-Itemet*-Contentgèrent fichiers ET registre (même syntaxe, lecteur différent). Select-String= grep PowerShell.HKLM:etHKCU:sont les PSDrives pour le registre.- Toujours utiliser
-WhatIfavant unRemove-Item -Recursesur un dossier important.