Fehler bei der Ausführung der Funktion session_setup()

Fragen zu WAPT-Paketen / Anfragen und Hilfe bezüglich WAPT-Paketen.
Forumregeln
Community-Forumregeln
* Englischer Support auf www.reddit.com/r/wapt
* Französischer Community-Support ist in diesem Forum verfügbar.
* Bitte kennzeichnen Sie gelöste Themen mit [GELÖST].
* Bitte bearbeiten Sie keine Themen, die mit [GELÖST] markiert sind. Erstellen Sie stattdessen ein neues Thema und verweisen Sie auf das alte.
* Geben Sie die installierte WAPT-Version, die vollständige Versionsnummer und die Build-Nummer (2.2.1.11957 / 2.2.2.12337 / usw.) sowie die Enterprise-/Discovery-Edition an.
* Versionen 1.8.2 und älter werden nicht mehr unterstützt. Fragen zu Version 1.8.2 werden nur beantwortet, wenn sie sich auf ein Upgrade auf eine unterstützte Version (2.1, 2.2 usw.) beziehen.
* Geben Sie das Server-Betriebssystem (Linux/Windows) und die Version (Debian Buster/Bullseye – CentOS 7 – Windows Server 2012/2016/2019) an.
* Geben Sie gegebenenfalls das Betriebssystem des Administrations-/Paketerstellungsrechners und des Rechners mit dem problematischen Agenten an (Windows 7/10/11/Debian 11/etc.).
* Vermeiden Sie es, mehrere Fragen in einem Thema zu stellen, da diese sonst möglicherweise ignoriert werden. Falls mehrere Themen relevant sind, erstellen Sie bitte separate Themen, vorzugsweise nacheinander und nicht gleichzeitig (d. h. vermeiden Sie Spam im Forum).
* Fügen Sie Code-Snippets, Screenshots und andere Bilder direkt in Ihren Beitrag ein. Links zu Pastebin, Bitly und anderen Drittanbieterseiten werden systematisch entfernt.
* Wie in jedem Community-Forum erfolgt die Unterstützung freiwillig durch die Mitglieder. Für kommerziellen Support kontaktieren Sie bitte den Vertrieb von Tranquil IT unter +44 2 40 97 57 55.
Antwort
brice73
Nachrichten: 42
Anmeldung: 13. Februar 2023 – 8:05 Uhr

29. September 2025 – 17:30 Uhr

Guten Morgen,

Ich habe ein Paket, das innerhalb der Funktion `session_setup` zwei Werte aus einem Registrierungsschlüssel löschen muss (sofern diese Werte vorhanden sind). Hier ist der Code:

Code: Alle auswählen

def session_setup():

    nom_PC=get_computername().lower()

    if "pm" in nom_PC:
        if reg_value_exists(HKEY_CURRENT_USER,'Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\System','Wallpaper') :
            registry_delete(HKEY_CURRENT_USER,'Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\System','Wallpaper')

        if reg_value_exists(HKEY_CURRENT_USER,'Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\System','WallpaperStyle'):   
            registry_delete(HKEY_CURRENT_USER,'Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\System','WallpaperStyle')
Sobald das Paket installiert ist und sich ein Benutzer anmeldet, für den beide Werte im Schlüssel vorhanden sind, werden diese beiden Werte nicht gelöscht.

Wenn ich eine Eingabeaufforderung öffne und die Funktion session-setup für dieses Paket manuell ausführe, erhalte ich folgenden Fehler:

Code: Alle auswählen

Microsoft Windows [version 10.0.26100.6584]
(c) Microsoft Corporation. Tous droits réservés.

U:\>wapt-get session-setup col73-pi-fonds-ecran
Using config file: C:\Program Files (x86)\wapt\wapt-get.ini
Configuring col73-pi-fonds-ecran ...
Running session_setup for package col73-pi-fonds-ecran(=0-11) and user test
2025-09-29 17:12:08,371 CRITICAL Fatal error in session_setup function: AttributeError: __enter__:
Traceback (most recent call last):
  File "C:\Program Files (x86)\wapt\waptpackage.py", line 3004, in call_setup_hook
    hookdata = hook_func()
  File "<string>", line 43, in session_setup
  File "C:\Program Files (x86)\wapt\setuphelpers_windows.py", line 3862, in registry_delete
    with reg_openkey_noredir(root, path, sam=KEY_WRITE) as key:
