/

Wiederkehrende Aufgaben mit PowerShell automatisieren

von Team Ninja
Illustration with a command prompt icon representing Task Automation with PowerShell
Illustration with a command prompt icon representing Task Automation with PowerShell

Try our #1 rated endpoint management platform on G2

NinjaOne dashboard screenshot

Automate the Hardest Parts of IT

Die wichtigsten Punkte

  • PowerShell fungiert als Skriptsprache und interaktive Shell für Aufgaben wie das Anlegen von Benutzern, Dateioperationen und die Netzwerkkonfiguration.
  • Einfache Skripte für komplexe Automatisierung nutzen: Verketten Sie Cmdlets zu anspruchsvollen Workflows, etwa kontinuierliche Protokollüberwachung mit E-Mail-Alarmierung bei „ERROR“-Ereignissen, automatisierte CSV-Fehlerberichte, authentifizierte REST-API-Aufrufe und das Zusammenführen mehrerer Datenquellen anhand einer ID.
  • Beispiele für PowerShell-Anwendungsfälle: Eine Behörde automatisierte den Lebenszyklus ihrer Active-Directory-Konten, ein Gesundheitsdienstleister die Patch-Planung und die Compliance-Berichterstattung.
  • Sicherheit in jedes Skript einbauen: Zugriff nach dem Prinzip der Minimalprivilegien und signierte Skripte senken die Sicherheitsrisiken der Automatisierung und sorgen für die Einhaltung regulatorischer Vorgaben.

Die Cybersicherheit entwickelt sich rasant, und IT-Fachkräfte suchen ständig nach Wegen, Produktivität und Effizienz zu steigern. Dieser Leitfaden widmet sich der PowerShell-Automatisierung, einer der leistungsfähigsten und beliebtesten Skriptsprachen unserer Zeit. Sie erfahren, welche Grundlagen wichtig sind, was das Tool leisten kann und welche Best Practices für die Automatisierung wiederkehrender Aufgaben mit PowerShell gelten.

Was ist PowerShell?

PowerShell ist ein Framework für die Aufgabenautomatisierung und das Konfigurationsmanagement von Microsoft. Es dient zugleich als Skriptsprache und als interaktive Befehlszeilen-Shell für die Systemverwaltung.

PowerShell kommt in zahlreichen IT-Bereichen zum Einsatz, etwa in der Systemadministration, der Netzwerkkonfiguration und der Cybersicherheit. Zu den Vorteilen zählen Automatisierung, vereinfachtes Skripting und die Möglichkeit, sowohl Windows- als auch Nicht-Windows-Systeme zu verwalten.

PowerShell ähnelt zwar Skriptsprachen wie Python und Bash, wurde aber für Windows entwickelt und ist direkt in dessen Funktionen und Anwendungen integriert.

Grundlagen der Arbeit mit PowerShell

Wer PowerShell beherrschen will, sollte grundlegende Konzepte verinnerlichen: Cmdlets (ausgesprochen „command-lets“) sind schlanke Befehle in PowerShell, Pipelines ermöglichen die Datenübergabe zwischen Cmdlets.

Ein PowerShell-Skript ist eine Abfolge von Befehlen und Anweisungen, die in der Skriptsprache PowerShell geschrieben sind. Damit lassen sich komplexe Aufgaben automatisieren, indem mehrere Befehle nacheinander ausgeführt werden.

Für den effektiven Einsatz von PowerShell braucht es Vertrautheit mit der PowerShell Integrated Scripting Environment (ISE) sowie ein Grundverständnis von Skriptkonstrukten wie Variablen, Schleifen und Bedingungsanweisungen. Die folgenden Abschnitte zeigen Beispiele für diese Konstrukte.

Einfache PowerShell-Skripte für die Automatisierung

PowerShell-Skripte sind ein mächtiges Tool für die Automatisierung. Sie straffen wiederkehrende Aufgaben, verringern menschliche Fehler und sparen wertvolle Zeit und Ressourcen.

