Fondamentaux de PowerShell : Automatisation des tâches dans l’administration Windows

Automatisation Power Shell windows server MS DOS pour les tâches Windows

PowerShell est un shell de ligne de commande et un langage de script qui permet aux professionnels de l’informatique d’automatiser les tâches administratives sous Windows. Avec PowerShell, vous pouvez gérer les serveurs Windows, les postes de travail, les applications et les services de manière efficace via une interface de ligne de commande simple.

Dans ce guide complet, nous couvrirons les essentiels de l’utilisation de PowerShell pour l’administration Windows, notamment :

  • Présentation de PowerShell
  • Fonctionnalités et capacités clés
  • Installation et configuration de PowerShell
  • Syntaxe PowerShell, applets de commande et pipelines
  • Utilisation d’objets dans PowerShell
  • Scripts avec PowerShell
  • Automatisation des tâches et des workflows
  • Gestion des systèmes et services Windows
  • Bonnes pratiques pour l’écriture de scripts PowerShell

Une introduction à PowerShell

PowerShell est le shell de ligne de commande et le langage de script standardisé de Microsoft pour la gestion des systèmes d’exploitation Windows et des applications. Il est intégré à Windows depuis Windows 7 et Windows Server 2008 R2.

Les principales fonctionnalités de PowerShell incluent :

  • Fournit un shell de ligne de commande puissant pour la gestion des systèmes
  • Implémente un langage de script pour l’automatisation des tâches
  • Permet d’accéder au .NET Framework depuis la ligne de commande
  • Expose l’instrumentation de gestion Windows via des applets de commande faciles à utiliser
  • Offre des capacités de script puissantes pour le traitement par lots de commandes
  • Fournit une API d’hébergement pour intégrer PowerShell dans les applications
  • Conçu pour l’automatisation du système et la planification des tâches

Avec PowerShell, les administrateurs peuvent contrôler et automatiser presque tous les aspects des systèmes et serveurs Windows. Il remplace les anciens shells comme l’invite de commandes et utilise des objets .NET pour interagir avec le système d’exploitation.

Par rapport aux autres langages de script, PowerShell vise à fournir une syntaxe et une expérience simples et cohérentes construites sur le .NET Framework. Il tire parti des classes .NET pour exposer les API Windows de manière simple.

Maintenant que nous avons couvert les bases, voyons comment installer et configurer PowerShell sous Windows.

Installation et configuration de PowerShell

PowerShell est intégré à Windows 7, Windows Server 2008 R2 et versions ultérieures. Pour vérifier si vous avez PowerShell installé, ouvrez l’invite de commandes et tapez powershell.

Si PowerShell est installé, vous accéderez au shell interactif PowerShell. Tapez exit pour quitter le shell.

Pour les anciennes versions de Windows, vous pouvez installer PowerShell via les téléchargements Windows Management Framework de Microsoft. Cela vous permet d’obtenir les dernières mises à jour PowerShell sur les anciens systèmes d’exploitation.

Une fois PowerShell installé, vous pouvez personnaliser votre environnement via le script de profil PowerShell. Cela vous permet de définir des alias, des fonctions, des variables et d’autres préférences qui se chargent à chaque démarrage du shell.

Pour configurer votre profil, créez un script PowerShell appelé Microsoft.PowerShell_profile.ps1 enregistré dans l’un de ces dossiers :

  • $HOME\Documents\WindowsPowerShell\ pour votre profil personnel
  • $PSHOME\Microsoft.PowerShell_profile.ps1 comme profil global pour tous les utilisateurs

Par exemple, pour définir une invite PowerShell personnalisée, ajoutez ce qui suit à votre script de profil :

function prompt {
  Write-Host "$(Get-Date -Format G) [Administrateur]" -ForegroundColor Cyan
  Write-Host " $($executionContext.SessionState.Path.CurrentLocation)$('>' * ($nestedPromptLevel + 1)) " 
  # Invite de saisie
  return " "
}

Cela affichera un horodatage, un nom d’utilisateur, le répertoire actif et retournera un espace pour la saisie chaque fois que vous démarrerez PowerShell ou exécuterez une commande.

