simple server administration with server infos stored in json
This commit is contained in:
82
ServerTools.psm1
Normal file
82
ServerTools.psm1
Normal 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
170
readme.md
Normal 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
15
servers.json
Normal file
@@ -0,0 +1,15 @@
|
||||
{
|
||||
"groups": {
|
||||
"TST": [
|
||||
{ "name": "serverTST1" },
|
||||
{ "name": "serverTST2" }
|
||||
],
|
||||
"ABN": [
|
||||
{ "name": "serverABN1" }
|
||||
],
|
||||
"PRD": [
|
||||
{ "name": "serverPRD1" },
|
||||
{ "name": "serverPRD2" }
|
||||
]
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user