Häufige PowerShell-Aufgaben und die passenden Skripte

Mit PowerShell lässt sich eine Vielzahl von Aufgaben automatisieren. Nachfolgend finden Sie einige einfachere Automatisierungsbeispiele, jeweils mit dem PowerShell-Code und einer Erläuterung der Funktionen, die dieser Code ausführt.

Benutzerbereitstellung und -verwaltung

Beispielcode:

New-ADUser -Name "James Roberts" -SamAccountName "jamesroberts" -UserPrincipalName "jamesroberts@ at domain.com" -AccountPassword (ConvertTo-SecureString "ChangeMe123" -AsPlainText -Force)
# Create a new user New-ADUser -Name "James Roberts" -SamAccountName "jamesroberts" -UserPrincipalName "jamesroberts @at domain.com" -AccountPassword (ConvertTo-SecureString "ChangeMe123" -AsPlainText -Force)
# Create a new user

New-ADUser -Name "James Roberts" -SamAccountName "jamesroberts" -UserPrincipalName "jamesroberts@ at domain.com" -AccountPassword (ConvertTo-SecureString "ChangeMe123" -AsPlainText -Force)

 


Erläuterung: Dieses Skript legt in Active Directory einen neuen Benutzer mit dem Namen „James Roberts“ an, weist einen SAM-Kontonamen (Security Account Manager) zu, setzt den Benutzerprinzipalnamen und gibt das Kontokennwort an.

Datei- und Ordneroperationen

Beispielcode:

# Copy files from one folder to another

$sourceFolder = "C:\source"
$destinationFolder = "D:\destination"

Copy-Item -Path "$sourceFolder\*" -Destination $destinationFolder -Recurse

Erläuterung: Dieses Skript kopiert alle Dateien aus dem Quellordner in den Zielordner, einschließlich der Unterverzeichnisse (rekursiv).

CPU-Überwachung und Berichterstattung

Beispielcode:

# Get CPU usage

$cpuUsage = Get-Counter -Counter "\Processor(_Total)% Processor Time"
$cpuUsage.CounterSamples | ForEach-Object {
    Write-Host "Processor: $($_.InstanceName), Usage: $($_.CookedValue)%"
}

Erläuterung: Dieses Skript ruft Informationen zur CPU-Auslastung aller Prozessoren ab und zeigt den Auslastungsgrad für jeden einzelnen an.

Möglicherweise interessiert Sie auch unser Artikel So senken Sie die CPU-Auslastung.

Weitere PowerShell-Skripte rund um die Überwachung finden Sie im NinjaOne Skript-Hub.

Sicherheitsbezogene Aufgaben

Beispielcode:

# Check open ports on a remote host

$hostname = "example.com"
$ports = 80, 443, 22
$ports | ForEach-Object {
    $port = $_
    $result = Test-NetConnection -ComputerName $hostname -Port $port
    if ($result.TcpTestSucceeded) {
        Write-Host "Port $port is open"
    } else {
        Write-Host "Port $port is closed"
    }
}

Erläuterung: Dieses Skript prüft die Verfügbarkeit bestimmter Ports auf einem Remote-Host und meldet, ob der jeweilige Port offen oder geschlossen ist.

Weitere sicherheitsbezogene Skripte finden Sie im NinjaOne Skript-Hub.

Netzwerkkonfiguration

Beispielcode:

# Configure a network adapter with a static IP address 

$interfaceName = "Ethernet" 
$ipAddress = "192.168.1.100" 
$subnetMask = "255.255.255.0" 
$gateway = "192.168.1.1" 
$dnsServers = "8.8.8.8", "8.8.4.4" 

New-NetIPAddress -InterfaceAlias $interfaceName -IPAddress $ipAddress -PrefixLength 24 -DefaultGateway $gateway 
Set-DnsClientServerAddress -InterfaceAlias $interfaceName -ServerAddresses $dnsServers 

