PowerShell: Praktische Anwendungen
PowerShell ist nicht nur ein Terminalwerkzeug; es ist eine der umfassendsten Automatisierungsplattformen in der Windows-Umgebung.
Dieser Abschnitt verwendetdrei Hauptkategorien praktischer Anwendungsszenarien, um die leistungsstarken Fähigkeiten von PowerShell im täglichen Management, bei Remote-Vorgängen und bei der technologieübergreifenden Integration zu demonstrieren:
- Automatisierung täglicher Managementaufgaben
- Remote-Verwaltung
- Integration mit anderen Technologien
1. Automatisierung täglicher Managementaufgaben
1.1 Stapelweises Umbenennen von Dateien
Anforderung:
Alle Dateien in einem Verzeichnis.txtwerden in das Format eines einheitlichen Präfixes plus einer Sequenznummer umbenannt, wie z. B.:log_001.txt、log_002.txtusw.
Beispielcode:
$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++
}
Geplante Bereinigung temporärer Dateien
Beispiel: Temporäre Dateien löschen, die älter als 7 Tage sind
$targetPath = "C:\Windows\Temp"
Get-ChildItem -Path $targetPath -Recurse |
Where-Object { $_.LastWriteTime -lt (Get-Date).AddDays(-7) } |
Remove-Item -Force -Recurse
Es wird empfohlen, das Skript als.ps1eine Datei zu speichern und dann Task Scheduler zu verwenden, um es regelmäßig auszuführen.
Skript zur Sammlung von Systeminformationen
$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
Protokollanalyse und Berichtserstellung
$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. Remote-Verwaltung
Grundlagen von PowerShell Remoting
PowerShell Remoting ist ein Mechanismus zum Ausführen von Remotebefehlen über WinRM.
Remote-Funktionalität aktivieren (als Administrator ausführen):
Enable-PSRemoting -Force
NutzungInvoke-CommandRemote-Befehle ausführen
Invoke-Command -ComputerName "Server01" -ScriptBlock {
Get-Service -Name "W32Time"
}
Unterstützt die Batch-Ausführung auf mehreren Hosts:
$servers = @("Server01", "Server02")
Invoke-Command -ComputerName $servers -ScriptBlock {
Get-Process | Where-Object { $_.CPU -gt 100 }
}
Remote-Sitzungsverwaltung
Eine Sitzung erstellen:
$session = New-PSSession -ComputerName "Server01"
Sitzung betreten:
Enter-PSSession $session
Befehle ausführen:
Invoke-Command -Session $session -ScriptBlock { Get-Date }
Sitzung schließen:
Remove-PSSession $session
Sicherheitsaspekte
- HTTPS anstelle von HTTP verwenden (Zertifikate konfigurieren)
- Keine Klartextkennwörter verwenden; es wird empfohlen, Credential-Objekte zu verwenden:
$cred = Get-Credential
Invoke-Command -ComputerName "Server01" -Credential $cred -ScriptBlock { hostname }
3. Integration mit anderen Technologien
PowerShell und .NET Framework
PowerShell bietet integrierten Zugriff auf .NET-Klassenbibliotheken und kann fast alle .NET-APIs aufrufen.
Beispiel: MD5-Wert einer Datei abrufen
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"
REST-APIs aufrufen
Beispiel: Eine JSON-API aufrufen, um Wetterinformationen abzurufen
$response = Invoke-RestMethod -Uri "https://api.weatherapi.com/v1/current.json?key=APIKEY&q=Beijing" $response.location.name $response.current.temp_c
Grundlagen zu Datenbankverbindungen (Beispiel: 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()
Interaktion mit Office-Anwendungen
Beispiel: Das Excel-COM-Objekt zum Schreiben von Daten verwenden
$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. Zusammenfassung
| Anwendungstyp | Praktische Verwendung | Technische Punkte |
|---|---|---|
| Lokale Automatisierung | Stapelumbenennung, Dateibereinigung, Systeminformationen | Dateisystem, Timer, Objekte |
| Protokollanalyse | Fehlerprotokolle prüfen und Berichte generieren | Textverarbeitung, Filterung, Exportieren |
| Remote-Operationen | Batchvorgänge auf mehreren Hosts, Remotesitzungen | Invoke-Command, PSSession |
| Technische Integration | Integration mit REST-APIs, Datenbanken und Excel | Invoke-RestMethod, COM, ADO.NET |
| .NET-Unterstützung | Zugrunde liegende APIs aufrufen, um erweiterte Funktionalität zu implementieren | .NET-Klassenbibliotheken verwenden |