Win11 - PowerShell-Automatisierung

In dieser Anleitung werden drei PowerShell-Skripte für Windows 11 erstellt. Ziel ist es, Systeminformationen automatisch auszulesen, lokale Benutzer zu analysieren und eine einfache Netzwerkdiagnose durchzuführen. Zusätzlich werden die Ergebnisse als HTML-, CSV- und LOG-Dateien gespeichert.

Ziel dieser Anleitung: Erstellung von drei PowerShell-Skripten inklusive automatischer Ausgabe in Dateien zur Dokumentation.

1. Voraussetzungen

Neuen Ordner erstellen:

mkdir C:\Scripts

2. PowerShell-Ausführungsrichtlinie prüfen

Falls Skripte nicht gestartet werden können, zuerst die aktuelle Richtlinie prüfen:

Get-ExecutionPolicy

Falls erforderlich, für den aktuellen Benutzer anpassen:

Set-ExecutionPolicy RemoteSigned -Scope CurrentUser
Wichtig: PowerShell-Skripte sollten nur aus vertrauenswürdigen Quellen ausgeführt werden.

3. Skript 1: Systeminformations-Skript

Dieses Skript zeigt Computername, Windows-Version, CPU, RAM und Festplatteninformationen an und speichert das Ergebnis als HTML-Report.

3.1 Datei erstellen

Datei: C:\Scripts\Systeminfo-Report.ps1

$OutputPath = "C:\Scripts\SysteminfoReport.html"

$ComputerSystem = Get-CimInstance Win32_ComputerSystem
$OperatingSystem = Get-CimInstance Win32_OperatingSystem
$Processor = Get-CimInstance Win32_Processor
$Disks = Get-CimInstance Win32_LogicalDisk -Filter "DriveType=3"

$RamGB = [math]::Round($ComputerSystem.TotalPhysicalMemory / 1GB, 2)

$DiskInfo = foreach ($Disk in $Disks) {
    [PSCustomObject]@{
        Laufwerk = $Disk.DeviceID
        GroesseGB = [math]::Round($Disk.Size / 1GB, 2)
        FreiGB = [math]::Round($Disk.FreeSpace / 1GB, 2)
    }
}

$SystemInfo = @"
<h2>Systemübersicht</h2>
<p><b>Computername:</b> $($env:COMPUTERNAME)</p>
<p><b>Windows-Version:</b> $($OperatingSystem.Caption) $($OperatingSystem.Version)</p>
<p><b>CPU:</b> $($Processor.Name)</p>
<p><b>RAM:</b> $RamGB GB</p>
"@

$DiskTable = $DiskInfo | ConvertTo-Html -Fragment

$Html = @"
<html>
<head>
    <meta charset='UTF-8'>
    <title>Systeminformationen</title>
</head>
<body>
    <h1>Systeminformationen Report</h1>
    $SystemInfo
    <h2>Festplatteninformationen</h2>
    $DiskTable
</body>
</html>
"@

$Html | Out-File -FilePath $OutputPath -Encoding UTF8

Write-Host "HTML-Report erstellt: $OutputPath"

3.2 Skript ausführen

C:\Scripts\Systeminfo-Report.ps1
Ergebnis: Die Datei C:\Scripts\SysteminfoReport.html wird erstellt und kann im Browser geöffnet werden.

4. Skript 2: Benutzer-Analyse-Skript

Dieses Skript listet alle lokalen Benutzer auf, zeigt den Kontonamen sowie den Status an und exportiert die Daten als CSV-Datei. Zusätzlich wird die letzte Anmeldung über LastLogon ausgelesen, sofern verfügbar.

4.1 Datei erstellen

Datei: C:\Scripts\Benutzer-Analyse.ps1

$OutputPath = "C:\Scripts\LokaleBenutzer.csv"

$Users = Get-LocalUser | Select-Object Name, Enabled, LastLogon

$Users | Export-Csv -Path $OutputPath -NoTypeInformation -Encoding UTF8

Write-Host "CSV-Datei erstellt: $OutputPath"

4.2 Skript ausführen

C:\Scripts\Benutzer-Analyse.ps1
Ergebnis: Die Datei C:\Scripts\LokaleBenutzer.csv enthält alle lokalen Benutzer mit letzter Anmeldung.

4.3 Hinweis zu LastLogon

Hinweis: Je nach System und Kontotyp kann das Feld LastLogon leer sein. Das ist normal und kein Fehler im Skript.

5. Skript 3: Netzwerk-Diagnose-Skript

Dieses Skript testet die Konnektivität zum Gateway und zu einem DNS-Server. Die Ergebnisse werden in eine Log-Datei mit Zeitstempel geschrieben.

