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 |