simple services retreival and optional export

This commit is contained in:
2026-03-29 22:42:14 +02:00
commit 49696eb0a1
4 changed files with 245 additions and 0 deletions

31
CustomObject.psm1 Normal file
View File

@@ -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
}

137
readme.md Normal file
View File

@@ -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
---

0
services.csv Normal file
View File

77
services.json Normal file
View File

@@ -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
}
]