simple services retreival and optional export
This commit is contained in:
31
CustomObject.psm1
Normal file
31
CustomObject.psm1
Normal 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
137
readme.md
Normal 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
0
services.csv
Normal file
|
|
77
services.json
Normal file
77
services.json
Normal 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
|
||||||
|
}
|
||||||
|
]
|
||||||
Reference in New Issue
Block a user