Erläuterung: Dieses Skript konfiguriert einen Netzwerkadapter mit einer statischen IP-Adresse, einer Subnetzmaske, einem Standardgateway und DNS-Serveradressen.

Komplexe Aufgaben mit PowerShell automatisieren

Mit wachsender PowerShell-Routine lassen sich auch komplexere Aufgaben und Szenarien automatisieren. Es folgen einige anspruchsvollere PowerShell-Beispiele samt Erläuterung der ausgeführten Funktionen:

Kontinuierliche Protokollüberwachung und Alarmierung

Beispielcode:

# Monitor a log file and send an email alert on a specific event

$logFilePath = "C:\logs\app.log"
$keywordToMonitor = "ERROR"
$recipientEmail = "[email protected]"
$smtpServer = "smtp.domain.com"
$smtpPort = 587

Get-Content -Path $logFilePath -Wait | ForEach-Object {
    if ($_ -match $keywordToMonitor) {
        Send-MailMessage -From "[email protected]" -To $recipientEmail -Subject "Error Alert" -SmtpServer $smtpServer -Port $smtpPort
    }
}

Erläuterung: Dieses Skript überwacht eine Protokolldatei kontinuierlich auf einen Fehlerzustand, indem es nach einem bestimmten Schlüsselwort („ERROR“) sucht, und versendet eine E-Mail-Alarmierung, sobald es dieses Schlüsselwort findet.

Protokollanalyse und Berichterstattung

Beispielcode:

$results | Export-Csv -Path "log_analysis.csv" -NoTypeInformation
# Analyze log files and generate a report $logFiles = Get-ChildItem -Path "C:\logs" -Filter "*.log" -File $results = @() foreach ($logFile in $logFiles) { $logContent = Get-Content -Path $logFile.FullName $errorCount = ($logContent | Select-String -Pattern "ERROR").Count $results += [PSCustomObject]@{ LogFileName = $logFile.Name ErrorCount = $errorCount } } $results | Export-Csv -Path "log_analysis.csv" -NoTypeInformation
# Analyze log files and generate a report

$logFiles = Get-ChildItem -Path "C:\logs" -Filter "*.log" -File
$results = @()

foreach ($logFile in $logFiles) {
    $logContent = Get-Content -Path $logFile.FullName
    $errorCount = ($logContent | Select-String -Pattern "ERROR").Count
    $results += [PSCustomObject]@{
        LogFileName = $logFile.Name
        ErrorCount = $errorCount
    }
}

$results | Export-Csv -Path "log_analysis.csv" -NoTypeInformation

Erläuterung: Dieses Skript durchsucht ein Verzeichnis nach Protokolldateien, analysiert jede Datei und zählt, wie oft das Schlüsselwort „ERROR“ vorkommt, und erzeugt einen CSV-Bericht mit den Namen der Protokolldateien und der jeweiligen Fehleranzahl.

Möglicherweise interessiert Sie auch unser Artikel Linux-Log-Management: Fortgeschrittene Techniken und Best Practices.

Integration mit Drittanbieter-APIs

Beispielcode:

# Interact with a REST API to retrieve data

$apiUrl = "https://api.example.com/data"

$headers = @{
"Authorization" = "Bearer YourAuthToken"
}

try {
$data = Invoke-RestMethod -Uri $apiUrl -Headers $headers -Method Get

Write-Host "Received data from the API:"
$data | Format-Table
}
catch {
Write-Host "Failed to retrieve data from the API: $($_.Exception.Message)"
} 

Erläuterung: Dieses Skript kommuniziert mit einer REST-API, indem es eine authentifizierte GET-Anfrage sendet, die API-Antwort verarbeitet und die empfangenen Daten anzeigt.

Komplexe Datenverarbeitung

Beispielcode:

# Transform and aggregate data from multiple sources

$data1 = Import-Csv -Path "source1.csv"
$data2 = Import-Csv -Path "source2.csv"

