Mit Python automatisiert Patch Reports aus DSM Management Suite erstellen

Mit Python automatisiert Patch Reports aus DSM Management Suite erstellen

Einleitung

Das Herzstück der DSM Management Suite ist das Backend bzw. die Web API. Das Backend verarbeitet sämtliche Daten welche vom Client Sync Script übermittelt werden. Sowohl das Windows Dashboard wie auch das Web Dashboard tun nichts anderes als diese Daten abrufen und für Sie grafisch Darstellen. Sofern Sie individuellere Reports benötigen, oder Reports zeitgesteuert Erzeugen möchten, können Sie dies jederzeit tun, indem Sie einfach selbst Ihre Auswertungen an das Backend von DSM Management Suite senden. Wie Sie mit Python automatisiert Patch Reports aus DSM Management Suite erstellen, verrate ich Ihnen in diesem Artikel

Werbung

Warum Python?

Sie können mit jeder beliebigen Programmiersprache Daten an Ihr Backend senden und auch empfangen. Python ist jedoch sehr leicht zu lernen und auch leicht zu lesen. Noch dazu kommt das Python sehr gute Libraries zur Datenanalyse und sogar für Machine Learning besitzt. Python ist sowohl auf OSX, Windows wie auch Linux lauffähig und damit die optimale Programmiersprache für sämtliche Betriebssysteme

Wir ermitteln alle Patch Daten mit einem Python Script

In diesem Beispiel möchten wir uns mit dem „demo“ Benutzer an der Web API (Backend) anmelden und anschließend Patch Daten abfragen. Diese Daten könnten dann von Ihnen ausgewertet oder weiterverarbeitet werden. In diesem Beispiel werden wir die Daten als CSV Datei abspeichern. Wir verwenden Python 3.7. Andere Versionen funktionieren auch, können jedoch eine andere Syntax benötigen. Wie Sie Python installieren, entnehmen Sie bitte der offiziellen Python Website

Schritt 1: Wir installieren alle notwenigen Abhängigkeiten

Wir verwenden in unserem Script 3 Erweiterungen:

– Requests

– Json

– CSV

Diese Erweiterungen können wir ganz einfach mit der Kommandozeile und „pip“ dem Python Paketmanager installieren

pip install requests
pip install json
pip install csv

Sobald die installation abgeschlossen ist, beginnen wir mit dem eigentlichen Python Script

Schritt 2: Python DSM Management Suite – Die Authentifizierung am Server

Die Authentifizerung am Server bzw. an der API von DSM Management Suite erfolgt mit einem sogenannten JSON Web Token, kurz JWT. Dieses Token müssen wir dann bei jedem Request an den Server mitsenden, damit wir Authentifiziert sind. Dieses Token erhalten wir als „Response“ vom Backend, sobald wir unsere Login Daten an die Login URL vom Server senden. Die Login URL vom Demo Server lautet:

http://demoapi.dsm-management-suite.de/api/Auth/login

Passen Sie Ihre URL entsprechend Ihrer Installation an. Wir verwenden eine Klasse mit dem Namen „Requests“ um unsere Benutzerdaten an den Server zu senden. Diese Klasse müssen wir zuerst importieren. Das gleiche tun wir bereits mit unserer Json Library

import requests
import json

auth_url = "http://dsmapi.marcogriep.de/api/Auth/login"

Im nächsten Schritt definieren wir unsere Login Daten welche wir an den Server senden

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

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

Sollte der Login erfolgreich gewesen sein, erhalten wir als Status Code 200 zurück. Also prüfen wir ob der Login erfolgreich war, und setzen das Programm fort, sofern der Login funktionert hat.

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

War der Login erfolgreich, bekommen wir vom Server im Request Text (Body) das Token zurück. Dieses Token ist als Json formatiert. Dieses speichern wir nun in einer variable zwischen und verwenden dieses Token um an die Patch Daten mit einem Get Request zu gelangen. Hierzu verwenden wir die URL um die Patch Daten zu ermitteln

patch_url = "http://dsmapi.marcogriep.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)

Nun möchten wir lediglich alle erhaltenen Daten als CSV Datei abspeichern. Dies funktioniert einfach mit der CSV Klasse. Diese importieren wir am Anfang der Datei dort wo wir auch die anderen imports definiert haben.

import csv

Nun können wir jeden Patch Datensatz in eine 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 komplette Quellcode:

import requests
import json
import csv

auth_url = "http://dsmapi.marcogriep.de/api/Auth/login"
patch_url = "http://dsmapi.marcogriep.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)

Auf meinem Softwareentwicklungs Blog werde ich noch mehr diverse Ivanti DSM und DSM Management Suite Scripte veröffentlichen. Schauen Sie doch einfach mal vorbei. Sie brauchen ein individuelles Reporting Script? Hier bekommen Sie Hilfe bei der Python Programmierung

Leave a Comment

Your email address will not be published.

Datenschutzbestimmungen akzeptieren