Les profils vous permettent de personnaliser les alias, les fonctions, les variables d’environnement et les préférences PowerShell. Passons maintenant à la syntaxe PowerShell.

Comprendre la syntaxe PowerShell

La syntaxe PowerShell suit une structure verbe-nom pour les commandes, alignée sur le langage naturel. Les principales commandes que vous exécuterez sont appelées cmdlets qui effectuent une action sur un objet cible.

Les cmdlets suivent un schéma de nommage standard Verbe-Nom comme Get-ProcessSet-Location ou Start-Service. Le verbe décrit l’action, tandis que le nom représente l’entité sur laquelle l’action est effectuée.

Par exemple, pour récupérer une liste des processus en cours d’exécution :

PS C:\> Get-Process

Cette applet de commande verb Get agit sur le nom de processus pour retourner tous les processus actifs sur le système.

Les applets de commande peuvent prendre des paramètres positionnels qui modifient leur comportement ou transmettent des objets d’entrée. Les paramètres sont indiqués avec un tiret -Name ou peuvent être positionnés directement comme Get-Process PowerShell.

Le piping | transmet la sortie d’une applet de commande vers l’entrée d’une autre. Cela vous permet de chainer plusieurs commandes comme :

PS C:\> Get-Process | Where-Object { $_.CPU -gt1000 }

Cela récupère les processus, filtre ceux de plus de 1000 CPU, et les transmet dans le pipeline.

Au-delà des applets de commande, PowerShell prend en charge toute la syntaxe de programmation habituelle comme les variables, les boucles, les conditions, les commutateurs, les fonctions, les classes, etc. Voyons quelques exemples :

Variables :

$processName = "PowerShell"
Get-Process -Name $processName

Conditionnel Si/Sinon :

$cpu = Get-Process PowerShell | Select-Object -ExpandProperty CPU
if ($cpu -gt 1000) {
  Write-Host "CPU élevé !" 
} else {
  Write-Host "CPU normal"
}

Boucle For :

$processes = Get-Process
for($i = 0; $i -lt $processes.length; $i++) {
  Write-Host $processes[$i]
}

Fonctions :

function Get-TopProcesses {
  Get-Process | Sort-Object -Property CPU -Descending | Select-Object -First 10 
}
Get-TopProcesses

Ces exemples démontrent comment PowerShell permet aux administrateurs d’utiliser des constructions de programmation pour le scripting, le contrôle de flux et les itérations.

Passons maintenant à la façon dont nous pouvons utiliser ces concepts au niveau supérieur avec le scripting.

Scripting avec PowerShell

L’une des principales forces de PowerShell est ses capacités de script pour l’automatisation et le traitement par lots. Les scripts PowerShell contiennent des commandes dans un document PowerShell enregistré avec une extension .ps1.

Les scripts offrent des avantages tels que :

  • Automatisation des tâches répétitives
  • Encourage la réutilisation pour assurer la cohérence
  • Permet une exécution non interactive
  • Centralise les procédures et les stratégies
  • Permet le contrôle de version et le partage

Voyons un exemple simple de script PowerShell qui imprime un message et exécute une série de commandes :

# Exemple de script PowerShell
Write-Host "Exécution du script PowerShell !"
Get-Service -Name 'Bits' 
Start-Service -Name 'Bits'
Write-Host "Service Bits démarré."
Get-Process -Name 'Outlook'
Stop-Process -Name 'Outlook'

Cela imprime un message, récupère l’état du service Bits, le démarre, puis arrête tous les processus Outlook en cours d’exécution.

Pour exécuter le script, exécutez :

PS C:\> .\monScript.ps1

Où monScript.ps1 est le nom de notre script d’exemple.

Les scripts peuvent utiliser toute la syntaxe de programmation dont nous avons discuté comme les variables, les conditions, les boucles, les fonctions, les classes, etc. Ils prennent en charge le passage d’arguments pour les scripts paramétrés.

Par exemple :

