simple server administration with server infos stored in json

This commit is contained in:
2026-03-28 22:56:22 +01:00
commit 6f8c532612
3 changed files with 267 additions and 0 deletions

82
ServerTools.psm1 Normal file
View File

@@ -0,0 +1,82 @@
function Get-ServerConfig {
param(
[string]$Path = ".\servers.json"
)
if (-not (Test-Path $Path)) {
throw "Config-Datei nicht gefunden: $Path"
}
return Get-Content $Path -Raw | ConvertFrom-Json
}
function Get-ServerGroup {
param(
[Parameter(Mandatory)]
[string]$Name
)
$config = Get-ServerConfig
if (-not $config.groups.$Name) {
throw "Gruppe '$Name' existiert nicht"
}
return $config.groups.$Name
}
function Invoke-ServerCommand {
param(
[Parameter(Mandatory)]
[string]$Group,
[Parameter(Mandatory)]
[scriptblock]$ScriptBlock
)
$servers = Get-ServerGroup -Name $Group
foreach ($server in $servers) {
$name = $server.name
Write-Host "[$name] Starte..." -ForegroundColor Cyan
try {
Invoke-Command -ComputerName $name -ScriptBlock $ScriptBlock -ErrorAction Stop
}
catch {
Write-Warning "[$name] Fehler: $_"
}
}
}
function Invoke-ServerCommandParallel {
param(
[string]$Group,
[scriptblock]$ScriptBlock
)
$servers = Get-ServerGroup -Name $Group
$servers | ForEach-Object -Parallel {
$name = $_.name
try {
Invoke-Command -ComputerName $name -ScriptBlock $using:ScriptBlock
}
catch {
Write-Host "[$name] Fehler: $_"
}
}
}
Register-ArgumentCompleter -CommandName Get-ServerGroup, Invoke-ServerCommand -ParameterName Group -ScriptBlock {
param($commandName, $parameterName, $wordToComplete)
$config = Get-ServerConfig
$config.groups.PSObject.Properties.Name |
Where-Object { $_ -like "$wordToComplete*" } |
ForEach-Object {
[System.Management.Automation.CompletionResult]::new($_, $_, 'ParameterValue', $_)
}
}

170
readme.md Normal file
View File

@@ -0,0 +1,170 @@
# ServerTools PowerShell Server Group Automation
## 📖 Übersicht
Dieses PowerShell-Skript ermöglicht die einfache Verwaltung und Automatisierung von Servern anhand definierter Gruppen in einer JSON-Konfigurationsdatei.
Ziel ist es, administrative Aufgaben effizient auf mehrere Server gleichzeitig auszuführen, ohne Servernamen manuell pflegen zu müssen.
---
## ⚙️ Funktionsweise
Die Server werden in einer JSON-Datei in Gruppen organisiert.
Das Skript stellt Funktionen bereit, um:
* Servergruppen auszulesen
* Befehle auf ganze Gruppen anzuwenden
* Remote-Kommandos zentral auszuführen
---
## 📂 Projektstruktur
```
ServerTools/
├── ServerTools.psm1
└── servers.json
```
---
## 🧾 Konfigurationsdatei
### Beispiel: `servers.json`
```json
{
"groups": {
"TU": [
{ "name": "server1" },
{ "name": "server2" }
],
"AU": [
{ "name": "server3" }
]
}
}
```
---
## 🔧 Funktionen
### `Get-ServerConfig`
Lädt die JSON-Konfigurationsdatei.
```powershell
Get-ServerConfig
```
**Parameter:**
* `-Path` (optional): Pfad zur JSON-Datei (Standard: `.\servers.json`)
---
### `Get-ServerGroup`
Gibt alle Server einer bestimmten Gruppe zurück.
```powershell
Get-ServerGroup -Name TU
```
**Parameter:**
* `-Name` (Pflicht): Name der Gruppe
---
### `Invoke-ServerCommand`
Führt ein PowerShell-Skript auf allen Servern einer Gruppe aus.
```powershell
Invoke-ServerCommand -Group TU -ScriptBlock { hostname }
```
**Parameter:**
* `-Group` (Pflicht): Gruppenname
* `-ScriptBlock` (Pflicht): Auszuführender Code
---
### `Invoke-ServerCommandParallel` (optional)
Führt Befehle parallel auf mehreren Servern aus (PowerShell 7+ erforderlich).
```powershell
Invoke-ServerCommandParallel -Group TU -ScriptBlock { hostname }
```
---
## 🚀 Beispiele
### Hostnamen abrufen
```powershell
Invoke-ServerCommand -Group TU -ScriptBlock { hostname }
```
---
### Dienststatus prüfen
```powershell
Invoke-ServerCommand -Group TU -ScriptBlock {
Get-Service -Name Spooler
}
```
---
### Festplatten prüfen
```powershell
Invoke-ServerCommand -Group TU -ScriptBlock {
Get-PSDrive C
}
```
---
## ⚠️ Voraussetzungen
* PowerShell 5.1 oder höher
* Für Remote-Befehle:
* WinRM aktiviert (`Enable-PSRemoting`)
* Netzwerkzugriff auf Zielsysteme
* Entsprechende Berechtigungen
---
## 💡 Best Practices
* Verwende sprechende Gruppennamen (z. B. `Prod-Web`, `Test-DB`)
* Halte die JSON-Datei versioniert (z. B. Git)
* Nutze Module (`.psm1`) für Wiederverwendbarkeit
* Teste Skripte zunächst auf einzelnen Servern
---
## 🔮 Erweiterungsmöglichkeiten
* Integration von Credentials
* Logging und Fehlerauswertung
* Tag-basiertes System (flexiblere Filterung)
* API-Anbindung oder CMDB-Integration
---
## 🧠 Fazit
Dieses Skript bietet eine einfache, aber leistungsstarke Grundlage zur Automatisierung von Serveraufgaben in PowerShell und kann flexibel erweitert werden.
---

15
servers.json Normal file
View File

@@ -0,0 +1,15 @@
{
"groups": {
"TST": [
{ "name": "serverTST1" },
{ "name": "serverTST2" }
],
"ABN": [
{ "name": "serverABN1" }
],
"PRD": [
{ "name": "serverPRD1" },
{ "name": "serverPRD2" }
]
}
}