# Merge data from different sources
$mergedData = $data1 | ForEach-Object {
    $item1 = $_
    $matchingItem = $data2 | Where-Object { $_.ID -eq $item1.ID }
    if ($matchingItem) {
        $_ | Select-Object *, @{Name="AdditionalProperty";Expression={$matchingItem.Property}}
    } else {
        $_
    }
}

# Export the merged data

$mergedData | Export-Csv -Path "merged_data.csv" -NoTypeInformation

Erläuterung: Dieses Skript importiert Daten aus zwei CSV-Dateien, führt sie anhand einer gemeinsamen ID zusammen und exportiert die zusammengeführten Daten in eine neue CSV-Datei.

Fallbeispiele: reale Automatisierungsaufgaben, gelöst mit PowerShell

Um die Möglichkeiten von PowerShell greifbar zu machen, betrachten wir zwei Praxisszenarien, in denen PowerShell-Automatisierung komplexe Aufgaben gelöst hat.

Fallbeispiel 1: Verwaltung von Benutzerkonten in Active Directory

Problem: Eine große Behörde mit mehreren Tausend Beschäftigten benötigte eine effiziente Möglichkeit, Benutzerkonten in Active Directory zu verwalten. Dazu zählten das Anlegen neuer Konten, das Deaktivieren oder Löschen von Konten ausgeschiedener Beschäftigter sowie die regelmäßige Aktualisierung von Benutzerattributen.

Lösung: PowerShell übernahm diese Aufgaben automatisiert. Per Skript wurden folgende Abläufe abgedeckt:

  1. Neue Benutzerkonten anlegen: Ein PowerShell-Skript las Benutzerinformationen aus einer CSV-Datei und erstellte in Active Directory automatisiert neue Benutzerkonten mit den passenden Attributen wie Benutzername, Kennwort und Gruppenmitgliedschaften.
  2. Inaktive Benutzerkonten deaktivieren oder löschen: Ein weiteres Skript identifizierte anhand des letzten Anmeldedatums die Konten ausgeschiedener Beschäftigter und deaktivierte oder löschte sie. Das Skript prüft regelmäßig die Benutzeraktivität und führt die erforderlichen Aktionen aus.
  3. Benutzerattribute aktualisieren: PowerShell-Skripte liefen in festgelegten Intervallen, um Benutzerattribute wie Jobbezeichnung, Abteilung und Kontaktdaten auf Basis der Daten aus dem HR-System zu aktualisieren.

Erfahren Sie mehr darüber, wie NinjaOne Ihnen die Verwaltung von Active-Directory-Benutzern erleichtert.

Fallbeispiel 2: Patch-Management

Problem: Ein Systemadministrator bei einem Gesundheitsdienstleister musste sicherstellen, dass alle Server und Arbeitsplatzrechner im Unternehmen regelmäßig die neuesten Sicherheitspatches erhalten, um sich vor Schwachstellen zu schützen.

Lösung: PowerShell-Automatisierung straffte das Patch-Management:

  1. Automatisierte Patch-Bereitstellung: PowerShell-Skripte stellten per Fernzugriff eine Verbindung zu Servern und Arbeitsplatzrechnern her und starteten den Windows-Update-Prozess. Die Skripte planen Updates in Wartungsfenstern ein, um Störungen zu minimieren.
  2. Berichterstattung zum Patch-Status: PowerShell half außerdem dabei, Berichte zum Patch-Status jedes Rechners zu erzeugen. So war ersichtlich, welche Rechner aktuell waren und welche Aufmerksamkeit brauchten.
  3. Sicherheitskonformität: PowerShell-Skripte dienten dazu, erforderliche Sicherheitsupdates und Konfigurationen anzuwenden und zu überprüfen, damit die Geräte die definierten Sicherheitsrichtlinien erfüllen.“

