Erstellen Sie automatisch Patch-Berichte aus der DSM Management Suite mit Python

Erstellen Sie automatisch Patch-Berichte aus der DSM Management Suite mit Python
Bildrechte: Foto von Christina Morillo von Pexels - Geschrieben von: Marco Griep

Das Herzstück der DSM Management Suite ist das Backend oder die Web-API. Das Backend verarbeitet alle Daten, die vom Client Sync Script übertragen werden. Sowohl das Windows-Dashboard als auch das Web-Dashboard rufen diese Daten ab und zeichnen sie für Sie grafisch auf. Wenn Sie mehr Einzelberichte benötigen oder zeitgesteuert Berichte erstellen möchten, können Sie dies jederzeit tun, indem Sie Ihre Bewertungen einfach selbst an das Back-End der DSM Management Suite senden. In diesem Artikel werde ich Ihnen erklären, wie Sie mit Python automatisch Patch-Berichte aus der DSM Management Suite erstellen können


Tipp: Es gibt auch ein YouTube-Video über die API-Verwendung der DSM Management Suite. Sieh dir dazu mein Video auf meinem Youtube Channel an.

Warum Python?

Sie können Daten in jeder Programmiersprache an Ihr Backend senden und empfangen. Python ist jedoch sehr leicht zu erlernen und leicht zu lesen. Darüber hinaus verfügt der Python über sehr gute Bibliotheken für die Datenanalyse und sogar für maschinelles Lernen. Python läuft sowohl unter OSX als auch unter Windows und Linux und ist damit die ideale Programmiersprache für alle Betriebssysteme

Wir ermitteln alle Patch-Daten mit einem Python-Skript

In diesem Beispiel möchten wir uns mit dem Benutzer “demo” bei der Web-API (Backend) anmelden und dann Patch-Daten abfragen. Diese Daten könnten dann von Ihnen ausgewertet oder weiterverarbeitet werden. In diesem Beispiel speichern wir die Daten als CSV-Datei. Wir verwenden Python 3.7. Andere Versionen funktionieren, benötigen jedoch möglicherweise eine andere Syntax. Wie man Python installiert, erfahren Sie auf der offiziellen Python Website

Hinweis: Seit Ende 2020 ist das Demo Backend aus kostengründen offline. Bitte verwenden Sie das Dockerfile im GitHub Repository und importieren Sie die Demo-Daten sofern Sie diesem Tutorial folgen möchten.

Schritt 1: Wir installieren alle Abhängigkeiten

Wir nutzen folgende 3 Erweiterungen:

  • Requests
  • Json
  • CSV

Wir können diese Erweiterungen einfach über die Befehlszeile installieren und den Python-Paketmanager “pip”

pip install requests
pip install json
pip install csv

Sobald die Installation abgeschlossen ist, beginnen wir mit dem eigentlichen Python-Skript

Schritt 2: Python DSM Management Suite - Authentifizierung auf dem Server

Die Authentifizierung auf dem Server oder in der API der DSM Management Suite erfolgt über ein sogenanntes JSON Web Token, kurz JWT. Wir müssen dieses Token dann bei jeder Anfrage an den Server senden, damit wir authentifiziert werden. Wir erhalten dieses Token als “Antwort” vom Backend, sobald wir unsere Anmeldedaten vom Server an die Anmelde-URL senden. Die Anmelde-URL vom Demo-Server lautet:

https://api.dsm-management-suite.de/api/Auth/login

Passen Sie Ihre URL entsprechend Ihrer Installation an. Wir verwenden eine Klasse namens “Requests”, um unsere Benutzerdaten an den Server zu senden. Wir müssen diese Klasse zuerst importieren. Dasselbe machen wir bereits mit unserer Json Library

import requests
import json

auth_url = "https://api.dsm-management-suite.de/api/Auth/login"

Im nächsten Schritt definieren wir unsere Anmeldedaten, die wir an den Server senden

data = {
    "username" : "demo",
    "password": "demo1234"
}

auth_request = requests.post(auth_url, auth=(''), verify=False, json=data)

Wenn die Anmeldung erfolgreich war, erhalten wir den Statuscode 200 zurück. Wir prüfen also, ob die Anmeldung erfolgreich war, und setzen das Programm fort, wenn die Anmeldung funktioniert hat.

if auth_request.status_code==200:
    #hier war der login erfolgreich
else:
    print('error Status code: ' + auth_request.status_code)

Wenn die Anmeldung erfolgreich war, erhalten wir das Token im Anfragetext (Text) vom Server zurück. Dieses Token ist als json formatiert. Wir speichern dies jetzt in einer Variablen und verwenden dieses Token, um die Patch-Daten mit einer get-Anfrage abzurufen. Dazu verwenden wir die URL, um die Patch-Daten zu ermitteln. Info: Die in diesem Beispiel verwendete API ist aus kostengründen nicht mehr verfügbar.

patch_url = "https://api.dsm-management-suite.de/api/PatchData"
token = json.loads(auth_request.text)
#print(token["token"])
bearer_token = 'bearer ' + token["token"]
patch_request = requests.get(patch_url, headers={'Authorization': bearer_token})
patchData = json.loads(patch_request.text)

Jetzt wollen wir nur noch alle empfangenen Daten als CSV-Datei speichern. Dies funktioniert nur mit der CSV-Klasse. Wir importieren diese am Anfang der Datei, wo wir auch die anderen Importe definiert haben.

import csv

Jetzt können wir jeden Patch-Datensatz in einer CSV-Datei speichern

    with open('patchData.csv', mode='w') as save_file:
    writer = csv.writer(save_file, delimiter=',', quotechar='"', quoting=csv.QUOTE_MINIMAL)
    writer.writerow(['id', 'computer', 'patch', 'compliance', 'foundDate', 'fixDate', 'createdAt'])
    for patch in patchData:
       writer.writerow([patch['id'], patch['computer'], patch['patch'], patch['compliance'], patch['foundDate'], patch['fixDate'], patch['createdAt']])

Der vollständige Quellcode:

import requests
import json
import csv

auth_url = "https://api.dsm-management-suite.de/api/Auth/login"
patch_url = "https://api.dsm-management-suite.de/api/PatchData"

data = {
    "username" : "demo",
    "password": "demo1234"
}

auth_request = requests.post(auth_url, auth=(''), verify=False, json=data)

if auth_request.status_code==200:
    token = json.loads(auth_request.text)
    print(token["token"])
    bearer_token = 'bearer ' + token["token"]
    patch_request = requests.get(patch_url, headers={'Authorization': bearer_token})
    patchData = json.loads(patch_request.text)

    with open('patchData.csv', mode='w') as save_file:
        writer = csv.writer(save_file, delimiter=',', quotechar='"', quoting=csv.QUOTE_MINIMAL)
        writer.writerow(['id', 'computer', 'patch', 'compliance', 'foundDate', 'fixDate', 'createdAt'])
        for patch in patchData:
            writer.writerow([patch['id'], patch['computer'], patch['patch'], patch['compliance'], patch['foundDate'], patch['fixDate'], patch['createdAt']])
else:
    print('error Status code: ' + auth_request.status_code)

In meinem Softwareentwicklungsblog werde ich noch mehr verschiedene Ivanti DSM- und DSM Management Suite-Skripte veröffentlichen.