VOLUME_MOUNT/xml_export.py

151 lines
6.0 KiB
Python

import xml.etree.ElementTree as ET
import os
import subprocess
import requests
def request(function,variable): ##API-Server
url = (f"http://api.stines.de:8001/{function}")
response = requests.post(url,json = variable,headers={'access_token':'^YWUbG7yX*V!tV^KBSd*2c&vdN3wV9a2i7f3hfGFMBYFxi6#mMiJGiaA5KEHE%B*miK%qb7rQ67gmcYP@gqmux8'})
return response
def extract_gpo_permissions(xml_file_path, output_file_path):
# XML-Datei laden
with open(xml_file_path, 'r', encoding="utf-8") as xml_file:
xml_content = xml_file.read()
root = ET.fromstring(xml_content)
count = 0
# XML-Namespace deklarieren
namespaces = {
"gp": "http://www.microsoft.com/GroupPolicy/Types/Security",
"type" : "http://www.microsoft.com/GroupPolicy/Types",
"gp_drive": "http://www.microsoft.com/GroupPolicy/Settings/DriveMaps"
}
gruppe = []
# Alle TrusteePermissions-Blöcke aus der XML-Datei auswählen
trustee_permissions_blocks = root.findall(".//gp:TrusteePermissions", namespaces)
for trustee_permissions_block in trustee_permissions_blocks:
trustee = trustee_permissions_block.find(".//type:Name", namespaces).text
# Überprüfe, ob der Trustee-Name mit "G-" beginnt oder "scannerworkst" enthält
if "G-" in trustee or "scannerwork" in trustee:
trustee = trustee.split('\\')
result = f"{trustee[-1]}"
# print(result)
if result != "":
gruppe.append(result)
drives = []
# Alle DriveMapSettings-Blöcke aus der XML-Datei auswählen
drive_map_settings_blocks = root.findall(".//gp_drive:DriveMapSettings/gp_drive:Drive", namespaces)
for drive_map_settings_block in drive_map_settings_blocks:
properties = drive_map_settings_block.find(".//gp_drive:Properties", namespaces)
if properties.get("action") != "D":
drive_path = properties.get("path")
drive_letter = properties.get("letter")
drive_label = properties.get("label")
# Erstelle ein neues Array für die Ergebnisse der aktuellen Schleifeniteration
aktuelles_ergebnis = [gruppe, drive_letter, drive_path, drive_label]
# Füge das aktuelle Array zur Liste der Ergebnisse hinzu
drives.append(aktuelles_ergebnis)
return drives
def get_local_ip():
powershell_script = '''
(Get-NetIPAddress | Where-Object { $_.PrefixOrigin -eq "Dhcp" }).IPAddress
'''
result = subprocess.check_output(["powershell.exe", "-command", powershell_script], universal_newlines=True)
ip = result.rsplit('.',1)
print(ip[0])
ip = ip[0] + '.' + "0"
return ip
def powershell_gpo_export():
script = r'''# Verzeichnis, in dem die XML-Berichte gespeichert werden sollen
$reportDirectory = "C:\GPO_Export"
# Verzeichnis, in dem die DriveMapSettings-Berichte gespeichert werden sollen
$driveMapSettingsDirectory = "C:\GPO_Export\DriveMapSettings"
# Erstellen Sie den Ordner "DriveMapSettings", wenn er nicht vorhanden ist
if (-not (Test-Path -Path $driveMapSettingsDirectory)) {
New-Item -Path $driveMapSettingsDirectory -ItemType Directory
}
# Abrufen aller GPOs in Ihrer Domäne
$allGPOs = Get-GPO -All
# Iterieren durch alle GPOs und erstellen Sie einen Bericht für jedes GPO
foreach ($GPO in $allGPOs) {
# GPO-Namen ohne Doppelpunkte
$GPONameWithoutColon = $GPO.DisplayName -replace ':', ''
# Berichtsnamen basierend auf dem GPO-Namen ohne Doppelpunkte
$reportName = "$GPONameWithoutColon.xml"
# Vollständiger Pfad zum XML-Bericht
$reportPath = Join-Path -Path $reportDirectory -ChildPath $reportName
# GPO-Bericht erstellen und in XML speichern
$GPO | Get-GPOReport -ReportType XML | Out-File -FilePath "$reportPath" -Encoding UTF8
# Überprüfen, ob der Bericht DriveMapSettings-Einstellungen enthält
$containsDriveMapSettings = (Get-Content -Path $reportPath) -match "DriveMapSettings"
if ($containsDriveMapSettings) {
# Verschieben Sie den Bericht in den "DriveMapSettings"-Ordner
$newReportPath = Join-Path -Path $driveMapSettingsDirectory -ChildPath $reportName
Move-Item -Path $reportPath -Destination $newReportPath
Write-Host "Bericht für $($GPO.DisplayName) mit DriveMapSettings wurde in $newReportPath verschoben."
}
else {
# Löschen Sie den Bericht, wenn er keine DriveMapSettings-Einstellungen enthält
Remove-Item -Path $reportPath
}
}
# Verzeichnis, in dem die XML-Dateien gespeichert sind
$xmlDirectoryPath = $driveMapSettingsDirectory
# Verzeichnis, in dem die Ergebnisse gespeichert werden sollen
$outputDirectory = $driveMapSettingsDirectory
if (-not (Test-Path -Path $outputDirectory)) {
New-Item -Path $outputDirectory -ItemType Directory
}
'''
subprocess.run(["powershell", "-Command", script], capture_output = True,text = True)
powershell_gpo_export()
database = request("host/get/database",{"ip":get_local_ip()}) ##GET DATABASE FROM SQL-SERVER
ordner_pfad = 'C:\\GPO_Export\\DriveMapSettings\\'
# Durchlaufe alle Dateien im Ordner
for datei in os.listdir(ordner_pfad):
count = 0
if datei.endswith('.xml'):
gruppe = extract_gpo_permissions(f"{ordner_pfad}\\{datei}", "output.txt")
for i in gruppe:
try:
gruppe_name = i[0][0]
letter = i[1]
path = i[2]
label = i[3]
print(gruppe_name)
print(request("add/group/volume",{"group": gruppe_name,"letter": letter, "path": path.replace("\\","\\\\"),"label": label, "dbname": database.text.replace('"','')}).text)
except:
next