Diese Beispiele zeigen, wie PowerShell IT-Routineaufgaben automatisiert und dabei Effizienz, Genauigkeit und Sicherheit verbessert. In der Praxis sind häufig komplexere Skripte nötig, die an die Anforderungen des jeweiligen Unternehmens angepasst werden müssen.

Erfahren Sie, wie NinjaOne das Patch-Management für jeden Endpunkt automatisieren kann.

Best Practices für PowerShell-Skripte

Wer PowerShell-Skripte souverän schreibt, achtet auf eine einheitliche und nachvollziehbare Syntax: aussagekräftige Variablennamen, erklärende Kommentare und ein logischer Aufbau. Setzen Sie für die sichere Aufgabenautomatisierung mit PowerShell auf die folgenden Best Practices:

PowerShell-Ausführungsrichtlinien nutzen

Mit PowerShell-Ausführungsrichtlinien steuern Sie, welche Skripte ausgeführt werden dürfen. RemoteSigned verlangt beispielsweise, dass aus dem Internet heruntergeladene Skripte von einem vertrauenswürdigen Herausgeber signiert sind, während AllSigned diese Signatur für alle Skripte und Konfigurationsdateien fordert. Ausführungsrichtlinien senken das Risiko, versehentlich nicht vertrauenswürdige Skripte auszuführen, sollten aber nicht als Sicherheitsgrenze verstanden werden.

Sehen Sie sich dazu die Videoanleitung PowerShell-Ausführungsrichtlinien verstehen an.

Digitale Signaturen verwenden

Wer PowerShell-Skripte mit einem Codesignaturzertifikat digital signiert, gewinnt eine zusätzliche Sicherheitsebene. So ist sichergestellt, dass das Skript seit der Signatur nicht manipuliert wurde. PowerShell kann die digitale Signatur bei der Ausführung prüfen und damit die Authentizität bestätigen.

Dem Prinzip der Minimalprivilegien folgen

Orientieren Sie sich bei der Ausführung von PowerShell-Skripten am Prinzip der Minimalprivilegien. Stellen Sie sicher, dass das ausführende Benutzer- oder Dienstkonto nur die unbedingt nötigen Berechtigungen für die Aufgabe besitzt. Verzichten Sie nach Möglichkeit auf hoch privilegierte Konten.

Anmeldeinformationen sicher speichern

Gehen Sie mit Anmeldeinformationen in Skripten über sichere Verfahren um. Das Cmdlet Get-Credential fragt Anmeldeinformationen sicher ab und gibt sie als PSCredential-Objekt zurück. Schreiben Sie Benutzernamen und Kennwörter nicht fest in den Code und nutzen Sie einen geeigneten sicheren Speicher für Anmeldeinformationen oder Geheimnisse, wenn eine dauerhafte Speicherung nötig ist.

Eingaben validieren

Bereinigen und validieren Sie Eingabedaten, um Code-Injection-Angriffe wie SQL- oder Skript-Injection zu verhindern. Verwenden Sie Benutzereingaben niemals ohne sorgfältige Prüfung direkt in der Skriptausführung.

Fehlerbehandlung einbauen

Eine robuste Fehlerbehandlung sorgt dafür, dass Skripte unerwartete Situationen sauber abfangen. Achten Sie darauf, in Fehlermeldungen keine sensiblen Informationen preiszugeben, die Angreifer ausnutzen könnten.

Sichere Protokolle einsetzen

Nutzen Sie für Verbindungen zu Remote-Systemen oder Webdiensten sichere Protokolle wie HTTPS oder SSH. Übertragen Sie sensible Informationen niemals über unverschlüsselte Verbindungen.

Regelmäßig aktualisieren und patchen

Halten Sie PowerShell sowie alle Module und Abhängigkeiten mit den neuesten Sicherheitspatches und Updates aktuell. Veraltete Software ist anfällig für bekannte Exploits.

Protokollieren und auditieren

