- Windows-Dienst (golang.org/x/sys/windows/svc) - Collector: CPU (GetSystemTimes), RAM (GlobalMemoryStatusEx), Disks (GetDiskFreeSpaceEx) - WS-Client: gleiche Verbindungslogik wie Linux/BSD Agent - Commands: exec, winget list/install/upgrade/upgrade-all, Windows Updates check/install, reboot - install.ps1: automatische Service-Installation mit Parametern - make agent-windows VERSION=x.x.x
87 lines
2.7 KiB
PowerShell
87 lines
2.7 KiB
PowerShell
#Requires -RunAsAdministrator
|
|
<#
|
|
.SYNOPSIS
|
|
RMM Windows Agent Installer
|
|
.EXAMPLE
|
|
.\install.ps1 -BackendURL "https://192.168.85.13:8443" -APIKey "abc123" -AgentName "PC-Muster"
|
|
#>
|
|
param(
|
|
[Parameter(Mandatory=$true)] [string]$BackendURL,
|
|
[Parameter(Mandatory=$true)] [string]$APIKey,
|
|
[Parameter(Mandatory=$false)] [string]$AgentName = $env:COMPUTERNAME,
|
|
[Parameter(Mandatory=$false)] [switch]$Uninstall
|
|
)
|
|
|
|
$InstallDir = "C:\Program Files\RMMAgent"
|
|
$BinaryName = "rmm-agent-windows.exe"
|
|
$ServiceName = "RMMAgent"
|
|
$ConfigFile = "$InstallDir\config.yaml"
|
|
|
|
if ($Uninstall) {
|
|
Write-Host "Deinstalliere $ServiceName..."
|
|
if (Get-Service -Name $ServiceName -ErrorAction SilentlyContinue) {
|
|
Stop-Service -Name $ServiceName -Force -ErrorAction SilentlyContinue
|
|
& "$InstallDir\$BinaryName" -uninstall
|
|
}
|
|
Remove-Item -Path $InstallDir -Recurse -Force -ErrorAction SilentlyContinue
|
|
Write-Host "Deinstallation abgeschlossen."
|
|
exit 0
|
|
}
|
|
|
|
# Verzeichnis anlegen
|
|
Write-Host "Erstelle Installationsverzeichnis: $InstallDir"
|
|
New-Item -ItemType Directory -Force -Path $InstallDir | Out-Null
|
|
|
|
# Binary kopieren (muss im gleichen Ordner wie das Install-Script liegen)
|
|
$ScriptDir = Split-Path -Parent $MyInvocation.MyCommand.Path
|
|
$SourceBinary = Join-Path $ScriptDir $BinaryName
|
|
|
|
if (-not (Test-Path $SourceBinary)) {
|
|
Write-Error "Binary nicht gefunden: $SourceBinary"
|
|
exit 1
|
|
}
|
|
|
|
Write-Host "Kopiere Binary nach $InstallDir..."
|
|
Copy-Item -Path $SourceBinary -Destination "$InstallDir\$BinaryName" -Force
|
|
|
|
# Konfiguration erstellen
|
|
Write-Host "Erstelle Konfiguration..."
|
|
$Config = @"
|
|
backend_url: "$BackendURL"
|
|
api_key: "$APIKey"
|
|
agent_name: "$AgentName"
|
|
interval_seconds: 60
|
|
insecure: true
|
|
"@
|
|
$Config | Out-File -FilePath $ConfigFile -Encoding UTF8 -Force
|
|
|
|
# Dienst installieren
|
|
Write-Host "Installiere Windows-Dienst..."
|
|
if (Get-Service -Name $ServiceName -ErrorAction SilentlyContinue) {
|
|
Write-Host "Dienst vorhanden — stoppe und entferne alten Dienst..."
|
|
Stop-Service -Name $ServiceName -Force -ErrorAction SilentlyContinue
|
|
& "$InstallDir\$BinaryName" -uninstall
|
|
Start-Sleep -Seconds 2
|
|
}
|
|
|
|
& "$InstallDir\$BinaryName" -config $ConfigFile -install
|
|
if ($LASTEXITCODE -ne 0) {
|
|
Write-Error "Dienst-Installation fehlgeschlagen"
|
|
exit 1
|
|
}
|
|
|
|
# Dienst starten
|
|
Write-Host "Starte Dienst..."
|
|
Start-Service -Name $ServiceName
|
|
Start-Sleep -Seconds 2
|
|
|
|
$svc = Get-Service -Name $ServiceName
|
|
Write-Host "Dienst-Status: $($svc.Status)"
|
|
|
|
if ($svc.Status -eq "Running") {
|
|
Write-Host "`nInstallation erfolgreich!" -ForegroundColor Green
|
|
Write-Host "Log: $InstallDir\rmm-agent.log"
|
|
} else {
|
|
Write-Warning "Dienst laeuft nicht — bitte Log pruefen: $InstallDir\rmm-agent.log"
|
|
}
|