AttributeError: __enter__

2025-09-29 17:12:08,387 CRITICAL session_setup failed for package col73-pi-fonds-ecran(=0-11) and user test
Done
Wenn ich jedoch eine Eingabeaufforderung mit Administratorrechten öffne und die Sitzungseinrichtungsfunktion für dieses Paket ausführe, wird sie erfolgreich ausgeführt (ich überprüfe, ob die 2 Werte im Registrierungsschlüssel tatsächlich gelöscht wurden):

Code: Alle auswählen

Microsoft Windows [version 10.0.26100.6584]
(c) Microsoft Corporation. Tous droits réservés.

C:\Windows\System32>wapt-get session-setup col73-pi-fonds-ecran
Using config file: C:\Program Files (x86)\wapt\wapt-get.ini
Configuring col73-pi-fonds-ecran ...
Running session_setup for package col73-pi-fonds-ecran(=0-11) and user test
Done
Woher könnte das Problem kommen und gibt es eine Möglichkeit, die Funktion session-setup() automatisch für jeden Benutzer beim Einloggen auszuführen?
WAPT Enterprise 2.6.1.17765
WAPT-Server unter Debian 13
Administration/Paketerstellung unter Windows 11/10
Benutzeravatar
Sfonteneau
WAPT-Experte
Nachrichten: 2322
Registriert: 10. Juli 2014 - 23:52 Uhr
Kontakt:

30. September 2025 - 12:45 Uhr

Hallo

, anscheinend ist das nicht möglich, da die standardmäßig auf „Richtlinien“ eingestellten ACLs dem Benutzer nicht erlauben, diesen Schlüssel zu ändern.

Die Sitzungseinrichtung wird mit Benutzerrechten ausgeführt und verfügt daher nicht über die erforderlichen Berechtigungen.
Anlagen
Capture.PNG
Capture.PNG (37,49 KB) 16175 Mal angesehen
brice73
Nachrichten: 42
Anmeldung: 13. Februar 2023 – 8:05 Uhr

7. Oktober 2025 – 19:29 Uhr

Hallo Simon,

vielen Dank für deine Antwort. Obwohl es etwas unlogisch erscheint, dachte ich, session_setup() würde mit Systemkontorechten ausgeführt. Ich habe jedoch eine andere Lösung gefunden (mit LGPO.exe).

Du kannst den Thread als gelöst markieren.

Viele Grüße,
WAPT Enterprise 2.6.1.17765
WAPT-Server unter Debian 13
Administration/Paketerstellung unter Windows 11/10
Benutzeravatar
dcardon
WAPT-Experte
Nachrichten: 1953
Anmeldung: 18. Juni 2014 - 09:58 Uhr
Ort: Saint Sébastien sur Loire
Kontakt:

8. Oktober 2025 – 9:39 Uhr

Hallo Brice,
brice73 schrieb: 7. Okt. 2025 - 19:29 Uhr
Vielen Dank für Ihre Antwort. Obwohl es nicht sehr logisch ist, dachte ich, session_setup() würde mit Systemkontorechten ausgeführt... Ich habe einen anderen Weg gefunden (mit LGPO.exe).

Sie können den Thread als gelöst markieren.
Vielen Dank für Ihr Feedback. Falls Sie die setup.py-Datei zur Hand haben, teilen Sie sie bitte. Wenn Sie diese Frage gestellt haben, ist es wahrscheinlich, dass auch andere sie haben.

Hinweis: lgpo.exe ist zwar kostenlos, darf aber nicht weiterverbreitet werden (aufgrund restriktiver und ausdrücklicher Microsoft-Lizenzbestimmungen). Daher kann es nicht im Store angeboten werden, kann aber dennoch als Beispiel für andere dienen.

