Automatisierter Snipe-IT Hardware-Export mit PowerShell

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:

  1. 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.
  2. Datenverarbeitung – Die empfangenen JSON-Daten werden gefiltert und relevante Informationen (z. B. Name, Modell, Seriennummer) extrahiert.
  3. Export nach Excel – Mit dem PowerShell-Modul ImportExcel wird 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 $APIKEY

Das 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 $ExcelFilePath

Die Daten werden in eine Excel-Datei geschrieben, die anschließend für Berichte oder Analysen verwendet werden kann.

Verwendung des Skripts

  1. 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.xlsx

Dieses 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.