param(
  [string]$NomService
)
Get-Service -Name $NomService 
if ((Get-Service -Name $NomService).Status -ne 'Running') {
  Start-Service -Name $NomService
  Write-Host "Service $NomService démarré" 
}

Cela définit un paramètre $NomService qui est transmis lors de l’appel du script. Le script recherche l’état du service et le démarre conditionnellement s’il n’est pas déjà en cours d’exécution.

Pour exécuter un script paramétré :

PS C:\> .\Start-Service.ps1 -NomService 'Bits'

Cela transmet ‘Bits’ au paramètre $NomService.

De cette façon, PowerShell fournit des outils extrêmement robustes pour le scripting des tâches administratives.

Regardons maintenant comment nous pouvons utiliser PowerShell pour automatiser les flux de travail et les processus sous Windows.

Automatisation des tâches avec PowerShell

L’un des principaux avantages de PowerShell est sa capacité à automatiser les workflows pour effectuer des tâches répétitives. Quelques exemples incluent :

  • Création de comptes utilisateur en masse
  • Approvisionnement automatisé de serveurs
  • Déploiement logiciel par lot
  • Processus de sauvegarde nocturne
  • Planification des tâches

PowerShell rend facile le scripting de ces procédures et leur déclenchement à la demande ou selon une planification.

Par exemple, pour automatiser une sauvegarde de fichiers nocturne :

# Sauvegarde-Fichiers.ps1
$dossierSauvegarde = "D:\Sauvegardes"
$dossiers = Get-ChildItem -Path "C:\Users" 
foreach ($dossier in $dossiers) {
  $fromPath = $dossier.FullName
  $toPath = Join-Path -Path $dossierSauvegarde -ChildPath $dossier.Name
  Copy-Item -Path $fromPath -Destination $toPath -Recurse -Force
  Write-Host "Sauvegardé $fromPath vers $toPath"
}

Cela parcourt les dossiers utilisateur, les copie dans un emplacement de sauvegarde et consigne la sortie.

Nous pourrions ensuite le planifier pour s’exécuter chaque nuit avec le Planificateur de tâches en utilisant un déclencheur comme :

Déclencheur : Quotidien
À : 23h
Répéter : Indéfiniment 

Pour le déploiement de logiciels, PowerShell fournit des applets de commande comme Install-Package pour déployer des packages MSI :

$packages = @('package1.msi', 'package2.msi')
foreach ($package in $packages) {
  Write-Host "Installation du package : $package"
  Start-Process msiexec.exe -ArgumentList "/i $package /quiet" -Wait
}

Cela parcourt un tableau de packages, imprime un message et les installe silencieusement via msiexec.exe.

PowerShell permet d’automatiser presque sans effort les processus IT récurrents comme les sauvegardes, les déploiements, la configuration des utilisateurs, etc. Voyons ensuite comment gérer les services Windows de base avec PowerShell.

Gestion de Windows avec PowerShell

En plus de l’automatisation, PowerShell est extrêmement utile pour gérer les serveurs, les postes de travail et les applications Windows. Pratiquement tous les aspects de l’administration Windows sont contrôlables via des applets de commande PowerShell.

Quelques exemples incluent :

Services :

  • Get-Service – Obtenir le statut du service
  • Start-Service – Démarrer un service
  • Stop-Service – Arrêter un service en cours d’exécution
  • Restart-Service – Redémarrer un service
  • New-Service – Créer un nouveau service

Processus :

  • Get-Process – Lister les processus en cours d’exécution
  • Stop-Process – Arrêter un processus
  • Start-Process – Démarrer un nouveau processus
  • Wait-Process – Attendre la fin d’un processus

Journaux d’événements :

  • Get-EventLog – Récupérer les journaux d’événements Windows
  • Clear-EventLog – Vider un journal d’événements
  • Write-EventLog – Écrire un événement dans un journal

Mises à jour Windows :

  • Get-WindowsUpdate – Afficher les mises à jour disponibles
  • Install-WindowsUpdate – Installer des mises à jour

Mise en réseau :

  • Get-NetIPConfiguration – Afficher les paramètres d’adresse IP
  • Set-DNSClientServerAddress – Définir les serveurs DNS
  • Test-NetConnection – Tester la connectivité réseau

