Applications pratiques PowerShell

PowerShell n'est pas seulement un outil de terminal ; c'est l'une des plateformes d'automatisation les plus complètes de l'environnement Windows.

Cette section utiliseratrois grandes catégories de scénarios d'application pratiquepour démontrer les puissantes capacités de PowerShell dans la gestion quotidienne, les opérations à distance et l'intégration inter-technologies :

  • Automatisation des tâches de gestion quotidienne
  • Gestion à distance
  • Intégration avec d'autres technologies

1. Automatisation des tâches de gestion quotidienne

1.1 Renommage de fichiers par lots

Exigence :

Tous les fichiers d’un répertoire.txtsont renommés au format d’un préfixe unifié suivi d’un numéro séquentiel, par exemple :log_001.txt、log_002.txtetc.

Exemple de code :

$files = Get-ChildItem -Path "D:\Logs" -Filter "*.txt"
$count = 1
foreach ($file in $files) {
    $newName = "log_{0:D3}.txt" -f $count
    Rename-Item -Path $file.FullName -NewName $newName
    $count++
}

Nettoyage planifié des fichiers temporaires

Exemple : supprimer les fichiers temporaires de plus de 7 jours

$targetPath = "C:\Windows\Temp"
Get-ChildItem -Path $targetPath -Recurse |
    Where-Object { $_.LastWriteTime -lt (Get-Date).AddDays(-7) } |
    Remove-Item -Force -Recurse

Il est recommandé d’enregistrer le script sous.ps1un fichier, puis d’utiliser le Planificateur de tâches pour l’exécuter périodiquement.

Script de collecte d’informations système

$info = [PSCustomObject]@{
    ComputerName = $env:COMPUTERNAME
    OSVersion    = (Get-CimInstance Win32_OperatingSystem).Caption
    Uptime       = ((Get-Date) - (Get-CimInstance Win32_OperatingSystem).LastBootUpTime).ToString()
    CPU          = (Get-CimInstance Win32_Processor).Name
    RAM_GB       = [math]::Round((Get-CimInstance Win32_ComputerSystem).TotalPhysicalMemory / 1GB, 2)
}
$info | Format-List

Analyse des journaux et génération de rapports

$logPath = "C:\inetpub\logs\LogFiles\W3SVC1\*.log"
$lines = Get-Content $logPath | Where-Object { $_ -match "500" }

$lines.Count
$lines | Out-File "C:\Reports\error_500_report.txt"

2. Gestion à distance

Notions de base de PowerShell Remoting

PowerShell Remoting est un mécanisme permettant d’exécuter des commandes à distance via WinRM.

Activer la fonctionnalité distante (exécuter en tant qu'administrateur) :

Enable-PSRemoting -Force

UtilisationInvoke-CommandExécuter des commandes distantes

Invoke-Command -ComputerName "Server01" -ScriptBlock {
    Get-Service -Name "W32Time"
}

Prend en charge l'exécution par lots sur plusieurs hôtes :

$servers = @("Server01", "Server02")
Invoke-Command -ComputerName $servers -ScriptBlock {
    Get-Process | Where-Object { $_.CPU -gt 100 }
}

Gestion des sessions distantes

Créer une session :

$session = New-PSSession -ComputerName "Server01"

Entrer dans la session :

Enter-PSSession $session

Exécuter des commandes :

Invoke-Command -Session $session -ScriptBlock { Get-Date }

Fermer la session :

Remove-PSSession $session

Considérations de sécurité

  • Utiliser HTTPS au lieu de HTTP (configurer les certificats)
  • Éviter d'utiliser des mots de passe en clair ; il est recommandé d'utiliser des objets d'informations d'identification :
$cred = Get-Credential
Invoke-Command -ComputerName "Server01" -Credential $cred -ScriptBlock { hostname }

3. Intégration avec d'autres technologies

PowerShell et .NET Framework

PowerShell dispose d'un accès intégré aux bibliothèques de classes .NET et peut appeler presque toutes les API .NET.

Exemple : obtenir la valeur MD5 d'un fichier

function Get-FileHashMD5 {
    param ([string]$path)
    $md5 = [System.Security.Cryptography.MD5]::Create()
    $bytes = [System.IO.File]::ReadAllBytes($path)
    $hash = $md5.ComputeHash($bytes)
    return ([BitConverter]::ToString($hash)).Replace("-", "")
}

Get-FileHashMD5 "D:\file.zip"

Appeler des API REST

Exemple : appeler une API JSON pour obtenir des informations météo

$response = Invoke-RestMethod -Uri "https://api.weatherapi.com/v1/current.json?key=APIKEY&q=Beijing"
$response.location.name
$response.current.temp_c

Bases de la connexion aux bases de données (exemple : SQL Server)

$connectionString = "Server=localhost;Database=TestDB;Integrated Security=True"
$query = "SELECT TOP 10 * FROM Users"

$connection = New-Object System.Data.SqlClient.SqlConnection $connectionString
$command = $connection.CreateCommand()
$command.CommandText = $query

$connection.Open()
$reader = $command.ExecuteReader()
while ($reader.Read()) {
    Write-Output $reader["UserName"]
}
$connection.Close()

Interaction avec les applications Office

Exemple : utiliser l'objet COM Excel pour écrire des données

$excel = New-Object -ComObject Excel.Application
$excel.Visible = $true
$workbook = $excel.Workbooks.Add()
$sheet = $workbook.Worksheets.Item(1)

$sheet.Cells.Item(1, 1) = "Name"
$sheet.Cells.Item(1, 2) = "Score"
$sheet.Cells.Item(2, 1) = "Alice"
$sheet.Cells.Item(2, 2) = 95

4. Résumé

Type d'application Utilisation pratique Points techniques
Automatisation locale Renommage par lots, nettoyage de fichiers, informations système Système de fichiers, minuteries, objets
Analyse des journaux Vérifier les journaux d'erreurs et générer des rapports Traitement de texte, filtrage, exportation
Opérations à distance Opérations par lots sur plusieurs hôtes, sessions distantes Invoke-Command, PSSession
Intégration technique Intégration avec les API REST, les bases de données et Excel Invoke-RestMethod, COM, ADO.NET
Prise en charge de .NET Appeler les API sous-jacentes pour implémenter des fonctionnalités étendues Utiliser les bibliothèques de classes .NET
Autres extensions