Richten Sie Protokollierungs- und Auditing-Mechanismen ein, um die Skriptausführung nachzuvollziehen und verdächtige Aktivitäten zu erkennen. Das Cmdlet Start-Transcript leistet dabei gute Dienste.

Regelmäßige Code-Reviews durchführen

Prüfen Sie PowerShell-Skripte regelmäßig in Code-Reviews auf potenzielle Sicherheitsschwachstellen. Ziehen Sie Werkzeuge zur Codeanalyse in Betracht, um diesen Prozess zu automatisieren.

Branchenempfehlungen beachten

Bleiben Sie über branchenspezifische Sicherheitsempfehlungen und Compliance-Anforderungen auf dem Laufenden, die für Ihr Unternehmen gelten, etwa PCI DSS, HIPAA oder Datenschutz-Grundverordnung. Achten Sie darauf, dass entwickelte Skripte diesen Standards entsprechen.

Wer diese Sicherheitspraktiken befolgt, senkt die Risiken des PowerShell-Skriptings und trägt zu einer sichereren, Compliance-konformen IT-Umgebung bei. Sicherheit ist ein fortlaufender Prozess: Nur wer Skripte regelmäßig überprüft und aktualisiert, bleibt gegen neue Bedrohungen gewappnet.

Eine Automatisierungsstrategie steigert die Effizienz

Mit einer durchdachten PowerShell-Automatisierungsstrategie können IT-Teams ihre Abläufe optimieren, effizient skalieren, die Sicherheit stärken und flexibel bleiben. Die Vielseitigkeit von PowerShell deckt die Automatisierung einfacher wie komplexer Aufgaben ab und macht das Tool zu einem entscheidenden Hebel für Leistung und Effizienz.

IT-Fachkräfte können die hier vorgestellten Hinweise nutzen, um ihre Automatisierungsstrategie mit Zuversicht aufzubauen.

Wer seine Automatisierung weiter ausbauen möchte, findet in der IT-Automatisierung von NinjaOne Werkzeuge, mit denen IT-Teams Aufgaben und Workflows in großem Maßstab automatisieren. Patching, Softwareverteilung und Behebung laufen dabei zentral in einem einzigen Dashboard zusammen. Aufgaben lassen sich zeitgesteuert, als Reaktion auf definierte Bedingungen oder bei Bedarf ausführen. Automatisierte Reaktionen können zudem in Geräte- und Gruppenrichtlinien hinterlegt werden, mit der Option, sie bei Bedarf zu überschreiben oder anzupassen.

FAQs

Nutzen Sie PowerShell 7 oder höher für plattformübergreifende Skripte und behalten Sie Windows PowerShell 5.1 für ältere, rein Windows-basierte Module. Testen Sie Module und Skripte vor dem Rollout in der jeweiligen Zielumgebung.

Verwenden Sie Get-Credential, um Anmeldeinformationen bei Bedarf sicher abzufragen, oder hinterlegen Sie Geheimnisse in einem geeigneten sicheren Tresor, etwa PowerShell SecretManagement mit einem unterstützten Vault oder Azure Key Vault. Schreiben Sie Benutzernamen, Kennwörter oder andere Geheimnisse niemals fest in Skripte.

Ja. Mit PowerShell Remoting (Enter-PSSession, Invoke-Command über WinRM oder SSH führen Sie Skripte auf entfernten Rechnern aus. Planen können Sie Skripte über die Aufgabenplanung, Azure Automation oder Ihr RMM-/CI-System. Beschränken Sie Remoting-Endpunkte immer und authentifizieren Sie sich nach dem Prinzip der Minimalprivilegien.

Führen Sie das Skript mit dem Parameter -WhatIf aus, sofern unterstützt. So sehen Sie, was das Skript tun würde, ohne Änderungen vorzunehmen. Alternativ testen Sie es zunächst auf einem einzelnen Rechner außerhalb der Produktion.

Das könnte Sie auch interessieren

Sind Sie bereit, die schwierigsten Aufgaben der IT zu vereinfachen?