Active Directory :

  • Get-ADUser – Requêter les utilisateurs AD
  • New-ADUser – Créer un nouvel utilisateur AD
  • Set-ADUser – Modifier un utilisateur AD
  • Remove-ADUser – Supprimer un utilisateur AD

Système de fichiers :

  • Get-ChildItem – Lister les fichiers et dossiers
  • Copy-Item – Copier des fichiers et dossiers
  • Move-Item – Déplacer des fichiers et dossiers
  • Remove-Item – Supprimer des fichiers et dossiers

Cette liste donne un petit échantillon des tâches d’administration qui peuvent être gérées via des applets de commande PowerShell. Tout composant avec une instrumentation de gestion exposée via .NET peut être utilisé depuis la ligne de commande.

Voyons quelques exemples d’utilisation pour gérer les services avec PowerShell :

Obtenir le statut du service d’impression :

PS C:\> Get-Service -Name 'Spooler'

Redémarrer un service arrêté :

PS C:\> Restart-Service -Name 'Spooler' 

Désactiver un service :

PS C:\> Set-Service -Name 'BITS' -StartupType Disabled

Créer un nouveau service de surveillance de système de fichiers :

PS C:\> New-Service -Name 'FileWatcher' -BinaryPathName 'C:\FileWatcher.exe'

Ces exemples montrent comment PowerShell vous permet de contrôler directement les composants Windows comme les services, les processus, les mises à jour, la mise en réseau, les journaux, AD, le système de fichiers, etc.

Bonnes pratiques pour le scripting PowerShell

Lors du développement de scripts PowerShell pour l’automatisation et l’administration, suivre les bonnes pratiques permet de créer du code robuste, fiable et maintenable. Quelques conseils incluent :

  • Ajouter une aide basée sur des commentaires pour documenter les scripts
  • Tirer parti des scripts paramétrés avec validation des entrées
  • Utiliser une nommage verbe-nom cohérent pour les fonctions personnalisées
  • Éviter les valeurs codées en dur, utiliser des variables à la place
  • Gérer les erreurs avec grâce via des blocs try/catch
  • Permettre l’exécution des scripts de manière non interactive avec -NoProfile
  • Formater la sortie pour la lisibilité avec des espaces, des sauts de ligne et du texte
  • Toujours tester minutieusement les scripts avant une utilisation en production
  • Utiliser le contrôle de version comme Git pour le suivi des modifications
  • Stocker les scripts dans un référentiel sous contrôle de source
  • Limiter l’exposition des droits – éviter d’utiliser des comptes Admin dans les scripts
  • Ne pas exposer de mots de passe ou de secrets dans les scripts
  • Appeler les scripts à partir de scripts wrapper pour la cohérence

L’adoption de normes et de bonnes pratiques pour les scripts PowerShell vous sera utile au fil du temps et permettra aux autres de comprendre et de tirer parti de votre code.

Conclusion

Dans ce guide, nous avons couvert les bases de PowerShell pour l’administration et l’automatisation des tâches dans les environnements Windows. Les sujets clés incluaient :

  • Présentation de PowerShell et de ses capacités
  • Installation et configuration de PowerShell
  • Syntaxe PowerShell, applets de commande et pipelines
  • Scripting avec PowerShell pour l’automatisation
  • Gestion des services, processus et composants Windows
  • Bonnes pratiques pour l’écriture de scripts PowerShell

Avec son interface de ligne de commande robuste, son intégration .NET et son langage de script universel, vous pouvez contrôler presque tous les aspects des systèmes Windows et résoudre des problèmes concrets.

J’espère que cet article fournit une solide base pour tirer parti des capacités de PowerShell pour la gestion des serveurs et des postes de travail. Les compétences PowerShell sont précieuses pour les administrateurs Windows cherchant à réduire les tâches répétitives et à améliorer l’efficacité.

One Reply to “Fondamentaux de PowerShell : Automatisation des tâches dans l’administration Windows”

Laisser un commentaire