Files
MrBlake 6c2770d932
Build Windows agent / build (win-arm64) (push) Canceled after 0s
Build Windows agent / build (win-x64) (push) Canceled after 0s
fix: require site and correct Intune installation detection
2026-07-21 14:58:43 +02:00

257 lines
7.7 KiB
Markdown

# NetBox Client Agent für Windows
Der Agent inventarisiert einen Windows-PC automatisch in NetBox und im Plugin [ArnesSI/netbox-inventory](https://github.com/ArnesSI/netbox-inventory). Das Ergebnis ist eine einzelne, selbstenthaltende `agent.exe`; auf dem Client muss kein .NET installiert sein.
## Ergebnis in NetBox
Nach dem ersten Lauf entstehen beziehungsweise aktualisieren sich:
- ein `DCIM > Device` für den Windows-PC,
- ein damit verknüpftes Inventory-Asset,
- Interfaces für erkannte Netzwerkadapter,
- je Interface eine zugewiesene primäre MAC-Adresse,
- Module und Module Bays für CPU, RAM-Riegel und Datenträger,
- ein Hardware- und Softwarebericht in den Kommentaren von Device und Asset.
Der Agent erkennt den PC anhand seiner BIOS-Seriennummer wieder. Wiederholte Ausführungen aktualisieren deshalb die vorhandenen Objekte. Es werden keine NetBox-Objekte gelöscht.
> NetBox 4.2 oder neuer wird empfohlen, da MAC-Adressen seit 4.2 eigenständige Objekte sind. Module sind in NetBox eigentlich für austauschbare Hardwarekomponenten vorgesehen; für PC-Inventarisierung werden CPU, RAM und Datenträger bewusst auf dieses Modell abgebildet.
## 1. NetBox vorbereiten
Erforderlich:
1. `netbox-inventory` ist installiert.
2. Eine Device Role mit dem Slug `windows-client` existiert.
3. Die in der Konfiguration genannten Site und Location existieren, sofern sie verwendet werden.
4. Der API-Token besitzt Lese-, Erstell- und Änderungsrechte für:
- DCIM Devices, Manufacturers und Device Types
- DCIM Interfaces und MAC Addresses
- DCIM Module Types, Module Bays und Modules
- Inventory Assets des Plugins
Site und Device Role legt der Agent absichtlich nicht automatisch an. Eine Site ist für jedes NetBox Device zwingend erforderlich. Location ist optional. Hersteller, Device Types und erkannte Hardwaretypen legt der Agent bei Bedarf an.
## 2. Repository herunterladen und EXE bauen
PowerShell öffnen und ausführen:
```powershell
git clone https://git.mrblake.cc/MrBlake/Netbox-Client-Agent-for-Windows.git
Set-Location .\Netbox-Client-Agent-for-Windows
powershell.exe -NoProfile -ExecutionPolicy Bypass `
-File .\scripts\build.ps1 `
-Runtime win-x64
```
Zum Bauen wird das [.NET 8 SDK](https://dotnet.microsoft.com/download/dotnet/8.0) oder neuer benötigt. Die fertige Datei liegt anschließend hier:
```text
dist\win-x64\agent.exe
```
## 3. Konfiguration erstellen
```powershell
Copy-Item .\config.example.json .\dist\win-x64\config.json
notepad .\dist\win-x64\config.json
```
Minimalbeispiel zum Kopieren:
```json
{
"netbox_url": "https://netbox.example.local",
"api_token": "HIER_DEN_NETBOX_TOKEN_EINTRAGEN",
"region": "emea",
"site": "berlin",
"location": "office-1",
"device_role": "windows-client",
"verify_tls": true,
"allow_insecure_tls": false,
"timeout_seconds": 30,
"collect_software": true,
"max_software_entries": 250,
"create_hardware_modules": true,
"create_interfaces": true,
"custom_fields": {}
}
```
`site` muss den Slug einer vorhandenen NetBox Site enthalten, da NetBox für jedes DCIM Device eine Site verlangt. `location` ist optional und darf entfernt oder auf `null` gesetzt werden. `region` grenzt die Suche nach der Site ein.
### Selbstsigniertes Zertifikat
Wenn NetBox ein selbstsigniertes Zertifikat verwendet und Windows der ausstellenden CA nicht vertraut:
```json
"allow_insecure_tls": true
```
Dies ignoriert Zertifikatsketten- und Namensfehler. In produktiven Umgebungen ist es sicherer, die interne CA auf dem Client zu installieren und `allow_insecure_tls` auf `false` zu lassen.
### Optionale Funktionen abschalten
```json
"collect_software": false,
"create_hardware_modules": false,
"create_interfaces": false
```
`max_software_entries` darf zwischen 0 und 1000 liegen. Erfasst wird maschinenweit installierte klassische Windows-Software aus der 32- und 64-Bit-Registry. Benutzerspezifische Store-/AppX-Pakete sind beim Lauf als SYSTEM nicht zuverlässig verfügbar.
Custom Fields werden standardmäßig nicht benötigt. Sollen sie verwendet werden, müssen sie vorher für `DCIM > Device` in NetBox existieren. Unterstützte Zuordnungen sind:
```json
"custom_fields": {
"agent_version": "netbox_agent_version",
"windows_version": "windows_version",
"device_uuid": "device_uuid",
"last_sync": "agent_last_sync"
}
```
## 4. Verbindung testen
Der Dry-Run liest Hardware und NetBox, schreibt aber absichtlich nichts:
```powershell
.\dist\win-x64\agent.exe `
--config .\dist\win-x64\config.json `
--dry-run
```
Erwartete Ausgabe:
```text
Erfasst: CLIENT01, LENOVO 21MW, S/N ABC123
Dry-Run erfolgreich; keine Änderungen geschrieben.
```
## 5. Erste echte Synchronisation
```powershell
.\dist\win-x64\agent.exe `
--config .\dist\win-x64\config.json
```
Erwartete Ausgabe:
```text
Synchronisiert: Device #123, Asset #456
```
## 6. Dauerhaft installieren
PowerShell **als Administrator** öffnen:
```powershell
Set-Location C:\Pfad\zum\Netbox-Client-Agent-for-Windows
powershell.exe -NoProfile -ExecutionPolicy Bypass `
-File .\scripts\install.ps1 `
-SourceDirectory .\dist\win-x64
```
Das Skript:
- kopiert EXE und Konfiguration nach `C:\Program Files\NetBox Windows Agent`,
- erlaubt nur SYSTEM und lokalen Administratoren den Zugriff auf den API-Token,
- erstellt die tägliche geplante Aufgabe `NetBox Windows Agent`,
- startet sofort die erste Synchronisation.
Deinstallation, ebenfalls als Administrator:
```powershell
powershell.exe -NoProfile -ExecutionPolicy Bypass `
-File .\scripts\uninstall.ps1
```
## Intune-Verteilung
Diese vier Dateien gemeinsam als Win32-App (`.intunewin`) paketieren:
```text
agent.exe
config.json
install.ps1
uninstall.ps1
```
Copy-&-Paste-Werte für Intune:
```text
Installationsbefehl:
powershell.exe -NoProfile -ExecutionPolicy Bypass -File .\install.ps1 -SourceDirectory .
Deinstallationsbefehl:
powershell.exe -NoProfile -ExecutionPolicy Bypass -File .\uninstall.ps1
Installationsverhalten:
System
Erkennungsregel (Regeltyp „Datei“):
Pfad: C:\Program Files\NetBox Windows Agent
Datei oder Ordner: agent.exe
Erkennungsmethode: Datei oder Ordner ist vorhanden
Auf 64-Bit-Clients einer 32-Bit-App zugeordnet: Nein
```
## Fehlerbehebung
### `agent.exe fehlt im Quellverzeichnis`
Als `SourceDirectory` muss der Ordner angegeben werden, in dem sowohl `agent.exe` als auch `config.json` liegen:
```powershell
-SourceDirectory .\dist\win-x64
```
### `RemoteCertificateNameMismatch` oder `RemoteCertificateChainErrors`
Zum Testen `allow_insecure_tls` auf `true` setzen. Dauerhaft besser die korrekte interne CA installieren und einen zur URL passenden Zertifikatsnamen verwenden.
### Custom Field ist nicht vorhanden
Wenn keine eigenen NetBox Custom Fields angelegt wurden:
```json
"custom_fields": {}
```
### `403 Forbidden`
Dem Benutzer des API-Tokens fehlen Rechte für den im Fehler genannten Objekttyp.
### `site: Dieses Feld ist erforderlich`
NetBox verlangt für jedes DCIM Device eine Site. In `config.json` den Slug einer vorhandenen Site eintragen:
```json
"site": "berlin",
"location": null
```
### Intune meldet Installation fehlgeschlagen, die Dateien sind aber vorhanden
Bei einer Datei-Erkennungsregel darf im Feld `Pfad` nur der Ordner stehen. `agent.exe` gehört ausschließlich in das separate Feld `Datei oder Ordner`:
```text
Pfad: C:\Program Files\NetBox Windows Agent
Datei oder Ordner: agent.exe
```
### `400 Bad Request`
Die vollständige Antwort hinter `FEHLER:` enthält das von NetBox beanstandete Feld. Häufig fehlen die konfigurierte Device Role, Site oder Location.
## Entwicklung
```powershell
dotnet build
.\scripts\build.ps1 -Runtime win-x64
```
GitHub Actions baut automatisch x64- und ARM64-Artefakte. `config.json`, `dist`, `bin`, `obj` und lokale Build-Werkzeuge werden nicht committed.