Konfiguration¶
Das Modul UserProfile stellt alle wichtigen Konfigurationswerte für diese Erweiterung bereit. Unten findest du das zugehörige Schema sowie ausführliche Erklärungen zu den einzelnen Parametern und eine vollständige Beispielkonfiguration.
Konfigurationsschema¶
Module
UserProfile
Must not be empty.
List
Value list definition
String
Must not be empty.
List
Complex list definition
Must not have duplicates.
Must be one of this:
all,computer,network,vdi
Default Value:
all
Must not be empty.
Maximum length:
120Must match this regular expression:
[^\p{Zl}\p{Zp}\pC]+
Value list definition
String
Must not be empty.
Value list definition
String
Must not be empty.
Value list definition
String
Must not be empty.
Value list definition
String
Must not be empty.
Must match this regular expression:
HKEY_LOCAL_MACHINE[\\/].*
Default Value:
No
Default Value:
Yes
Default Value:
Yes
Must be a valid regular expression.
Default Value:
(?i)^(?:Administrator.*|Default.*|All Users|Public)$
Der Wert roamingProfilePath¶
Mit dem optionalen Wert roamingProfilePath kannst du ein zusätzliches Unterverzeichnis festlegen, das dem Profilpfad angehängt wird. Diese Option ist besonders dann hilfreich, wenn in deiner Netzwerkumgebung der im Active Directory hinterlegte Profilpfad nur auf das Basisverzeichnis verweist, während die eigentlichen Profildaten in einem separaten Unterverzeichnis liegen.
<Module name="UserProfile">
<Value name="roamingProfilePath">w11/PRD</Value>
<Value name="registryPath">ntuser.dat</Value>
(...)
</Module>
Der angegebene Pfad muss immer ein relatives Verzeichnis sein. Du kannst auch mehrere Unterverzeichnisse angeben, die du mit einem Slash trennst. Dieser Unterpfad wird direkt an den vom Assistenten übergebenen Netzwerkpfad angehängt.
[Profilpfad] / [Roaming-Profilpfad]
Beispiel¶
Wenn der Assistent folgenden Netzwerkpfad erhält:
//example01/Profiles/user_123
und du den Wert roamingProfilePath auf w11/PRD setzt, entsteht daraus folgender effektiver Pfad:
//example01/Profiles/user_123/w11/PRD
Der Wert registryPath¶
Mit dem Wert registryPath legst du einen relativen Pfad vom Profilverzeichnis zur Datei fest, in der die Windows Registry gespeichert ist. Im einfachsten Fall – wenn sich die Registry-Datei direkt im Profilverzeichnis befindet, wie es bei lokalen Profilen üblich ist – genügt hier der Dateiname ntuser.dat. Falls in deiner Netzwerkumgebung die Registry-Datei in einem Unterverzeichnis liegt, kannst du den Pfad entsprechend mit Slashes ergänzen.
<Module name="UserProfile">
(...)
<Value name="registryPath">ntuser.dat</Value>
(...)
</Module>
Der konfigurierte Pfad muss immer relativ zum Profilverzeichnis angegeben werden. Unterverzeichnisse trennst du mit einem Slash. Der so angegebene Registry-Pfad wird vom Assistenten direkt an den jeweiligen Profilpfad angehängt.
[Lokaler Profilpfad] / [Registry-Pfad]
[Netzwerk-Profilpfad] / [Registry-Pfad]
[Netzwerk-Profilpfad] / [Roaming-Profilpfad] / [Registry-Pfad]
Die Liste localProfilePaths¶
Mit der Liste localProfilePaths gibst du die Pfade an, in denen nach lokalen Benutzerprofilen gesucht werden soll. Der Platzhalter {computer} wird dabei automatisch durch den vom Assistenten übergebenen Computernamen ersetzt.
<Module name="UserProfile">
(...)
<List name="localProfilePaths">
<Value>\\{computer}\c$\Documents and Settings</Value>
<Value>\\{computer}\c$\Users</Value>
</List>
(...)
</Module>
Suchverhalten¶
Der Assistent durchsucht die angegebenen Verzeichnisse nach Unterordnern. Verzeichnisse mit dem Suffix .eub_* werden dabei ignoriert, da es sich hierbei um Backupverzeichnisse aus früheren Aktionen handelt.
Jedes gefundene Unterverzeichnis wird daraufhin überprüft, ob es eine ntuser.dat-Datei enthält. Ist dies der Fall, wird das Verzeichnis in die Profilliste aufgenommen, aus der der Mitarbeitende das passende Profil auswählen kann.
Die Liste profileSections¶
Mit der Liste profileSections definierst du einzelne Profilabschnitte, die im Assistenten zur Auswahl stehen. Ein Profilabschnitt fasst jeweils eine Gruppe von Registry-Schlüsseln, Verzeichnissen und/oder Dateien zusammen. Je nach gewählter Aktion kann ein solcher Abschnitt gelöscht, beibehalten oder exportiert werden.
Jeder Eintrag in dieser Liste stellt einen eigenen Abschnitt dar, dem du einen Titel gibst. Dieser Titel wird dem Mitarbeitenden im Assistenten angezeigt. So kannst du zum Beispiel alle Registry-Einträge und Dateien, die zur Druckerkonfiguration gehören, unter dem Abschnittstitel „Druckerkonfiguration“ bündeln.
Der Assistent prüft für jeden Abschnitt, ob mindestens ein Registry-Schlüssel, Verzeichnis oder eine Datei im aktuell bearbeiteten Profil vorhanden ist. Ist dies der Fall, wird der Abschnitt als aktiv angezeigt und kann ausgewählt werden. Sind keine der konfigurierten Elemente im Profil vorhanden, erscheint der Abschnitt zwar, wird jedoch als inaktiv markiert.
<Module name="UserProfile">
(...)
<List name="profileSections">
<ListEntry>
<Value name="title">Personal Data</Value>
<List name="registryPaths">
</List>
<List name="directoryPaths">
<Value>Desktop</Value>
<Value>Documents</Value>
<Value>Music</Value>
<Value>Pictures</Value>
</List>
</ListEntry>
(...)
</List>
(...)
</Module>
So sehen die Abschnitte in der Benutzeroberfläche aus.¶
Der Wert modes¶
Mit dem optionalen Wert modes steuerst du, in welchen Arbeitsmodi des Assistenten ein Profilabschnitt angezeigt wird. Du gibst eine durch Leerzeichen getrennte Liste von Modus-Bezeichnungen an, zum Beispiel computer, network oder vdi. Nur wenn einer der angegebenen Modi aktiv ist, wird der Abschnitt sichtbar.
Mit dem Wert all wird der Abschnitt immer angezeigt – dies ist auch der Standardwert.
Ein weiterer Spezialfall: Wenn du den Wert leer lässt, wird der Abschnitt nie angezeigt. Das eignet sich, um einen Abschnitt vorübergehend zu deaktivieren.
<Module name="UserProfile">
(...)
<List name="profileSections">
<ListEntry>
<Value name="title">Personal Data</Value>
<Value name="modes">network</Value>
<List name="registryPaths"></List>
<List name="directoryPaths">
<Value>Desktop</Value>
<Value>Documents</Value>
<Value>Music</Value>
<Value>Pictures</Value>
</List>
</ListEntry>
(...)
</List>
(...)
</Module>
Der Wert title¶
Mit dem Wert title vergibst du den Namen des Profilabschnitts, der dem Mitarbeitenden im Assistenten angezeigt wird. Der Titel sollte die Funktion oder den Inhalt des Abschnitts möglichst treffend beschreiben. Er kann bis zu 120 Zeichen lang sein, darf jedoch keine Zeilenumbrüche oder Steuerzeichen enthalten.
<Module name="UserProfile">
(...)
<List name="profileSections">
<ListEntry>
<Value name="title">Personal Data</Value>
<List name="registryPaths"></List>
<List name="directoryPaths">
<Value>Desktop</Value>
<Value>Documents</Value>
<Value>Music</Value>
<Value>Pictures</Value>
</List>
</ListEntry>
(...)
</List>
(...)
</Module>
Die Liste registryPaths¶
In der Liste registryPaths definierst du die Registry-Schlüssel, die zu einem Profilabschnitt gehören. Trage hier die gewünschten Schlüssel exakt so ein, wie du sie auch aus dem Windows-Registrierungseditor kopieren würdest. Mit jedem angegebenen Pfad werden automatisch auch alle enthaltenen Werte und Unterschlüssel ausgewählt.
Beispiele:¶
HKEY_CURRENT_USER\Software\Microsoft\Multimedia
HKEY_CURRENT_USER\Software\EducateIT
HKEY_CURRENT_USER\Control Panel\Appearance
Aufbau eines Registry-Schlüssels:¶
Ein Registry-Schlüssel setzt sich in der Regel aus einem sogenannten „Hive“ (wie z.B. HKEY_CURRENT_USER oder HKEY_LOCAL_MACHINE) sowie dem vollständigen Pfad innerhalb dieses Bereichs zusammen. Beispiel:
HKEY_CURRENT_USER\Software\EducateIT
Hive:
HKEY_CURRENT_USERPfad:
Software\EducateIT
Alle darunterliegenden Werte und Unterschlüssel werden beim Export oder bei Aktionen auf diesen Abschnitt mit eingeschlossen.
<Module name="UserProfile">
(...)
<List name="profileSections">
<ListEntry>
<Value name="title">EducateIT Settings</Value>
<List name="registryPaths">
HKEY_CURRENT_USER\Software\EducateIT
</List>
<List name="directoryPaths"></List>
</ListEntry>
(...)
</List>
(...)
</Module>
Behalten des Basisschlüssels¶
Möchtest du beim Entfernen von Schlüsseln nur die Unterschlüssel löschen, aber den eigentlichen Schlüssel und dessen Werte beibehalten, hängst du einfach das Suffix \* an den Wert an.
HKEY_CURRENT_USER\Control Panel\Desktop\*
In diesem Fall werden ausschließlich die Unterschlüssel entfernt, der Basisschlüssel selbst und seine Werte bleiben erhalten.
Schlüssel mit der SID selektieren¶
In manchen Fällen enthalten Registry-Pfade die SID des Benutzers. Für diese Fälle kannst du den Platzhalter {user_sid} verwenden, der zur Laufzeit automatisch mit der SID des aktuell bearbeiteten Benutzerprofils ersetzt wird.
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Group Policy\State\{user_sid}
Die Liste directoryPaths¶
In der Liste directoryPaths definierst du die Verzeichnisse, die zu einem Profilabschnitt gehören. Dabei gibst du jeweils einen relativen Pfad zum Profilpfad an, der dem Assistenten übergeben wurde.
<Module name="UserProfile">
(...)
<List name="profileSections">
<ListEntry>
<Value name="title">Personal Data</Value>
<List name="registryPaths"></List>
<List name="directoryPaths">
<Value>Desktop</Value>
<Value>Documents</Value>
<Value>Music</Value>
<Value>Pictures</Value>
</List>
</ListEntry>
(...)
</List>
(...)
</Module>
Beispiel:¶
Wird dem Assistenten zum Beispiel der Profilpfad //example01/Users/user_123 übergeben und du verwendest in dieser Liste den relativen Pfad Desktop, dann ergibt sich das Verzeichnis //example01/Users/user_123/Desktop.
Pfade relativ zur Registry-Datei¶
Falls dein Pfad nicht relativ zum übergebenen Profilpfad ist, sondern relativ zu dem Verzeichnis, in dem sich die Registry-Datei befindet, kannst du dafür den Präfix {registry} verwenden:
{registry}/Desktop
Das ist besonders praktisch, wenn du den Assistenten sowohl für lokale Computerprofile als auch für Netzwerkprofile verwendest. So kannst du meist die gleichen Profilabschnitte für beide Arbeitsmodi nutzen.
Behalten des Basisverzeichnisses¶
Möchtest du bei einer Löschaktion das Verzeichnis selbst und alle darin enthaltenen Dateien behalten, aber nur die Unterverzeichnisse löschen, dann füge einfach das Suffix /* an den Pfad an.
AppData/*
Die Liste filePaths¶
Analog zur Liste directoryPaths kannst du in der optionalen Liste filePaths einzelne Dateien angeben, die Teil des Profilabschnitts sind.
<Module name="UserProfile">
(...)
<List name="profileSections">
<ListEntry>
<Value name="title">Software License</Value>
<List name="registryPaths"></List>
<List name="directoryPaths"></List>
<List name="filePaths">
<Value>Example/license/license.dat</Value>
</List>
</ListEntry>
(...)
</List>
(...)
</Module>
Der Wert exportPath¶
Mit dem Wert exportPath legst du einen Netzwerkpfad für die ProfileExport-Aktion fest. Auf diesen Pfad benötigt der Assistant Server Schreibrechte, die Mitarbeitenden hingegen Leserechte.
Für jeden Exportvorgang wird in diesem Verzeichnis automatisch ein eigenes Unterverzeichnis erstellt, in dem die exportierten Registry-Schlüssel und Dateien abgelegt werden. Der Mitarbeitende erhält im Assistant Client einen Link zu diesem Verzeichnis, das er bequem im Explorer öffnen kann, um die Inhalte je nach Berechtigung zu kopieren oder zu verschieben.
<Module name="UserProfile">
(...)
<Value name="exportPath">\\filer01\AssistantExports</Value>
(...)
</Module>
Der Wert importPath¶
Mit dem Wert importPath definierst du einen Netzwerkpfad für die ProfileImport-Aktion. Auf diesen Pfad müssen die Mitarbeitenden Schreibrechte besitzen.
Bei dieser Aktion legt der Assistent automatisch ein temporäres Unterverzeichnis an und stellt den Link dazu dem Mitarbeitenden bereit. Die zu importierende Registry-Datei kann in dieses Verzeichnis kopiert werden. Sobald die Datei dort abgelegt wurde, erscheint sie im Assistenten und kann direkt ausgewählt und importiert werden.
<Module name="UserProfile">
(...)
<Value name="importPath">\\filer01\AssistantImports</Value>
(...)
</Module>
Die Liste registryKeysToRemove¶
Mit der Liste registryKeysToRemove legst du fest, welche lokalen Registry-Schlüssel im VDI-Modus vom Computer des Benutzers entfernt werden sollen. Trage hier die vollständigen Pfade der zu löschenden Schlüssel ein. Platzhalter wie {user_sid} werden dabei automatisch durch die SID des aktuellen Benutzers ersetzt.
<Module name="UserProfile">
(...)
<List name="registryKeysToRemove">
<Value>HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Group Policy\State\{user_sid}</Value>
<Value>HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\{user_sid}</Value>
</List>
(...)
</Module>
Der Wert createBackup¶
Mit dem Wert createBackup bestimmst du, ob bei der ProfileCleanUp-Aktion automatisch ein Backup des Benutzerprofils angelegt werden soll. Lässt du diesen Wert weg, wird standardmäßig No verwendet.
<Module name="UserProfile">
(...)
<Value name="createBackup">Yes</Value>
(...)
</Module>
Der Wert waitForLock¶
Mit dem optionalen Wert waitForLock bestimmst du, ob das System beim Arbeiten mit Benutzerprofilen aktiv auf einen sogenannten „Lock“ wartet. Dadurch wird überprüft, ob ein Benutzer aktuell am System angemeldet ist. Standardmäßig ist diese Option aktiviert (Yes), sodass immer ein Lock-Test durchgeführt wird.
In bestimmten Netzwerkumgebungen – etwa wenn kein Lock auf der Registrierungsdatei gesetzt wird – kann es sinnvoll sein, diese Prüfung zu deaktivieren. Setze dafür den Wert auf No. So verhinderst du, dass unnötig auf einen Lock gewartet wird und sorgst für einen reibungsloseren Ablauf.
<Module name="UserProfile">
(...)
<Value name="waitForLock">No</Value>
(...)
</Module>
Der Wert removeUserNameSuffix¶
Mit dem optionalen Wert removeUserNameSuffix legst du fest, ob ein eventuell vorhandener Suffix im Benutzernamen, der dem Assistenten übergeben wird, automatisch entfernt werden soll. Ein solcher Suffix ist in der Regel durch einen Punkt getrennt und wird häufig verwendet, um verschiedene Umgebungen oder Instanzen zu kennzeichnen.
Beispiel: Der Assistent erhält den Benutzernamen user01.prod, wobei der eigentliche Benutzer im System als user01 registriert ist.
Setzt du den Wert auf Yes, entfernt das System diesen Suffix, sodass nur der reine Benutzername verwendet wird. Lässt du den Wert weg oder setzt ihn auf No, bleibt der Benutzername unverändert.
<Module name="UserProfile">
(...)
<Value name="removeUserNameSuffix">Yes</Value>
(...)
</Module>
Der Wert userNameBlockPattern¶
Mit dem optionalen Wert userNameBlockPattern gibst du einen regulären Ausdruck vor, mit dem bestimmte lokale Benutzernamen automatisch herausgefiltert werden. Diese Benutzernamen werden vom Assistenten im sogenannten computer-Modus erkannt und gar nicht erst zur Auswahl für Supportmitarbeitende angezeigt.
Standardmäßig verwendet das System den Ausdruck (?i)^(?:Administrator.*|Default.*|All Users|Public)$. Damit werden sämtliche Systemkonten und alle Benutzer ausgeschlossen, deren Name mit Administrator beginnt.
Wenn du zusätzliche lokale Benutzerkonten von der Anzeige ausschließen möchtest, kannst du den regulären Ausdruck individuell erweitern.
Beispiel:¶
Um zusätzlich zum Standard noch einen Account wie SuperUser auszuschließen, könntest du folgenden Wert setzen:
<Module name="UserProfile">
(...)
<Value name="userNameBlockPattern">
(?i)^(?:Admin.*|Default.*|All Users|Public|SuperUser)$
</Value>
(...)
</Module>
Die Liste mountCommands¶
Wenn in deiner Umgebung Benutzerprofile vor der Bearbeitung gemountet werden müssen, kannst du in der Liste mountCommands die passenden Skripte dafür definieren. Hierzu legst du jeweils einen Eintrag für das mount- und einen für das unmount-Ereignis an.
Alle Details zur Erstellung von Mount-Skripten findest du im Kapitel Mount-Skripte.
<Module name="UserProfile">
(...)
<List name="mountCommands">
<ListEntry>
<Value name="event">mount</Value>
<Value name="program">powershell.exe</Value>
<Value name="arguments">C:\AssistantScripts\mount_script.ps1 "{profilePath}"</Value>
</ListEntry>
<ListEntry>
<Value name="event">unmount</Value>
<Value name="program">powershell.exe</Value>
<Value name="arguments">C:\AssistantScripts\unmount_script.ps1</Value>
</ListEntry>
</List>
(...)
</Module>
Der Wert event¶
Mit dem Wert event legst du fest, ob dein Skript beim Mounten (mount) oder beim Unmounten (unmount) des Benutzerprofils ausgeführt werden soll. Je nach Ereignis stehen dir unterschiedliche Platzhalter für die Argumente zur Verfügung.
Der Wert program¶
Mit dem Wert program gibst du entweder einen absoluten Pfad zur auszuführenden Datei an oder den Namen des Programms, sofern es im PATH verfügbar ist.
Wenn du PowerShell- oder Python-Skripte verwendest, trägst du hier den Pfad zum jeweiligen Interpreter ein, zum Beispiel python3.exe oder powershell.exe.
Der Wert arguments¶
Mit dem Wert arguments bestimmst du die Optionen, die dem Programm beim Aufruf übergeben werden. Hierfür kannst du die folgenden Platzhalter nutzen:
Platzhalter |
Beschreibung |
|
Verfügbar bei |
|
Nur bei |
|
Nur bei |
Der Wert timeout¶
Mit dem optionalen Wert timeout bestimmst du, wie lange auf die Ausführung des Skripts gewartet wird. Die Zeit gibst du in Sekunden an (zwischen 10 und 3600).
Lässt du den Wert weg, beträgt der Standardwert 120 Sekunden.
Die Liste deleteProfileCommands¶
In der Liste deleteProfileCommands kannst du eigene Skripte definieren, die für das Löschen eines Benutzerprofils verwendet werden sollen. Mithilfe des Modifikators use_script kannst du beim Aufruf von ProfileDelete gezielt eines dieser Skripte auswählen.
<Module name="UserProfile">
(...)
<List name="deleteProfileCommands">
<ListEntry>
<Value name="name">example1</Value>
<Value name="program">python.exe</Value>
<Value name="arguments">c:\AssistantScripts\delete_profile_a.py --computer={computer} --user={user}</Value>
</ListEntry>
<ListEntry>
<Value name="name">example2</Value>
<Value name="program">python.exe</Value>
<Value name="arguments">c:\AssistantScripts\delete_profile_b.py --computer={computer} --user={user}</Value>
</ListEntry>
</List>
(...)
</Module>
Der Wert name¶
Mit dem Wert name vergibst du einen eindeutigen Namen für dein Skript, den du später mit dem Modifikator use_script auswählst. Der Name darf bis zu 32 Zeichen lang sein und sollte nur Buchstaben und Zahlen enthalten.
Beispiel:
Mit dem Namen example1 kannst du das Skript wie folgt aufrufen:
PS AssistantClient> .\AssistantClient.exe -a=ProfileDelete -m=use_script:example1 -p=...
Der Wert program¶
Hier gibst du entweder einen absoluten Pfad zum auszuführenden Programm an oder den Programmnamen, sofern es sich im PATH befindet.
Für PowerShell- oder Python-Skripte trägst du hier den entsprechenden Interpreter ein, zum Beispiel python3.exe oder powershell.exe.
Der Wert arguments¶
Mit dem Wert arguments legst du die Argumente fest, die dem Programm beim Aufruf übergeben werden. Dabei kannst du folgende Platzhalter verwenden:
Platzhalter |
Beschreibung |
|
Wird durch den Namen des Computers oder Servers ersetzt, auf dem das Profil gespeichert ist. |
|
Wird durch den Benutzernamen ersetzt, dessen Profil gelöscht werden soll. |
Der Wert timeout¶
Mit dem optionalen Wert timeout bestimmst du, wie lange auf die Ausführung des Skripts gewartet werden soll. Gib die Zeit in Sekunden an (zwischen 10 und 3600).
Wenn du den Wert nicht angibst, wird standardmäßig ein Timeout von 120 Sekunden verwendet.
Vollständiges Beispiel¶
1<?xml version="1.0" encoding="UTF-8" ?>
2<Configuration version="1" xmlns="http://educateit.ch/software/BlueStone/Configuration/1">
3 <Module name="UserProfile">
4 <Value name="roamingProfilePath">w2k8_r2.V2/PRD</Value>
5 <Value name="registryPath">upm/UPM_Profile/ntuser.dat</Value>
6 <List name="localProfilePaths">
7 <Value>//{computer}/c$/Documents and Settings</Value>
8 <Value>//{computer}/c$/Users</Value>
9 </List>
10 <List name="profileSections">
11 <ListEntry>
12 <Value name="title">Minor Settings</Value>
13 <List name="registryPaths">
14 <Value>Environment</Value>
15 <Value>AppEvents\Schemes</Value>
16 </List>
17 <List name="directoryPaths">
18 <Value>{registry}/AppData/Microsoft/Signatures</Value>
19 </List>
20 </ListEntry>
21 <ListEntry>
22 <Value name="title">Personal</Value>
23 <List name="registryPaths">
24 <Value>Network</Value>
25 </List>
26 <List name="directoryPaths">
27 <Value>{registry}/Desktop</Value>
28 <Value>{registry}/Documents</Value>
29 <Value>{registry}/Music</Value>
30 <Value>{registry}/Pictures</Value>
31 </List>
32 </ListEntry>
33 </List>
34 <List name="registryKeysToRemove">
35 <Value>HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Group Policy\State\{user_sid}</Value>
36 <Value>HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\{user_sid}</Value>
37 </List>
38 <Value name="exportPath">//host01/Assistant/Export</Value>
39 <Value name="importPath">//host01/Assistant/Import</Value>
40 <Value name="createBackup">Yes</Value>
41 </Module>
42</Configuration>