
Automatisierter Snipe-IT Hardware-Export mit PowerShell
Veröffentlicht:Snipe-IT ist ein leistungsfähiges, Open-Source-basiertes Asset-Management-System, das vor allem in Unternehmen zur Verwaltung von IT-Hardware und anderen physischen Ressourcen eingesetzt wird. Mit einer benutzerfreundlichen Web-Oberfläche und einer API-Schnittstelle ermöglicht Snipe-IT eine effiziente Organisation und Nachverfolgung von Geräten.
In diesem Artikel zeigen wir, wie man mit einem PowerShell-Skript automatisch Hardware-Daten aus Snipe-IT exportiert und in eine Excel-Datei speichert. Dies ist besonders nützlich für IT-Administratoren, die regelmäßige Berichte oder Inventarlisten generieren möchten. Das Script könnte noch erweitert werden und nach Standort-Daten aufsummiert werden, oder regelmäßig direkt nach dem Export an Kunden oder Fachbereitsleiter versendet werden.
Funktionalität des PowerShell-Skripts
Das Skript hat folgende Hauptaufgaben:
- Abrufen von Daten aus Snipe-IT – Es sendet eine HTTP-GET-Anfrage an die API von Snipe-IT und ruft eine Liste der im System gespeicherten Hardware-Assets ab.
- Datenverarbeitung – Die empfangenen JSON-Daten werden gefiltert und relevante Informationen (z. B. Name, Modell, Seriennummer) extrahiert.
- Export nach Excel – Mit dem PowerShell-Modul
ImportExcelwird eine Excel-Datei generiert, die die exportierten Daten enthält.
Voraussetzungen
Bevor Sie das Skript ausführen können, müssen folgende Voraussetzungen erfüllt sein:
- Ein installiertes Snipe-IT System mit aktivierter API
- Ein API-Schlüssel zur Authentifizierung
- PowerShell mit dem Modul
ImportExcel, das mit folgendem Befehl installiert werden kann:
Install-Module ImportExcel -Scope CurrentUser
Das PowerShell-Skript im Detail
Das vollständige Skript ruft über die API die Hardware-Daten ab, verarbeitet sie und speichert sie in einer Excel-Datei. Hier sind die wichtigsten Komponenten:
Abrufen der Daten:
$response = Send-JsonWebRequest -Url $URL -ApiKey $APIKEYDas Skript sendet eine Anfrage an die API und speichert die Antwort in $response.
Datenverarbeitung:
$computers = $response.rows | Select-Object @{Name = "ID"; Expression = { $_.id }}, @{Name = "Model"; Expression = { $_.model.name }}Hier werden die relevanten Daten aus der API-Antwort extrahiert.
Excel-Export:
Export-DataToExcel -SheetName "Report" -Data $computers -FilePath $ExcelFilePathDie Daten werden in eine Excel-Datei geschrieben, die anschließend für Berichte oder Analysen verwendet werden kann.
Verwendung des Skripts
- Speichern Sie das Skript als
Export-SnipeIT.ps1.
Führen Sie das Skript in einer PowerShell-Sitzung aus und übergeben Sie URL und APIKEY Paramter. Sie erhalten einen API Key in Ihrer Snipe-IT installation unter "Benutzername->API-Schlüssel verwalten" oben rechts in Ihrem Menü.
.\Export-SnipeIT.ps1 -URL "http://assets.home.local/api/v1/hardware -APIKEY "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ......"Nach erfolgreicher Ausführung finden Sie die Excel-Datei im temporären Verzeichnis (Das Script schreibt auch den Pfad in das Konsolenfenster):
C:\Users\IhrBenutzername\AppData\Local\Temp\ExportierteDaten.xlsxDieses PowerShell-Skript erleichtert die Inventarisierung und Berichterstellung mit Snipe-IT erheblich. Durch die Nutzung der API und die Automatisierung des Exports in eine Excel-Datei wird die manuelle Arbeit reduziert und eine effiziente Verwaltung der Hardware-Ressourcen ermöglicht.
Für eine erweiterte Nutzung kann das Skript beispielsweise um Pivot-Tabellen oder Diagramme erweitert werden, um eine noch bessere Datenanalyse zu ermöglichen.
Das Script zum Download
[CmdletBinding()]
param (
[Parameter()]
[string]$URL = "http://localhost/api/v1/hardware",
[Parameter()]
[string]$APIKEY = ""
)
Import-Module ImportExcel
# Ziel-Excel-Datei definieren
$ExcelFilePath = "$($env:TEMP)\ExportierteDaten.xlsx"
function Export-DataToExcel {
param (
[string]$SheetName,
[array]$Data,
[string]$FilePath
)
if (-not (Test-Path $FilePath)) {
New-ExcelPackage -Path $FilePath -WorksheetName $SheetName -Force
}
# Daten in die Tabelle schreiben
$Data | Export-Excel -Path $FilePath -WorksheetName $SheetName -TableName "${SheetName}Table" -ClearSheet
}
function Send-JsonWebRequest {
param (
[string]$Url,
[string]$ApiKey,
[hashtable]$Headers = @{},
[string]$Method = "GET",
[object]$Body = $null
)
$defaultHeaders = @{
"Authorization" = "Bearer $ApiKey"
"Content-Type" = "application/json"
}
# Zusätzliche Header zusammenführen
$requestHeaders = $defaultHeaders + $Headers
# Konvertiere den Body in JSON, falls er angegeben ist
if ($Body -ne $null) {
$jsonBody = $Body | ConvertTo-Json -Depth 10 -ErrorAction Stop
} else {
$jsonBody = $null
}
# Webrequest absetzen
try {
$response = Invoke-RestMethod -Uri $Url -Headers $requestHeaders -Method $Method -Body $jsonBody -ErrorAction Stop
Write-Output $response
} catch {
Write-Error "Fehler beim Senden des Webrequests: $_"
return $null
}
}
$response = Send-JsonWebRequest -Url $URL -ApiKey $APIKEY
Write-Host $response
# Daten vorbereiten
$computers = $response.rows |
Select-Object @{
Name = "ID"; Expression = { $_.id }
}, @{
Name = "Name"; Expression = { $_.name }
}, @{
Name = "Asset Tag"; Expression = { $_.asset_tag }
}, @{
Name = "Serial"; Expression = { $_.serial }
}, @{
Name = "Model"; Expression = { $_.model.name }
}, @{
Name = "Category"; Expression = { $_.category.name }
}, @{
Name = "Company"; Expression = { $_.company.name }
}, @{
Name = "Location"; Expression = { $_.location.name }
},
@{
Name = "rtd_location"; Expression = { $_.rtd_location.name }
}
Write-Host $computers
Export-DataToExcel -SheetName "Report" -Data $computers -FilePath $ExcelFilePath
Write-Host "Die Daten wurden erfolgreich exportiert: $ExcelFilePath"
SIE BENÖTIGEN BERATUNG ODER UNTERSTÜTZUNG?
Gerne helfe ich bei Ihrem Anliegen.