5.1 Datei erstellen

Datei: C:\Scripts\Netzwerk-Diagnose.ps1

$Timestamp = Get-Date -Format "yyyy-MM-dd_HH-mm-ss"
$LogPath = "C:\Scripts\Netzwerkdiagnose_$Timestamp.log"

$Gateway = (Get-NetRoute -DestinationPrefix "0.0.0.0/0" | Sort-Object RouteMetric | Select-Object -First 1).NextHop
$DnsServer = (Get-DnsClientServerAddress -AddressFamily IPv4 | Where-Object {$_.ServerAddresses} | Select-Object -First 1).ServerAddresses[0]

"Netzwerkdiagnose gestartet: $(Get-Date)" | Out-File -FilePath $LogPath -Encoding UTF8
"Gateway: $Gateway" | Out-File -FilePath $LogPath -Append -Encoding UTF8
"DNS-Server: $DnsServer" | Out-File -FilePath $LogPath -Append -Encoding UTF8
"" | Out-File -FilePath $LogPath -Append -Encoding UTF8

if ($Gateway) {
    $PingGateway = Test-Connection -ComputerName $Gateway -Count 2 -Quiet
    "Gateway erreichbar: $PingGateway" | Out-File -FilePath $LogPath -Append -Encoding UTF8
} else {
    "Gateway konnte nicht ermittelt werden." | Out-File -FilePath $LogPath -Append -Encoding UTF8
}

if ($DnsServer) {
    $PingDns = Test-Connection -ComputerName $DnsServer -Count 2 -Quiet
    "DNS erreichbar: $PingDns" | Out-File -FilePath $LogPath -Append -Encoding UTF8
} else {
    "DNS-Server konnte nicht ermittelt werden." | Out-File -FilePath $LogPath -Append -Encoding UTF8
}

"" | Out-File -FilePath $LogPath -Append -Encoding UTF8
"Netzwerkdiagnose beendet: $(Get-Date)" | Out-File -FilePath $LogPath -Append -Encoding UTF8

Write-Host "Log-Datei erstellt: $LogPath"

5.2 Skript ausführen

C:\Scripts\Netzwerk-Diagnose.ps1
Ergebnis: Es wird eine Log-Datei mit Zeitstempel im Ordner C:\Scripts erstellt.

6. Alle erzeugten Dateien im Überblick

Datei Beschreibung
Systeminfo-Report.ps1 Erstellt einen HTML-Report mit Systeminformationen
Benutzer-Analyse.ps1 Exportiert lokale Benutzerinformationen als CSV
Netzwerk-Diagnose.ps1 Schreibt Netzwerk-Testergebnisse in eine Log-Datei
SysteminfoReport.html HTML-Ausgabe des Systeminformations-Skripts
LokaleBenutzer.csv CSV-Export der lokalen Benutzer
Netzwerkdiagnose_*.log Diagnoseprotokoll mit Zeitstempel

7. Optional: Alle Skripte nacheinander starten

Falls alle drei Skripte mit einer einzigen Datei gestartet werden sollen, kann ein zusätzliches Startskript erstellt werden.

Datei: C:\Scripts\Alle-Skripte-starten.ps1

& "C:\Scripts\Systeminfo-Report.ps1"
& "C:\Scripts\Benutzer-Analyse.ps1"
& "C:\Scripts\Netzwerk-Diagnose.ps1"

Write-Host "Alle Skripte wurden ausgeführt."

8. Funktionsprüfung

  1. Ordner C:\Scripts öffnen
  2. Prüfen, ob alle drei .ps1-Dateien vorhanden sind
  3. Skripte in PowerShell als Administrator ausführen
  4. HTML-Datei im Browser öffnen
  5. CSV-Datei mit Excel oder Editor prüfen
  6. LOG-Datei auf erfolgreiche Netzwerktests kontrollieren

9. Häufige Fehler

Wichtig: Wenn ein Skript nicht startet, zuerst die PowerShell-Fehlermeldung genau lesen. Meist liegt der Fehler an Berechtigungen, Pfaden oder der Ausführungsrichtlinie.

10. Fazit

Mit diesen drei PowerShell-Skripten lassen sich unter Windows 11 wichtige Verwaltungs- und Diagnoseaufgaben automatisieren. Systeminformationen werden als HTML dokumentiert, Benutzerdaten als CSV exportiert und Netzwerkprüfungen sauber in einer Log-Datei festgehalten. Damit entsteht eine kleine Automatisierungs-Werkzeugkiste für den Admin-Alltag.