5 scripts PowerShell indispensables pour un sysadmin (guide pratique)

Découvrez 5 scripts PowerShell essentiels pour les sysadmins: inventaire, audit privilèges, monitoring services, validation backup et conformité patching.

PowerShell est l’outil le plus rentable dans la boîte à outils d’un administrateur système. Bien utilisé, il réduit les tâches manuelles, améliore la fiabilité des opérations et renforce la sécurité. Voici 5 scripts PowerShell indispensables pour tout sysadmin, avec des exemples concrets prêts à adapter.

1) Inventaire système automatisé

Objectif: récupérer rapidement les infos clés (OS, uptime, disque, patchs).

# Inventaire local simple
$os = Get-CimInstance Win32_OperatingSystem
$cs = Get-CimInstance Win32_ComputerSystem
$disks = Get-CimInstance Win32_LogicalDisk -Filter "DriveType=3"

[PSCustomObject]@{
  ComputerName = $env:COMPUTERNAME
  Domain       = $cs.Domain
  OS           = $os.Caption
  Build        = $os.BuildNumber
  LastBoot     = $os.LastBootUpTime
}

$disks | Select-Object DeviceID,
  @{N='FreeGB';E={[math]::Round($_.FreeSpace/1GB,2)}},
  @{N='SizeGB';E={[math]::Round($_.Size/1GB,2)}}

Astuce: ajoute Export-Csv pour historiser l’état du parc.

2) Audit des privilèges (admins locaux + AD)

Objectif: détecter les dérives d’accès rapidement.

# Membres du groupe Administrateurs local
Get-LocalGroupMember -Group "Administrators" |
  Select-Object Name, ObjectClass, PrincipalSource

# Exemple AD (module ActiveDirectory requis)
Get-ADGroupMember "Domain Admins" -Recursive |
  Select-Object Name, SamAccountName, ObjectClass |
  Export-Csv C:\Reports\domain-admins.csv -NoTypeInformation -Encoding UTF8

Astuce: planifie un export hebdo et compare avec la semaine précédente.

3) Monitoring et auto-heal de services critiques

Objectif: redémarrer automatiquement un service arrêté et alerter en cas d’échec.

$services = @('W3SVC','MSSQLSERVER','VeeamAgent')

foreach ($svc in $services) {
  $s = Get-Service -Name $svc -ErrorAction SilentlyContinue
  if ($null -eq $s) { continue }

  if ($s.Status -ne 'Running') {
    try {
      Start-Service -Name $svc -ErrorAction Stop
      Write-Output "[$svc] redémarré avec succès"
    }
    catch {
      Write-Output "[$svc] échec redémarrage: $($_.Exception.Message)"
      # Ici: webhook Teams/Slack ou Send-MailMessage (legacy)
    }
  }
}

Astuce: ajoute une limite de tentatives pour éviter les boucles infinies.

4) Contrôle backup + test de restauration

Objectif: vérifier qu’un backup récent existe et qu’il est exploitable.

# Vérifie l'âge des fichiers de backup dans un dossier
$path = "D:\Backups"
$maxHours = 24

$latest = Get-ChildItem $path -File |
  Sort-Object LastWriteTime -Descending |
  Select-Object -First 1

if ($null -eq $latest) {
  Write-Error "Aucun backup trouvé"
  exit 1
}

$ageHours = (New-TimeSpan -Start $latest.LastWriteTime -End (Get-Date)).TotalHours
if ($ageHours -gt $maxHours) {
  Write-Error "Backup trop ancien: $([math]::Round($ageHours,1))h"
  exit 2
}

Write-Output "OK backup récent: $($latest.Name) ($([math]::Round($ageHours,1))h)"

Astuce: complète ce check avec un vrai test de restauration en environnement isolé.

5) Conformité patching + reboot pending

Objectif: identifier les serveurs non conformes et ceux qui attendent un redémarrage.

# Hotfix récents
Get-HotFix |
  Sort-Object InstalledOn -Descending |
  Select-Object -First 20 HotFixID, Description, InstalledOn

# Détection reboot pending (registre)
$rebootPending = Test-Path "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate\Auto Update\RebootRequired"

[PSCustomObject]@{
  ComputerName  = $env:COMPUTERNAME
  RebootPending = $rebootPending
  CheckedAt     = Get-Date
}

Astuce: exécute ce script à distance via Invoke-Command pour une vue multi-serveurs.

Bonnes pratiques de production

  • Versionner les scripts dans Git.
  • Ne jamais stocker les secrets en clair.
  • Logger chaque exécution (succès/échec/durée).
  • Tester en préprod avant rollout global.
  • Planifier via Task Scheduler ou orchestrateur central.

Conclusion

Ces exemples donnent une base immédiatement actionnable. Le plus important: les adapter à votre contexte, les standardiser, puis les exécuter de manière répétable. En sysadmin, l’automatisation utile vaut mieux qu’un script “parfait” jamais lancé.

Total
0
Shares
Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Previous Post

Symfony vs Laravel: choisir le framework selon vos contraintes réelles

Next Post

Store CLI : la nouveauté qui change la gestion des outils en ligne de commande

Related Posts