commit 49696eb0a17a7cda4d5c64f88fc7ff3c350eb790 Author: maxxi Date: Sun Mar 29 22:42:14 2026 +0200 simple services retreival and optional export diff --git a/CustomObject.psm1 b/CustomObject.psm1 new file mode 100644 index 0000000..4cf7a67 --- /dev/null +++ b/CustomObject.psm1 @@ -0,0 +1,31 @@ +function Get-Services{ + param( + [string]$searchName = "*", + [string]$status = "*", + [string]$export, + [string]$path + ) + + $results = @() + + if ($export -and -not $path) { + throw "Wenn -export verwendet wird, muss auch -path angegeben werden." + } + + Get-Service | ForEach-Object { + $results += [PSCustomObject]@{ + Name = $_.Name + DisplayName = $_.DisplayName + Status = $_.Status + } + } + + $results = $results | Where-Object { $_.DisplayName -like $searchName -and $_.Status -like $status } + + switch ($export) { + json { $results | ConvertTo-Json | Out-File ".\services.json" } + csv { $results | Export-Csv -Path "services.csv" -NoTypeInformation } + } + + return $results +} diff --git a/readme.md b/readme.md new file mode 100644 index 0000000..26685e5 --- /dev/null +++ b/readme.md @@ -0,0 +1,137 @@ +# Get-Services PowerShell Modul + +## 📖 Beschreibung + +Die Funktion **Get-Services** dient dazu, Windows-Dienste auszulesen, zu filtern und optional zu exportieren. + +Sie ermöglicht: + +* Filtern nach **DisplayName** +* Filtern nach **Status** +* Ausgabe als strukturierte Objekte (PSCustomObject) +* Export als **JSON** oder **CSV** + +--- + +## ⚙️ Funktionsweise + +Die Funktion liest alle Dienste über `Get-Service` aus und speichert relevante Informationen in einem strukturierten Objekt: + +* Name +* DisplayName +* Status + +Anschließend erfolgt eine Filterung basierend auf den übergebenen Parametern. + +Optional können die Ergebnisse exportiert werden. + +--- + +## 📥 Parameter + +| Parameter | Typ | Beschreibung | +| ------------- | ------ | --------------------------------------------------------------- | +| `-searchName` | string | Filtert nach DisplayName (Wildcard möglich, Standard: `*`) | +| `-status` | string | Filtert nach Status (z. B. `Running`, `Stopped`, Standard: `*`) | +| `-export` | string | Exportformat (`json` oder `csv`) | +| `-path` | string | Pfad für den Export (Pflicht, wenn `-export` gesetzt ist) | + +--- + +## ⚠️ Abhängigkeiten + +Wenn der Parameter `-export` verwendet wird, **muss auch `-path` angegeben werden**, andernfalls wird ein Fehler ausgelöst: + +``` +Wenn -export verwendet wird, muss auch -path angegeben werden. +``` + +--- + +## 🚀 Beispiele + +### 🔍 Alle Services anzeigen + +```powershell +Get-Services +``` + +--- + +### 🔎 Nach Namen filtern + +```powershell +Get-Services -searchName "*xbox*" +``` + +--- + +### 📊 Nur laufende Services anzeigen + +```powershell +Get-Services -status "Running" +``` + +--- + +### 📁 Export als JSON + +```powershell +Get-Services -searchName "*xbox*" -export json -path "C:\temp\services.json" +``` + +--- + +### 📄 Export als CSV + +```powershell +Get-Services -status "Running" -export csv -path "C:\temp\services.csv" +``` + +--- + +## 📤 Rückgabewert + +Die Funktion gibt ein Array von **PSCustomObjects** zurück: + +```powershell +Name : Spooler +DisplayName : Druckwarteschlange +Status : Running +``` + +Diese können direkt weiterverarbeitet werden: + +```powershell +Get-Services | Where-Object { $_.Status -eq "Running" } +``` + +--- + +## 🧠 Hinweise + +* Wildcards (`*`) werden unterstützt +* Die Filterung erfolgt nach dem Einlesen aller Services +* Export erfolgt aktuell unabhängig vom `-path` Parameter (Verbesserungspotential) + +--- + +## 🔧 Verbesserungsideen + +* Nutzung von `-path` im Export implementieren +* Performance verbessern (Verzicht auf `+=`) +* Direkte Filterung in der Pipeline statt nachträglich +* Validierung für `-export` (z. B. nur `json` oder `csv` erlauben) + +--- + +## 📌 Fazit + +Die Funktion eignet sich ideal für: + +* schnelle Service-Analysen +* Reporting +* Automatisierung +* Export von Service-Zuständen + +--- diff --git a/services.csv b/services.csv new file mode 100644 index 0000000..e69de29 diff --git a/services.json b/services.json new file mode 100644 index 0000000..937b511 --- /dev/null +++ b/services.json @@ -0,0 +1,77 @@ +[ + { + "Name": "AudioEndpointBuilder", + "DisplayName": "Windows-Audio-Endpunkterstellung", + "Status": 4 + }, + { + "Name": "Audiosrv", + "DisplayName": "Windows-Audio", + "Status": 4 + }, + { + "Name": "EventLog", + "DisplayName": "Windows-Ereignisprotokoll", + "Status": 4 + }, + { + "Name": "FontCache", + "DisplayName": "Windows-Dienst für Schriftartencache", + "Status": 4 + }, + { + "Name": "LicenseManager", + "DisplayName": "Windows-Lizenz-Manager-Dienst", + "Status": 4 + }, + { + "Name": "mpssvc", + "DisplayName": "Windows Defender Firewall", + "Status": 4 + }, + { + "Name": "SecurityHealthService", + "DisplayName": "Windows-Sicherheitsdienst", + "Status": 4 + }, + { + "Name": "StiSvc", + "DisplayName": "Windows-Bilderfassung (WIA)", + "Status": 4 + }, + { + "Name": "W32Time", + "DisplayName": "Windows-Zeitgeber", + "Status": 4 + }, + { + "Name": "Wcmsvc", + "DisplayName": "Windows-Verbindungs-Manager", + "Status": 4 + }, + { + "Name": "whesvc", + "DisplayName": "Windows-Integrität und optimierte Oberflächen", + "Status": 4 + }, + { + "Name": "Winmgmt", + "DisplayName": "Windows-Verwaltungsinstrumentation", + "Status": 4 + }, + { + "Name": "WpnService", + "DisplayName": "Windows-Pushbenachrichtigungssystemdienst", + "Status": 4 + }, + { + "Name": "WpnUserService_6820f", + "DisplayName": "Windows-Pushbenachrichtigungs-Benutzerdienst_6820f", + "Status": 4 + }, + { + "Name": "WSearch", + "DisplayName": "Windows Search", + "Status": 4 + } +]