Aufrichtig,

Denis
Denis Cardon – Tranquil IT
Teilen Sie Ihre Erfahrungen auf WAPT! Senden Sie uns Ihre Blog- und Artikel-URLs im „Ihre Meinung des Forums, und wir werden sie auf der WAPT-
brice73
Nachrichten: 42
Anmeldung: 13. Februar 2023 – 8:05 Uhr

10. Oktober 2025 - 10:12 Uhr

Hallo Denis,

Warum nicht? Mir erschien es nicht nützlich (die setup.py ist auch sehr kurz).

Eine kurze Datei (im PDF-Format) von Microsoft zur Verwendung von LGPO.exe ist sehr aussagekräftig. Mehrere Pakete in unserer Infrastruktur verwenden LGPO.exe zur Konfiguration lokaler Gruppenrichtlinienobjekte (zusätzlich zu den auf Domänenebene in Active Directory aktivierten Gruppenrichtlinienobjekten).

Um ein Benutzer-GPO zu deaktivieren, dachte ich zunächst, es sei besser und einfacher, session_setup() zu verwenden, und zwar für Benutzer, bei denen das GPO bereits aktiviert war, da es die Erstellung von Schlüsseln in HKCU verursachte, die es im Voraus zu löschen schien.

Letztendlich habe ich LGPO erneut verwendet, um die betreffende Benutzer-GPO für alle Benutzer zu deaktivieren. Unten finden Sie die setup.py-Datei mit einigen Kommentaren zu ihrer Verwendung (die Microsoft-Dokumentation ist jedoch wesentlich ausführlicher).

Code: Alle auswählen

# -*- coding: utf-8 -*-
from setuphelpers import *

r"""Ce paquet a comme dépendance col73-pi-debloat-windows-peda car il faut auparavant désactiver windows à la une (windows spotlight) qui modifie automatiquement régulièrement les fonds d'écran
"""

def install():

    nom_PC=get_computername().lower()

    #forçage du fonds d'écran seulement pour les postes élèves
    if not "pm" in nom_PC:

        #fixe le fond d'écran (celui par défaut de Windows)
        #GPO Configuration Utilisateur > Modèles d'administration > Bureau > papier peint du bureau > activé)
        #chemin du fonds d'écran appliqué : C:\Windows\Web\Wallpaper\Windows\img0.jpg
        print('poste élève -> paramétrage du fonds d\'écran via gpo locale')
        run_notfatal(r'.\GPO\LGPO.exe /q /u .\GPO\activate_gpo_u_fonds_ecran.pol')
        print('fonds d\'écran paramétré')

        print('forçage des maj gpo')
        run_powershell(r'Start-Process PowerShell -Verb runAs -Wait -ArgumentList "gpupdate /target:user /force"')
        print('forçage des maj gpo effectué')

    else:
        print('poste professeur -> pas de paramétrage du fonds d\'écran')

        #pour l'annulation du forçage déjà effectué sur les postes professeurs dans une version antérieure du paquet
        #GPO Configuration Utilisateur > Modèles d'administration > Bureau > papier peint du bureau > désactivé
        #exporter le fichier de configuration en mode texte avec LGPO.exe, ne conserver que les lignes de désactivation de la gpo (éditer le fichier avec notepad)
        #puis exporter le fichier .txt en fichier .pol toujours avec LGPO.exe -> on obtiens le fichier de désactivation à appliquer

        run_notfatal(r'.\GPO\LGPO.exe /q /u .\GPO\desactivate_gpo_u_fonds_ecran.pol')

        print('forçage des maj gpo')
        run_powershell(r'Start-Process PowerShell -Verb runAs -Wait -ArgumentList "gpupdate /target:user /force"')
        print('forçage des maj gpo effectué')

Sie können den Thread als gelöst markieren. Vielen Dank

Aufrichtig,
WAPT Enterprise 2.6.1.17765
WAPT-Server unter Debian 13
Administration/Paketerstellung unter Windows 11/10
Antwort