Konfiguration¶
In diesem Kapitel geht es um die Konfiguration des Actions Servers. Wie alle unsere Produkte nutzt auch der Actions Server unser Konfigurationssystem. Im Kapitel Konfigurationssystem findest du alle Grundlagen dazu, wie die Konfigurationsdateien strukturiert sein müssen, wo die Anwendung sie sucht und viele weitere wichtige Begriffe und Themen.
Neben der Hauptkonfiguration im Application
Modul benötigt der Server in der Regel auch die Konfiguration des SSL
Modules für sichere Netzwerkverbindungen und die Konfiguration einer Log-Datei mit einem Log
Modul. Details zu diesen beiden Modulen findest du in den Kapiteln Eigene SSL Zertifikate verwenden und Log-System.
Wenn du die Gruppen eines Benutzers auslesen möchtest, musst du die Erweiterung AdGroups
aktivieren. Dazu erstellst du ein Konfigurationsmodul AdGroups
. Alle Details dazu findest du im Kapitel Active Directory Gruppen.
Um unser Statistic System zur Auswertung der Benutzeraktionen zu nutzen, konfigurierst du das Modul StatisticSystem
. Eine separate Dokumentation zu diesem System enthält alle Details zur Konfiguration.
Grundlegende Struktur¶
Das folgende Beispiel zeigt dir die grundlegende Struktur der Serverkonfiguration.
1<?xml version="1.0" encoding="UTF-8" ?>
2<Configuration
3 version="1"
4 xmlns="http://educateit.ch/software/BlueStone/Configuration/1">
5
6 <Module name="Application">
7 <!-- Die Hauptkonfiguration des Actions Servers -->
8 </Module>
9
10 <Module name="AdGroups">
11 <!-- Die Konfiguration der AD Groups Erweiterung -->
12 </Module>
13
14 <Module name="StatisticSystem">
15 <!-- Statistic System Konfiguration -->
16 </Module>
17
18 <Module name="SSL">
19 <!-- SSL Profile -->
20 </Module>
21
22 <Module name="Log">
23 <!-- Log Konfiguration -->
24 </Module>
25
26</Configuration>
Das Konfigurationsschema¶
Module
Application
Must not be empty.
Default Value:
No
Value list definition
String
Must not be empty.
Must be an existing directory.
List
Complex list definition
Must not be empty.
Must not be empty.
Must not be empty.
Default Value:
Yes
List
Complex list definition
Must not be empty.
Must not be empty.
List
Complex list definition
Must not be empty.
Must match this regular expression:
[-a-z0-9_.]+
Must not be empty.
Must not be empty.
Must match this regular expression:
[1-9][0-9]{0,3}[smh]?
Default Value:
5m
Must not be empty.
Must match this regular expression:
[a-zA-Z0-9_]{1,64}
Minimum length:
1
Maximum length:
64
Default Value:
Unknown
Complex list definition
Must match this regular expression:
[a-zA-Z0-9_]{1,64}
Minimum length:
1
Maximum length:
64
Minimum Number of Elements:
1
Must match this regular expression:
(?:!?[a-zA-Z0-9_]{1,64}|\*)
Must be one of this:
Output
,Finished
Must not be empty.
Default Value:
No
Complex list definition
Must be one of this:
taskName
,targetType
,targetUserName
,targetHost
,targetDomain
,targetValue
,targetDetail
List
Complex list definition
Must not be empty.
Must not be empty.
Must match this regular expression:
[^\p{Zl}\p{Zp}\pC]{1,120}
Must be one of this:
default
,white
,yellow
,orange
,red
,violet
,blue
,green
Default Value:
default
Must be one of this:
default
,long
,hour
,never
Default Value:
default
Der Wert serverPort
¶
Mit dem Wert serverPort
konfigurierst du den Port, an dem der Server auf neue Verbindungen von Clients wartet. Du musst denselben Port in der Konfiguration des Clients angeben. Die Portnummer ist ein positiver 16-Bit-Integer-Wert und darf nicht null sein. Dies begrenzt den Wert auf den Bereich von 1 bis 65565. Auf einigen Betriebssystemen benötigst du spezielle Berechtigungen, um Ports unter 1024 zu öffnen.
Standardmäßig verwendet das System die Portnummer 12837, die keine besondere Bedeutung hat und nicht in der IANA-Datenbank registriert ist. Du solltest deine Netzwerkkonfiguration auf mögliche Konflikte mit anderen Anwendungen überprüfen, bevor du diesen Port in einer produktiven Umgebung nutzt.
1<Module name="Application">
2 <Value name="serverPort">12837</Value>
3 ...
4</Module>
Der Wert sslProfile
¶
Neu in Version 3.20.
Mit dem Wert sslProfile
legst du das SSL-Profil fest, das zur Verbindung mit dem Actions Server verwendet wird. Dieses Profil muss im SSL
Modul konfiguriert sein. Du kannst den speziellen Wert legacy
verwenden, um die eingebauten älteren Zertifikate zu nutzen. Alle Details über die SSL Profile findest du im Kapitel Eigene SSL Zertifikate verwenden.
1<Module name="Application">
2 <Value name="serverPort">12837</Value>
3 <Value name="sslProfile">server</Value>
4 ...
5</Module>
Der Wert ignoreMissingSecret
¶
Neu in Version 3.21.
Mit dem Wert ignoreMissingSecret
kannst du während einer Systemmigration ein fehlendes Authentifizierungsschlüsselpaar ignorieren. Setzt du diesen Wert auf Yes
, gilt ein Client auch dann als authentifiziert, falls er kein Schlüsselpaar an den Server sendet.
Wird ein fehlendes Schlüsselpaar ignoriert, sind die Verbindungen nur durch die Zertifikate abgesichert. Du solltest das Actions System nicht lange in dieser Konfiguration betreiben. Lösche diesen Konfigurationswert schnellstmöglich nach der Migration, damit wieder der Standardwert No
verwendet wird.
Selbst wenn du diesen Wert auf Yes
gesetzt hast, werden Verbindungen mit falschen Schlüsselpaaren abgelehnt.
1<Module name="Application">
2 ...
3 <Value name="ignoreMissingSecret">Yes</Value>
4 ...
5</Module>
Die Liste uiScriptDirectories
¶
Neu in Version 3.21.
Mit der Liste uiScriptDirectories
legst du die Verzeichnisse fest, in denen nach den Definitionen und Skripten für das Benutzerinterface gesucht wird. Jeder Eintrag in dieser Liste muss der absolute Pfad zu einem existierenden Verzeichnis sein.
Ein Skript oder die Definition eines Benutzerinterfaces, das du im Wert interface
angibst (siehe Der Wert interface), wird in all diesen Verzeichnissen gesucht.
Wenn du deine Dateien wie in älteren Versionen in einem Unterverzeichnis des Programmverzeichnisses gespeichert hast, kannst du den Platzhalter ●applicationDirectory●
des Konfigurationssystems verwenden, wie im folgenden Beispiel gezeigt.
1<Module name="Application">
2 ...
3 <List name="uiScriptDirectories">
4 <Value>●applicationDirectory●\ui_scripts</Value>
5 <Value>\\example\actions\ui_scripts</Value>
6 </List>
7 ...
8</Module>
Die Liste secrets
¶
Neu in Version 3.21.
Mit der Liste secrets
legst du fest, wer auf den Actions Server zugreifen kann. Dafür generierst du mit dem EducateIT Secret Generator Schlüsselpaare, die für den Zugriff auf eine Schnittstelle oder Funktion benötigt werden.
Das Schlüsselpaar wird mit dem Secret Generator erstellt. Weitere Informationen dazu findest du im Kapitel Das Secret System. Der Client ist dabei immer die Software, die auf die Daten zugreifen möchte, beispielsweise der Actions Client. Der Server ist die Software, die die Daten bereitstellt, also der Actions Server.
Erstelle für jede Benutzergruppe, die Aktionen auf dem Actions Server ausführt, ein eigenes Schlüsselpaar. Es ist sinnvoll, den Wert apiSecret
auf der Client-Seite zusätzlich zu kodieren, da dieser Wert wie ein Passwort ist und daher entsprechend geschützt werden sollte. Siehe dazu Kapitel Kodieren von Passwörtern.
Zusätzlich zum Schlüsselpaar kannst du den Zugriff mit einer Netzwerkliste einschränken. Wenn du also weißt, dass ein Client sich immer aus dem Netzwerk 10.0.0.0/24
mit dem Server verbindet, kannst du diese Einschränkung mit dem Wert authorizedNetworks
konfigurieren. Wir empfehlen, solche Einschränkungen zu definieren, wenn dies möglich ist.
Den Wert key
kannst du zusätzlich mit includeConnectionKeys
und excludeConnectionKeys
verwenden, um Gruppen je nach Verbindung zu definieren.
Das folgende Beispiel zeigt, wie eine solche secrets
Liste aussehen kann. Die dabei verwendeten Werte bei key
und secret
sind bewusst fiktive Werte und funktionieren nicht.
1<Module name="Application">
2 ...
3 <List name="secrets">
4 <ListEntry>
5 <Value name="label">support-connection</Value>
6 <Value name="key">[key]</Value>
7 <Value name="secret">[secret]</Value>
8 <Value name="authorizedNetworks">10.90.18.0/24</Value>
9 </ListEntry>
10 <ListEntry>
11 <Value name="label">admin-connection</Value>
12 <Value name="key">[key]</Value>
13 <Value name="secret">[secret]</Value>
14 <Value name="authorizedNetworks">10.70.24.0/24</Value>
15 </ListEntry>
16 </List>
17 ...
18</Module>
Der Actions Server hat keine zusätzlichen Werte ausser label
, key
, secret
und authorizedNetworks
. Die genaue Bedeutung dieser Werte wird im Kapitel Konfiguration erklärt.
Die Liste groupList
¶
Die Liste groupList
definiert eine Reihe von lokalen Gruppen, die dazu dienen, den Zugriff auf die verschiedenen Aktionen zu steuern. Lies den Abschnitt Zugriffsverwaltung, um das Zugriffskonzept zu verstehen, bevor du die folgenden Abschnitte liest.
Jeder Listeneintrag definiert eine lokale Gruppe und die Ein- und Ausschlussregeln dieser Gruppe.
1<Module name="Application">
2 ...
3 <List name="groupList">
4 <ListEntry>
5 <Value name="groupName">educateit-employees</Value>
6 <Value name="startAsMember">No</Value>
7 <Value name="includeUserGroups">EducateIT</Value>
8 </ListEntry>
9 <ListEntry>
10 <Value name="groupName">support</Value>
11 <Value name="startAsMember">Yes</Value>
12 <Value name="excludeUserNames">exampleUser1 exampleUser2</Value>
13 <Value name="excludeUserGroups">adminGroup</Value>
14 </ListEntry>
15 <ListEntry>
16 <Value name="groupName">admin</Value>
17 <Value name="startAsMember">No</Value>
18 <Value name="includeConnectionKeys">[key]</Value>
19 </ListEntry>
20 </List>
21 ...
22</Module>
Der Wert groupName
¶
Mit dem Wert groupName
legst du einen eindeutigen Bezeichner für die lokale Gruppe fest. Dieser Bezeichner wird im Aktions-Eintrag verwendet, um die entsprechende Aktion für den gegebenen Benutzer im Profil freizuschalten. Der Bezeichner darf nicht „any“ sein, zudem wird die Groß- und Kleinschreibung unterschieden.
1<List name="groupList">
2 <ListEntry>
3 <Value name="groupName">educateit-employees</Value>
4 <Value name="startAsMember">No</Value>
5 <Value name="includeUserGroups">EducateIT</Value>
6 </ListEntry>
7 ...
8</List>
Der Wert startAsMember
¶
Der boolesche Wert startAsMember
legt fest, ob ein Benutzer standardmäßig Mitglied dieser lokalen Gruppe ist oder nicht.
Ist der Wert
No
, gehört ein Benutzer standardmäßig nicht zur Gruppe. Ausnahmen sind Benutzer, die inincludeUserNames
aufgeführt sind, Benutzer, deren Gruppen inincludeUserGroups
aufgeführt sind, oder Benutzer, deren Verbindungsschlüssel inincludeConnectionKeys
aufgeführt ist.Ist der Wert
Yes
, gehört ein Benutzer standardmäßig zur Gruppe. Ausnahmen sind Benutzer, die inexcludeUserNames
aufgeführt sind, Benutzer, deren Gruppen inexcludeUserGroups
aufgeführt sind, oder Benutzer, deren Verbindungsschlüssel inexcludeConnectionKeys
aufgeführt ist.
Die genaue Reihenfolge wie die include...
und exclude...
Werte angewendet werden findest du im Kapiel Zugriffsverwaltung.
1<List name="groupList">
2 <ListEntry>
3 <Value name="groupName">educateit-employees</Value>
4 <Value name="startAsMember">No</Value>
5 <Value name="includeUserGroups">EducateIT</Value>
6 </ListEntry>
7 ...
8</List>
Der Wert includeUserNames
¶
Der Wert includeUserNames
ist eine durch Leerzeichen getrennte Liste von Benutzernamen, die mit dem vom Client kommenden Benutzernamen abgeglichen werden. Wenn einer dieser Benutzernamen mit dem Benutzernamen vom Client übereinstimmt, wird der Benutzer Mitglied dieser lokalen Gruppe. Der Vergleich erfolgt unabhängig von Groß- und Kleinschreibung.
1<List name="groupList">
2 <ListEntry>
3 <Value name="groupName">admins</Value>
4 <Value name="startAsMember">No</Value>
5 <Value name="includeUserGroups">Administrator</Value>
6 </ListEntry>
7 ...
8</List>
Der Wert includeUserGroups
¶
Der Wert includeUserGroups
ist eine durch Leerzeichen getrennte Liste von Gruppennamen, die mit den Gruppennamen abgeglichen werden, die von einem Zugriffs-Plugin kommen. Wenn eine der vom Zugriffs-Plugin zurückgegebenen Gruppen mit einer der Gruppen in dieser Liste übereinstimmt, wird der Benutzer Mitglied dieser Gruppe. Der Vergleich erfolgt unabhängig von Groß- und Kleinschreibung.
1<List name="groupList">
2 <ListEntry>
3 <Value name="groupName">educateit-employees</Value>
4 <Value name="startAsMember">No</Value>
5 <Value name="includeUserGroups">EducateIT</Value>
6 </ListEntry>
7 ...
8</List>
Der Wert includeConnectionKeys
¶
Neu in Version 3.21.
Der Wert includeConnectionKeys
ist eine Liste von Verbindungsschlüsseln, die in diese Gruppe aufgenommen werden sollen. Wenn der für die Verbindung verwendete Schlüssel in dieser Liste enthalten ist, wird der Benutzer Mitglied dieser Gruppe.
1<List name="groupList">
2 <ListEntry>
3 <Value name="groupName">support</Value>
4 <Value name="startAsMember">No</Value>
5 <Value name="includeConnectionKeys">
6 jgvuv!4,OZH83@ZdTsDviQ_aNzYXm;8MzqY0v//J4i9^RI^Z11@-ZQ7E7-NY{7RA
7 </Value>
8 </ListEntry>
9 ...
10</List>
Der Wert excludeUserNames
¶
Der Wert excludeUserNames
funktioniert ähnlich wie includeUserNames
, aber wenn ein Benutzername übereinstimmt, wird der Benutzer aus dieser Gruppe ausgeschlossen. Die Ausschlussparameter haben immer Vorrang vor den Einbeziehungsparametern.
1<List name="groupList">
2 <ListEntry>
3 <Value name="groupName">not-admins</Value>
4 <Value name="startAsMember">Yes</Value>
5 <Value name="excludeUserNames">Administrator</Value>
6 </ListEntry>
7 ...
8</List>
Der Wert excludeUserGroups
¶
Der Wert excludeUserGroups
funktioniert ähnlich wie includeUserGroups
, aber wenn eine Gruppe übereinstimmt, wird der Benutzer aus dieser Gruppe ausgeschlossen. Die Ausschlussparameter haben immer Vorrang vor den Einbeziehungsparametern.
1<List name="groupList">
2 <ListEntry>
3 <Value name="groupName">extern-workers</Value>
4 <Value name="startAsMember">Yes</Value>
5 <Value name="excludeUserGroups">EducateIT</Value>
6 </ListEntry>
7 ...
8</List>
Der Wert excludeConnectionKeys
¶
Neu in Version 3.21.
Der Wert excludeConnectionKeys
ist eine Liste von Verbindungsschlüsseln, die aus dieser Gruppe ausgeschlossen werden sollen. Wenn der für die Verbindung verwendete Schlüssel in dieser Liste enthalten ist, wird der Benutzer aus dieser Gruppe ausgeschlossen.
1<List name="groupList">
2 <ListEntry>
3 <Value name="groupName">api-access</Value>
4 <Value name="startAsMember">Yes</Value>
5 <Value name="excludeConnectionKeys">
6 jgvuv!4,OZH83@ZdTsDviQ_aNzYXm;8MzqY0v//J4i9^RI^Z11@-ZQ7E7-NY{7RA
7 </Value>
8 </ListEntry>
9 ...
10</List>
Die Liste actionList
¶
Mit der Liste actionList
legst du die Aktionen fest, die im Client angezeigt werden. Jeder Eintrag in dieser Liste definiert eine Aktion, die als Schaltfläche im Aktionsfenster dargestellt werden kann. Wichtig ist der Bezeichner, den du mit dem Wert actionName
für jeden Eintrag festlegst. Mit diesem Bezeichner verweist du auf die Aktion aus einem Profil heraus.
Das folgende Beispiel zeigt eine Übersicht der gesamten Struktur. Die meisten Werte sind optional und können weggelassen werden:
1<List name="actions">
2 <ListEntry>
3 <Value name="actionName">...</Value>
4 <Value name="buttonLabel">...</Value>
5 <Value name="executeOnClient">...</Value>
6 <Value name="program">...</Value>
7 <Value name="programTimeout">...</Value>
8 <Value name="arguments">...</Value>
9 <Value name="interface">...</Value>
10 <Value name="requiredGroups">...</Value>
11 <Value name="initialStateName">...</Value>
12 <List name="stateRules">
13 <ListEntry>
14 <Value name="newState">...</Value>
15 <Value name="previousStates">...</Value>
16 <Value name="event">...</Value>
17 <Value name="condition">...</Value>
18 </ListEntry>
19 ...
20 </List>
21 <Value name="profileScript"><![CDATA[
22 // script
23 ]]></Value>
24 <Value name="startScript"><![CDATA[
25 // script
26 ]]></Value>
27 <Value name="sendStatisticEntry">...</Value>
28 <List name="statisticEntryValues">
29 <ListEntry>
30 <Value name="name">...</Value>
31 <Value name="contentType">...</Value>
32 <Value name="value">...</Value>
33 </ListEntry>
34 ...
35 </List>
36 </ListEntry>
37 ...
38</List>
Ein minimaler Eintrag könnte folgendermaßen aussehen:
1<List name="actions">
2 ...
3 <ListEntry>
4 <Value name="actionName">vnc</Value>
5 <Value name="buttonLabel">VNC Thin Client</Value>
6 <Value name="executeOnClient">Yes</Value>
7 <Value name="program">vncviewer.exe</Value>
8 <Value name="arguments">{arg:clientname}</Value>
9 <Value name="interface">none</Value>
10 <Value name="requiredGroups">any</Value>
11 <Value name="initialStateName">Success</Value>
12 </ListEntry>
13 ...
14</List>
Der Wert actionName
¶
Mit dem Wert actionName
definierst du einen eindeutigen Bezeichner für die Aktion. Dieser Bezeichner muss für die gesamte Konfiguration einzigartig sein. Es sollten nur Buchstaben und Zahlen verwendet werden, insbesondere sollten Leerzeichen im Namen vermieden werden. Andernfalls kannst du nicht von dem Profil auf diese Aktion verweisen.
1<List name="actions">
2 <ListEntry>
3 <Value name="actionName">vnc</Value>
4 <Value name="buttonLabel">VNC Thin Client</Value>
5 <Value name="executeOnClient">Yes</Value>
6 <Value name="program">vncviewer.exe</Value>
7 <Value name="arguments">{arg:clientname}</Value>
8 <Value name="interface">none</Value>
9 <Value name="requiredGroups">any</Value>
10 <Value name="initialStateName">Success</Value>
11 </ListEntry>
12 ...
13</List>
Der Wert executeOnClient
¶
Mit dem Wert executeOnClient
legst du fest, ob das Programm auf der Client- oder Serverseite ausgeführt wird. Der Wert Yes
konfiguriert die Ausführung auf der Clientseite, der Wert No
die Ausführung auf der Serverseite.
Ein Programm, das auf der Clientseite ausgeführt wird, wird mit denselben Berechtigungen ausgeführt wie der Client. Normalerweise sind dies die Berechtigungen des Benutzers, der den Client gestartet hat. Das auszuführende Programm muss auf jedem Client zugänglich sein, auf dem der Actions Client läuft. Es kann sich um eine Konsolenanwendung oder ein Programm mit einer Benutzeroberfläche handeln. Beachte, dass das Actions Client Fenster offen bleibt, bis das Programm beendet wurde.
Wenn du dich dafür entscheidest, das Programm auf der Serverseite auszuführen, wird es mit den Berechtigungen des Servers ausgeführt. Das Programm muss vom Actions Server aus zugänglich sein. Es ist nicht möglich, Programme auszuführen, die eine Benutzeroberfläche auf der Serverseite anzeigen.
1<List name="actions">
2 <ListEntry>
3 <Value name="actionName">vnc</Value>
4 <Value name="buttonLabel">VNC Thin Client</Value>
5 <Value name="executeOnClient">Yes</Value>
6 <Value name="program">vncviewer.exe</Value>
7 <Value name="arguments">{arg:clientname}</Value>
8 <Value name="interface">none</Value>
9 <Value name="requiredGroups">any</Value>
10 <Value name="initialStateName">Success</Value>
11 </ListEntry>
12 ...
13</List>
Der Wert program
¶
Mit dem Wert program
gibst du den Namen und optional den Pfad zur ausführbaren Datei an. Wenn die ausführbare Datei in einem der Pfade in der PATH
-Umgebungsvariable platziert ist, dann reicht der Name der ausführbaren Datei aus. Andernfalls musst du den absoluten Pfad angeben.
Du kannst in diesem Wert Platzhalter verwenden. Siehe Kapitel Platzhalter für Details über Platzhalter und wie man sie verwendet.
1<List name="actions">
2 <ListEntry>
3 <Value name="actionName">vnc</Value>
4 <Value name="buttonLabel">VNC Thin Client</Value>
5 <Value name="executeOnClient">Yes</Value>
6 <Value name="program">vncviewer.exe</Value>
7 <Value name="arguments">{arg:clientname}</Value>
8 <Value name="interface">none</Value>
9 <Value name="requiredGroups">any</Value>
10 <Value name="initialStateName">Success</Value>
11 </ListEntry>
12 ...
13</List>
Der Wert arguments
¶
Mit dem Wert arguments
legst du die Argumente fest, die an das ausgeführte Programm übergeben werden sollen. Du kannst in diesem Wert Platzhalter verwenden. Siehe Kapitel Platzhalter für Details über Platzhalter und wie man sie verwendet.
Die Argumente werden an Leerzeichen getrennt. Du kannst doppelte Anführungszeichen verwenden, um Teile einzuschließen, die Leerzeichen enthalten können, die nicht getrennt werden sollen. Die doppelten Anführungszeichen werden für die endgültige Argumentliste entfernt. Siehe Nutzung von Anführungszeichen in Argumenten für Details.
1<List name="actions">
2 <ListEntry>
3 <Value name="actionName">vnc</Value>
4 <Value name="buttonLabel">VNC Thin Client</Value>
5 <Value name="executeOnClient">Yes</Value>
6 <Value name="program">vncviewer.exe</Value>
7 <Value name="arguments">{arg:clientname}</Value>
8 <Value name="interface">none</Value>
9 <Value name="requiredGroups">any</Value>
10 <Value name="initialStateName">Success</Value>
11 </ListEntry>
12 ...
13</List>
Der Wert programTimeout
¶
Der optionale Wert programTimeout
ermöglicht es dir, ein Zeitlimit für das laufende Programm festzulegen. Sollte das Programm länger als die festgelegte Zeit in Betrieb sein, wird es automatisch gestoppt.
Es können Zahlen im Bereich von 1 bis 9999 verwendet werden. Lässt du ein Suffix aus, wird der Wert in Sekunden interpretiert. Benutze das Suffix „s“ für Sekunden, „m“ für Minuten und „h“ für Stunden.
1<List name="actions">
2 <ListEntry>
3 <Value name="actionName">vnc</Value>
4 <Value name="buttonLabel">VNC Thin Client</Value>
5 <Value name="executeOnClient">Yes</Value>
6 <Value name="program">vncviewer.exe</Value>
7 <Value name="arguments">{arg:clientname}</Value>
8 <Value name="programTimeout">5m</Value>
9 <Value name="interface">none</Value>
10 <Value name="requiredGroups">any</Value>
11 <Value name="initialStateName">Success</Value>
12 </ListEntry>
13 ...
14</List>
Im obigen Codeausschnitt wird zum Beispiel der programTimeout
für den VNC Thin Client auf 5 Minuten gesetzt.
Der Wert interface
¶
Mit dem Wert interface
bestimmst du die Art der Rückmeldung, die dem Benutzer präsentiert wird. Die gebräuchlichsten Optionen sind none
, was bedeutet, dass dem Benutzer kein Feedback angezeigt wird, und console
, welche ein Konsolenfenster öffnet und die Ausgabe des Befehls anzeigt.
Es ist auch möglich, dem Benutzer eine interaktive Schnittstelle zu präsentieren, über die er zusätzliche Informationen eingeben oder detailliertere Statusinformationen zum Fortschritt des Befehls erhalten kann. Alle Einzelheiten zu diesem Wert findest du unter Schnittstellen.
1<List name="actions">
2 <ListEntry>
3 <Value name="actionName">vnc</Value>
4 <Value name="buttonLabel">VNC Thin Client</Value>
5 <Value name="executeOnClient">Yes</Value>
6 <Value name="program">vncviewer.exe</Value>
7 <Value name="arguments">{arg:clientname}</Value>
8 <Value name="programTimeout">5m</Value>
9 <Value name="interface">none</Value>
10 <Value name="requiredGroups">any</Value>
11 <Value name="initialStateName">Success</Value>
12 </ListEntry>
13 ...
14</List>
Im Beispiel oben wird kein Feedback angezeigt, da der VNC Thin Client ein eigenes Interface hat.
Der Wert requiredGroups
¶
Mit dem Wert requiredGroups
konfigurierst du eine durch Leerzeichen getrennte Liste von lokalen Gruppenkennungen. Ist der Benutzer Mitglied einer oder mehrerer aufgeführter lokaler Gruppen, wird die Aktion aktiviert und dem Benutzer angezeigt.
Es gibt eine spezielle Gruppe namens „any“, die auf jeden Benutzer zutrifft, auch wenn dieser keiner lokalen Gruppe angehört. Wenn du die spezielle Gruppe „any“ verwendest, muss dies die einzige Gruppe in diesem Wert sein.
1<List name="actions">
2 <ListEntry>
3 <Value name="actionName">vnc</Value>
4 <Value name="buttonLabel">VNC Thin Client</Value>
5 <Value name="executeOnClient">Yes</Value>
6 <Value name="program">vncviewer.exe</Value>
7 <Value name="arguments">{arg:clientname}</Value>
8 <Value name="programTimeout">5m</Value>
9 <Value name="interface">none</Value>
10 <Value name="requiredGroups">any</Value>
11 <Value name="initialStateName">Success</Value>
12 </ListEntry>
13 ...
14</List>
Im obigen Beispiel ist die Aktion für alle Benutzer sichtbar, da „any“ als Wert für requiredGroups
eingestellt ist.
Der Wert initialStateName
¶
Mit initialStateName
legst du den Anfangszustand für den Prozess fest. Ein Zustandsname muss mit einem Buchstaben beginnen und kann Buchstaben, Zahlen und den Unterstrich enthalten. Die Länge eines Zustandsnamens ist auf 64 Zeichen beschränkt.
Aus Gründen der Rückwärtskompatibilität ist dieser Konfigurationswert optional. Wenn du diesen Wert weglässt, wird er auf „Unknown“ gesetzt.
Weitere Informationen zu den Prozesszuständen findest du im Kapitel Prozesszustände.
1<List name="actions">
2 <ListEntry>
3 <Value name="actionName">vnc</Value>
4 <Value name="buttonLabel">VNC Thin Client</Value>
5 <Value name="executeOnClient">Yes</Value>
6 <Value name="program">vncviewer.exe</Value>
7 <Value name="arguments">{arg:clientname}</Value>
8 <Value name="programTimeout">5m</Value>
9 <Value name="interface">none</Value>
10 <Value name="requiredGroups">any</Value>
11 <Value name="initialStateName">Success</Value>
12 </ListEntry>
13 ...
14</List>
Im obigen Beispiel wird der anfängliche Zustand der Aktion auf „Success“ gesetzt.
Die Liste stateRules
¶
In dieser Liste können beliebig viele Zustandsregeln angegeben werden. Diese Regeln werden in der konfigurierten Reihenfolge verarbeitet.
1<List name="actions">
2 ...
3 <ListEntry>
4 <Value name="actionName">update_server</Value>
5 <Value name="buttonLabel">Update Server</Value>
6 <Value name="executeOnClient">false</Value>
7 <Value name="program">python3.exe</Value>
8 <Value name="arguments">\\example\scripts\manage.py update {arg:server}</Value>
9 <Value name="interface">console</Value>
10 <Value name="requiredGroups">admin-group power-user</Value>
11 <Value name="initialStateName">Success</Value>
12 <List name="stateRules">
13 <ListEntry>
14 <Value name="newState">Error</Value>
15 <Value name="previousStates">Success</Value>
16 <Value name="event">Output</Value>
17 <Value name="condition">/Error/.test(line)</Value>
18 </ListEntry>
19 <ListEntry>
20 <Value name="newState">Crashed</Value>
21 <Value name="previousStates">*</Value>
22 <Value name="event">Finished</Value>
23 <Value name="condition">finishReason == FinishReason.Crash</Value>
24 </ListEntry>
25 </List>
26 </ListEntry>
27</List>
In dem Beispiel oben wird der Python Script manage.py
ausgeführt. Initial ist der Status Success
. Tritt in einer Zeile der Ausgabe der Text Error
auf, dann wechselt der Status von Success
zu Error
. Crasht der Prozess, wechselt der Status in jedem Fall in den Crashed
Zustand.
Der Wert newState
¶
Mit dem Wert newState
legst du den neuen Zustand fest, wenn die Regel zutrifft. Der Name muss mit einem Buchstaben beginnen und kann Buchstaben, Zahlen und den Unterstrich enthalten. Die Länge eines Zustandsnamens ist auf 64 Zeichen beschränkt.
1<List name="actions">
2 ...
3 <ListEntry>
4 ...
5 <List name="stateRules">
6 <ListEntry>
7 <Value name="newState">Error</Value>
8 ...
9 </ListEntry>
10 <ListEntry>
11 <Value name="newState">Crashed</Value>
12 ...
13 </ListEntry>
14 </List>
15 </ListEntry>
16</List>
Im obigen Beispiel werden zwei Zustände, Error
und Crashed
, verwendet, in die der Prozess wechseln kann, wenn bestimmte Regeln zutreffen.
Der Wert previousStates
¶
Mit dem Wert previousStates
konfigurierst du eine durch Leerzeichen getrennte Liste von vorherigen Zustandsnamen. Die Regel wird nur geprüft, wenn der aktuelle Zustandsname mit einem Zustandsnamen in dieser Liste übereinstimmt.
Du kannst auch den *
Zeichen als Platzhalter verwenden, der jeden Zustand entspricht.
Wenn du einem Zustandsnamen das !
Zeichen voranstellst, wird die Regel nur geprüft, wenn der aktuelle Zustand nicht der angegebene ist. Dies hat Vorrang vor den gegebenen Zuständen und dem *
Platzhalter.
Zum Beispiel würden die Werte !foo *
so interpretiert: Überprüfe diese Regel, es sei denn, der aktuelle Zustand ist foo
.
1<List name="actions">
2 ...
3 <ListEntry>
4 ...
5 <List name="stateRules">
6 <ListEntry>
7 ...
8 <Value name="previousStates">Success</Value>
9 ...
10 </ListEntry>
11 <ListEntry>
12 ...
13 <Value name="previousStates">*</Value>
14 ...
15 </ListEntry>
16 </List>
17 </ListEntry>
18</List>
Im obigen Beispiel wird die erste Regel nur geprüft, wenn der aktuelle Zustand „Success“ ist. Die zweite Regel wird immer geprüft, da der Platzhalter *
verwendet wird.
Der Wert event
¶
Mit dem Wert event
legst du das Ereignis fest, bei dem die Bedingung geprüft wird. Es gibt nur zwei Ereignisse: Output
und Finished
. Wenn du Output
angibst, wird die Regel für jede Ausgabezeile des laufenden Prozesses geprüft. Im Falle von Finished
wird die Regel geprüft, wenn der Prozess endet (erfolgreich oder nicht).
1<List name="actions">
2 ...
3 <ListEntry>
4 ...
5 <List name="stateRules">
6 <ListEntry>
7 ...
8 <Value name="event">Output</Value>
9 ...
10 </ListEntry>
11 <ListEntry>
12 ...
13 <Value name="event">Finished</Value>
14 ...
15 </ListEntry>
16 </List>
17 </ListEntry>
18</List>
Im obigen Beispiel wird die erste Regel bei jeder Ausgabezeile geprüft, während die zweite Regel nur geprüft wird, wenn der Prozess endet.
Der Wert condition
¶
Mit dem Wert condition
legst du eine ECMA-Script-Ausdruck fest, der in true
oder false
ausgewertet wird. Es gibt drei globale Variablen: line
, die im Falle des Ereignisses „Output“ eine Zeile der Prozessausgabe enthält, exitCode
, die den Exit-Code des Prozesses enthält, und finishReason
im Falle des Ereignisses „Finished“.
Die Bedingung ist ein ECMA-Script-Ausdruck, der einen nativen boolean-Wert zurückgeben muss. Wenn der Ausdruck true zurückgibt, wird der neue Zustand als aktueller Zustand verwendet. Wenn der Ausdruck false zurückgibt, wird die Regel übersprungen.
Es gibt drei globale Variablen, auf die du in deinem Ausdruck zugreifen kannst. Die folgende Tabelle erklärt die Bedeutung jeder Variablen:
Variable |
Beschreibung |
---|---|
|
Diese Variable enthält eine Ausgabenzeile des Prozesses im Ereignis „Output“. |
|
Im Ereignis „Finished“ enthält diese Variable den Exit-Code des Prozesses. |
|
Im Ereignis „Finished“ enthält diese Variable einen String mit dem Grund, warum der Prozess beendet wurde. Es gibt vordefinierte Strings im globalen Objekt „FinishReason“, die du zum Testen gegen diesen Wert verwenden kannst. |
Um die Variable finishReason
zu testen, gibt es ein globales Objekt „FinishReason“, das einen String für jeden Grund zum Testen enthält.
Konstante |
Beschreibung |
---|---|
|
Nach erfolgreichem Ende des Prozesses. |
|
Der Prozess ist abgestürzt. |
|
Der Prozess konnte nicht gestartet werden. |
1<List name="actions">
2 ...
3 <ListEntry>
4 ...
5 <List name="stateRules">
6 <ListEntry>
7 ...
8 <Value name="condition">/Error/.test(line)</Value>
9 </ListEntry>
10 <ListEntry>
11 ...
12 <Value name="condition">finishReason == FinishReason.Crash</Value>
13 </ListEntry>
14 </List>
15 </ListEntry>
16</List>
Im Beispiel oben wird in der ersten Regel ein Regulärer Ausdruck auf die Variable line
angewendet, um zu testen ob der Text Error
in der Ausgabezeile vorhanden ist. In der zweiten Regel wird die Variable finishReason
getestet, ob das gestartete Programm mit einem Crash beendet wurde.
Der Wert profileScript
¶
Mit dem optionalen Wert profileScript
definierst du ein ECMA-Script, das ausgeführt wird, bevor die Aktion zum aktuellen Profil hinzugefügt wird. In diesem Skript kannst du Parameter der Aktion selbst ändern, hast aber nur Lesezugriff auf die Argumente, die dem Client übergeben wurden.
Dieses Skript muss sehr klein sein und schnell ausgeführt werden, da es sonst den Server blockiert und zu Verzögerungen führt.
Es gibt eine Reihe von globalen Objekten, auf die du aus dem Skript zugreifen kannst. Die folgende Tabelle gibt Details dazu. Alle Parameter des Aktionsobjekts sind schreibbar und ändern das Verhalten der Aktion.
Variable |
Beschreibung |
---|---|
|
Dieses Objekt enthält alle Parameter, die dem Client übergeben wurden. Änderungen an dem Parameter haben keinen Einfluss (nur lesbar). |
|
Das Label auf dem Button, das in der Client-Schnittstelle angezeigt wird. |
|
Ein boolescher Wert, ob das Programm auf der Clientseite ausgeführt werden soll. |
|
Der Pfad zum Programm, das ausgeführt wird, wenn der Button angeklickt wird. |
|
Die Programmargumente mit Platzhaltern. |
Im folgenden Beispiel ändert sich der Text auf der Schaltfläche abhängig vom Argument server
, das dem Client übergeben wird.
1<List name="actions">
2 ...
3 <ListEntry>
4 <Value name="actionName">merge-server</Value>
5 <Value name="buttonLabel">Merge Server</Value>
6 <Value name="executeOnClient">No</Value>
7 <Value name="program">python3.exe</Value>
8 <Value name="arguments">\\example\scripts\manage.py merge {arg:server}</Value>
9 <Value name="interface">console</Value>
10 <Value name="requiredGroups">any</Value>
11 <Value name="profileScript"><![CDATA[
12 action.buttonLabel = 'Merge Server ' + args.server;
13 ]]></Value>
14 </ListEntry>
15 ...
16</List>
Der Wert startScript
¶
Mit dem optionalen Wert startScript
kannst du ein ECMA-Script definieren, das unmittelbar vor der Ausführung der Aktion und dem Start des Programms ausgeführt wird. In diesem Skript hast du Schreibzugriff auf die Programmargumente, die über das globale Objekt args
zugänglich sind. Es gibt eine Reihe von globalen Objekten, auf die du aus dem Skript zugreifen kannst. Siehe die folgende Tabelle für Details:
Variable |
Beschreibung |
---|---|
|
Dieses Objekt enthält alle Parameter die dem Client übergeben wurden. Du kannst die Werte ändern oder neue hinzufügen. Die Platzhalter in den Werten von Programm und Argumenten werden nach erfolgreicher Ausführung des Skripts ersetzt. |
|
Dieses Objekt enthält alle Werte aus einer interaktiven Benutzeroberfläche. Änderungen an diesen Werten haben keinen Einfluss (nur lesbar). |
|
Das Label auf dem Button, das in der Client-Schnittstelle angezeigt wird (nur lesbar). |
|
Ein boolescher Wert, ob das Programm auf der Clientseite ausgeführt werden soll. |
|
Der Pfad zum Programm, das ausgeführt wird, wenn der Button angeklickt wird (nur lesbar). |
|
Die Programmargumente mit Platzhaltern (nur lesbar). |
Das Skript muss sehr klein sein und schnell ausgeführt werden, sonst blockiert es den Server und verursacht Verzögerungen.
Im folgenden Beispiel wird ein Präfix zum Argument server
hinzugefügt. Dieses Argument wird als Platzhalter im Befehl der Aktion verwendet.
1<List name="actions">
2 ...
3 <ListEntry>
4 <Value name="actionName">merge-server</Value>
5 <Value name="buttonLabel">Merge Server</Value>
6 <Value name="executeOnClient">No</Value>
7 <Value name="program">python3.exe</Value>
8 <Value name="arguments">\\example\scripts\manage.py merge {arg:server}</Value>
9 <Value name="interface">console</Value>
10 <Value name="requiredGroups">any</Value>
11 <Value name="startScript"><![CDATA[
12 args.server = 'abc' + args.server;
13 ]]></Value>
14 </ListEntry>
15 ...
16</List>
Werte für das Statistiksystem¶
Es gibt eine Reihe von Konfigurationswerten, die sich auf das Statistiksystem beziehen. Diese sind nur relevant, wenn du das Statistiksystem aktivierst, wie das in der dazugehörigen Dokumentation erklärt wird.
Das Actions-System verfügt neben der neuen Schnittstelle noch über ein altes Verfahren um Statistiken zu erfassen. Dabei werden spezielle Einträge in die Log-Datei geschrieben. Ein spezielles Werkzeug extrahiert diese dann aus dem Log und bietet einige Analysen zu diesen Daten an. Dieses alte Verfahren solltest du aber nicht mehr verwenden.
Der Wert writeStatisticIntoLog
¶
Mit dem optionalen Wert writeStatisticIntoLog`
kannst du steuern, ob Statistikeinträge in die Log-Datei geschrieben werden sollen, wie dies in älteren Versionen unserer Software üblich war. Wenn du diesen Wert weglässt, wird der Standardwert auf Yes
gesetzt, was das Schreiben dieser Einträge in die Log-Datei ermöglicht.
Setze diesen Wert auf No
, wenn du das neue Statistiksystem verwendest, um zu verhindern, dass die veralteten Statistikeinträge in die Log-Datei geschrieben werden.
1<Module name="Application">
2 ...
3 <Value name="writeStatisticIntoLog">No</Value>
4 ...
5</Module>
Der Wert sendStatisticEntry
¶
Mit dem Wert sendStatisticEntry
steuerst du ob für die gegebene Aktion ein Statistikeintrag gesendet werden soll. Wenn du diesen Wert auf Yes
setzt, wird für die Aktion ein Statistikeintrag gesendet. In diesem Fall musst du die Werte, die an den Server gesendet werden, mithilfe einer Liste statisticEntryValues
definieren.
1<List name="actions">
2 ...
3 <ListEntry>
4 <Value name="actionName">run-task</Value>
5 ...
6 <Value name="sendStatisticEntry">Yes</Value>
7 <List name="statisticEntryValues">
8 <ListEntry>
9 <Value name="name">taskName</Value>
10 <Value name="contentType">Text</Value>
11 <Value name="value">Test</Value>
12 </ListEntry>
13 <ListEntry>
14 <Value name="name">targetType</Value>
15 <Value name="contentType">Text</Value>
16 <Value name="value">profile</Value>
17 </ListEntry>
18 <ListEntry>
19 <Value name="name">targetUserName</Value>
20 <Value name="contentType">Text</Value>
21 <Value name="value">User{arg:userName}</Value>
22 </ListEntry>
23 </List>
24 </ListEntry>
25 ...
26</List>
Die Liste statisticEntryValues
¶
In der Liste statisticEntryValues
legst du die Werte fest, die an den Statistikserver gesendet werden. Für jeden zu erfassenden Statistikwert musst du einen Eintrag in dieser Liste erstellen.
Jeder Eintrag besteht aus drei Elementen: name
, contentType
und value
. Mit name
bestimmst du den Namen des Statistikwerts. contentType
bestimmt, ob der Wert ein Text oder ein Skript ist. Zuletzt definierst du mit value
den tatsächlichen Inhalt des Statistikwerts. Je nachdem, was du für contentType
festgelegt hast, gibst du hier entweder den statischen Text ein - optional mit Platzhaltern - oder ein kleines ECMA-Skript, das den Wert berechnet.
Die genauen Details zu diesen Werten findest du in den folgenden Abschnitten.
1<List name="actions">
2 ...
3 <ListEntry>
4 <Value name="actionName">run-task</Value>
5 ...
6 <Value name="sendStatisticEntry">Yes</Value>
7 <List name="statisticEntryValues">
8 <ListEntry>
9 <Value name="name">taskName</Value>
10 <Value name="contentType">Text</Value>
11 <Value name="value">Test</Value>
12 </ListEntry>
13 <ListEntry>
14 <Value name="name">targetType</Value>
15 <Value name="contentType">Text</Value>
16 <Value name="value">profile</Value>
17 </ListEntry>
18 <ListEntry>
19 <Value name="name">targetUserName</Value>
20 <Value name="contentType">Text</Value>
21 <Value name="value">User{arg:userName}</Value>
22 </ListEntry>
23 </List>
24 </ListEntry>
25 ...
26</List>
Der Wert name
¶
Mit dem Wert name
bestimmst du den Namen des Statistikwerts. Beachte dabei, dass der Name Groß- und Kleinschreibung beachtet und jeder Name nur einmal verwendet werden darf. Die folgenden Wertnamen sind möglich:
Variable |
Beschreibung |
---|---|
taskName (erforderlich)
|
Ein Bezeichner der durchgeführten Aktion. Für eine korrekte Auswertung der Aktionen, muss dieser Bezeichner korrekt definiert werden. Die Dokumentation des Statistik Servers enthält Tabellen mit üblichen Aktionen und deren Bezeichner. |
targetType (erforderlich)
|
Der Typ des Ziels des durchgeführten Aktion. Übliche Werte sind beispielsweise: |
|
In diesem Feld übergibst du den Benutzernamen, falls der gewählte Typ diesen erwartet. |
|
In diesem Feld übergibst du den Hostnamen oder die IP-Adresse, falls der gewählte Typ diese erwartet. |
|
In diesem Feld übergibst du die Domäne des Benutzers oder des Hosts, falls der gewählte Typ diese erwartet. |
|
In diesem Feld übergibst du einen bestimmten Wert, abhängig vom konfigurierten Typ. |
|
In diesem Feld übergibst du weitere Details zu den Informationen in den anderen Feldern, abhängig vom konfigurierten Typ. |
Die Bedeutung dieser Werte findest du in der Dokumentation zum Statistiksystems.
1<List name="actions">
2 ...
3 <ListEntry>
4 <Value name="actionName">run-task</Value>
5 ...
6 <Value name="sendStatisticEntry">Yes</Value>
7 <List name="statisticEntryValues">
8 <ListEntry>
9 <Value name="name">taskName</Value>
10 <Value name="contentType">Text</Value>
11 <Value name="value">Test</Value>
12 </ListEntry>
13 <ListEntry>
14 <Value name="name">targetType</Value>
15 <Value name="contentType">Text</Value>
16 <Value name="value">profile</Value>
17 </ListEntry>
18 <ListEntry>
19 <Value name="name">targetUserName</Value>
20 <Value name="contentType">Text</Value>
21 <Value name="value">User{arg:userName}</Value>
22 </ListEntry>
23 </List>
24 </ListEntry>
25 ...
26</List>
Der Wert contentType
¶
Mit dem Wert contentType
legst du das Format des Inhalts des Wertes fest. Dabei gibt es zwei Möglichkeiten:
Text
: Hierbei handelt es sich um statischen Text. Du kannst auch Platzhalter verwenden, die dann durch entsprechende Werte ersetzt werden.Script
: Bei dieser Option definierst du ein kleines ECMA-Skript, das den tatsächlichen Wert berechnet.
Das gewählte Format wirkt sich darauf aus, wie der Inhalt in der Konfiguration value
angegeben wird.
1<List name="actions">
2 ...
3 <ListEntry>
4 <Value name="actionName">run-task</Value>
5 ...
6 <Value name="sendStatisticEntry">Yes</Value>
7 <List name="statisticEntryValues">
8 <ListEntry>
9 <Value name="name">taskName</Value>
10 <Value name="contentType">Text</Value>
11 <Value name="value">Test</Value>
12 </ListEntry>
13 <ListEntry>
14 <Value name="name">targetType</Value>
15 <Value name="contentType">Text</Value>
16 <Value name="value">profile</Value>
17 </ListEntry>
18 <ListEntry>
19 <Value name="name">targetUserName</Value>
20 <Value name="contentType">Text</Value>
21 <Value name="value">User{arg:userName}</Value>
22 </ListEntry>
23 <ListEntry>
24 <Value name="name">targetDetail</Value>
25 <Value name="contentType">Script</Value>
26 <Value name="value">'Used server argument: "' + args.server + '"'</Value>
27 </ListEntry>
28 </List>
29 </ListEntry>
30 ...
31</List>
Der Wert value
¶
Mit value
definierst du den eigentlichen Inhalt des Statistikwerts, der an den Server gesendet wird. Der Inhalt, den du hier angibst, hängt von dem in contentType
festgelegten Format ab.
Wenn contentType
als Text
konfiguriert ist wird dieses Feld als statischen Text interpretiert. Du kannst auch Platzhalter verwenden, um Text aus Argumenten, Benutzeroberflächeneingaben und Umgebungsvariablen in die Felder einzufügen. Siehe dazu den Eintrag targetUserName
im Beispiel für die Verwendung von Platzhaltern. Weitere Details zu Platzhaltern findest du im Kapitel Platzhalter.
Falls contentType
auf Script
gesetzt ist, konfigurierst du hier ein kleines ECMA-Skript, das einen String für den Wert zurückgibt. Dabei hast du ähnlich wie beim Wert profileScript
Lesezugriff auf das Objekt args
.
1<List name="actions">
2 ...
3 <ListEntry>
4 <Value name="actionName">run-task</Value>
5 ...
6 <Value name="sendStatisticEntry">Yes</Value>
7 <List name="statisticEntryValues">
8 <ListEntry>
9 <Value name="name">taskName</Value>
10 <Value name="contentType">Text</Value>
11 <Value name="value">Test</Value>
12 </ListEntry>
13 <ListEntry>
14 <Value name="name">targetType</Value>
15 <Value name="contentType">Text</Value>
16 <Value name="value">profile</Value>
17 </ListEntry>
18 <ListEntry>
19 <Value name="name">targetUserName</Value>
20 <Value name="contentType">Text</Value>
21 <Value name="value">User{arg:userName}</Value>
22 </ListEntry>
23 <ListEntry>
24 <Value name="name">targetDetail</Value>
25 <Value name="contentType">Script</Value>
26 <Value name="value">'Used server argument: "' + args.server + '"'</Value>
27 </ListEntry>
28 </List>
29 </ListEntry>
30 ...
31</List>
Die Liste profileList
¶
Mit der Liste profileList
definierst du verschiedene Profile welche im Client angezeigt werden. Jedes Profil zeigt dem Benutzer ein Fenster mit einem Titel, einer Beschreibung und einer Auswahl an Aktionen. Die Aktionen können wiederum in einzelne Abschnitte gegliedert werden.
Das folgende Beispiel zeigt die vollständige Struktur eines Profils. Viele der Werte sind optional, siehe die folgenden Abschnitte für Details.
1<Module name="Application">
2 ...
3 <List name="profileList">
4 <ListEntry>
5 <Value name="profileName">...</Value>
6 <Value name="windowTitle">...</Value>
7 <Value name="description">...</Value>
8 <Value name="actions">...</Value>
9 <Value name="color">...</Value>
10 <Value name="autoClose">...</Value>
11 <List name="sectionList">
12 <ListEntry>
13 <Value name="title">...</Value>
14 <Value name="actions">...</Value>
15 <Value name="color">...</Value>
16 </ListEntry>
17 ...
18 </List>
19 </ListEntry>
20 ...
21 </List>
22 ...
23</Module>
Der Wert profileName
¶
Mit profileName
legst du den eindeutigen Bezeichner des Profils fest. Du solltest nur Buchstaben und Zahlen, aber keine Leerzeichen verwenden. Es ist zudem ratsam, diesen Bezeichner kurz zu halten.
Dieser Name wird mit dem Parameter --profile=(name)
im Client verwendet, um das Profil auszuwählen.
1<List name="profileList">
2 <ListEntry>
3 <Value name="profileName">session</Value>
4 <Value name="windowTitle">Session Aktionen</Value>
5 <Value name="description">Wähle einen der Befehle aus, um diese Sitzung zu bearbeiten oder zu nutzen.</Value>
6 <Value name="actions">vnc logoff shadow</Value>
7 </ListEntry>
8 ...
9</List>
Der Wert windowTitle
¶
Mit windowTitle
definierst du den Text, der im Fenstertitel des Client Fensters angezeigt wird. Siehe A in der folgenden Abbildung, wo der Titel im Client-Fenster dargestellt wird.
1<List name="profileList">
2 <ListEntry>
3 <Value name="profileName">session</Value>
4 <Value name="windowTitle">Session Aktionen</Value>
5 <Value name="description">Wähle einen der Befehle aus, um diese Sitzung zu bearbeiten oder zu nutzen.</Value>
6 <Value name="actions">vnc logoff shadow</Value>
7 </ListEntry>
8 ...
9</List>
Der Wert description
¶
Mit description
legst du die Beschreibung fest, die im oberen Bereich des angezeigten Fensters dargestellt wird. Siehe B in der Abbildung oben, wo die Beschreibung im Client-Fenster platziert ist. Du kannst einfache HTML-Tags in der Beschreibung verwenden, um Titel, Listen und fett oder kursiv geschriebene Texte zu erstellen. Die folgende Tabelle enthält eine Auswahl von HTML Tags welche für die Formatierung unterstützt werden.
Tag |
Beschreibung |
Details |
---|---|---|
|
Link |
Unterstützt das |
|
Adresse |
|
|
Fetter Text |
|
|
Grösserer Text |
|
|
Eingerückter Abschnitt |
|
|
Zeilenumbruch |
|
|
Zentrierter Abschnitt |
|
|
Dokument Block |
Definiert einen Block im Dokument. Akzeptiert die typischen Blockattribute. |
|
Definitionsliste |
|
|
Definiert den Font |
Unterstützt die Attribute: |
|
Überschrift |
|
|
Horizontale Linie |
Unterstützt das |
i /em cite var /dfn |
Kursive Schrift |
|
|
Benutzereingabe |
|
|
Text ohne Zeilenumbruch |
|
|
Nummerierte Liste |
|
|
Abschnitt |
|
|
Formatierter Text |
|
|
Durchgestrichener Text |
|
|
Kleinere Schrift |
|
|
Formatierter Bereich |
|
|
Subscript |
|
|
Superscript |
|
table tr /td /th tbody /thead tfoot |
Tabelle |
Unterstützt die folgenden Attribute: |
tt /code samp |
Blockschrift |
|
|
Unterstrichener Text |
|
|
Unsortierte Liste |
Du kannst die Beschreibung auch in mehrere Zeilen mit Überschriften und Absatz-Tags strukturieren. Bilder sind auch möglich, allerdings musst du einen absoluten Pfad (nutze eine file:///
URL) zu dem Bild angeben, der auf jedem Computer, der den Client startet, zugänglich ist.
Bitte beachte, dass du alle HTML-Tags in der XML-Konfigurationsdatei codieren musst. Eine einfache Lösung ist die Verwendung eines <![CDATA[
Blocks. Siehe das folgende Beispiel, um zu verstehen, wie du eine Beschreibung definierst, die HTML-Formatierung verwendet.
1<List name="profileList">
2 <ListEntry>
3 <Value name="profileName">destruct</Value>
4 <Value name="windowTitle">Destruktive Aktionen</Value>
5 <Value name="description"><![CDATA[
6 <h2>Destruktive Aktionen</h2>
7 <p><font color="red">Achtung!</font> Die folgenden Aktionen löschen dauerhaft Ressourcen.
8 Diese Aktionen können nicht rückgängig gemacht werden. Nutze sie mit Vorsicht.</p>
9 ]]></Value>
10 <Value name="actions">delete-server remove-server shutdown-server</Value>
11 </ListEntry>
12 ...
13</List>
Der Wert actions
¶
Mit actions
legst du eine durch Leerzeichen getrennte Liste der Aktions-Identifikatoren fest, die im Fenster angezeigt werden sollen. Diese Liste bestimmt, welche Aktionen angezeigt werden und in welcher Reihenfolge. Die Schaltflächen der Aktionen werden immer in der Reihenfolge der Identifikatoren angezeigt, von links nach rechts, von oben nach unten in zwei oder mehr Spalten.
Dieser Wert definiert die Aktionen, die direkt unter der Beschreibung im Fenster angezeigt werden, außerhalb jeder Sektion.
Beachte bitte, dass eine Aktion im Fenster verborgen bleibt, wenn ein Benutzer keinen Zugriff darauf hat.
1<List name="profileList">
2 <ListEntry>
3 <Value name="profileName">session</Value>
4 <Value name="windowTitle">Session Aktionen</Value>
5 <Value name="description">Wähle einen der Befehle aus, um diese Sitzung zu bearbeiten oder zu nutzen.</Value>
6 <Value name="actions">vnc logoff shadow</Value>
7 </ListEntry>
8 ...
9</List>
Der Wert color
¶
Neu in Version 3.20.
Mit dem optionalen Wert color
kannst du eine Hintergrundfarbe für das Client-Fenster festlegen. Dabei kannst du einen der folgenden Werte verwenden:
default
red
orange
yellow
green
blue
violet
Wenn du diesen Wert weglässt, wird default
verwendet.
Die folgende Abbildung zeigt, wie die verschiedenen Hintergrundfarben im Client-Fenster aussehen. Je nach Betriebssystem können die Farben leicht variieren.
1<List name="profileList">
2 <ListEntry>
3 <Value name="profileName">session</Value>
4 <Value name="windowTitle">Session Aktionen</Value>
5 <Value name="description">Wähle einen der Befehle aus, um diese Sitzung zu bearbeiten oder zu nutzen.</Value>
6 <Value name="actions">vnc logoff shadow</Value>
7 <Value name="color">red</Value>
8 </ListEntry>
9 ...
10</List>
Der Wert autoClose
¶
Neu in Version 3.20.
Mit dem Wert autoClose
legst du fest, nach welcher Zeit der Inaktivität das Client-Fenster automatisch geschlossen wird. Du hast dabei die Wahl zwischen folgenden Werten:
Konstante |
Beschreibung |
---|---|
|
Schließt das Fenster nach einer Minute Inaktivität. |
|
Schließt das Fenster nach zehn Minuten Inaktivität. |
|
Schließt das Fenster nach einer Stunde Inaktivität. |
|
Schließt das Fenster nie automatisch. |
Wir raten von der Einstellung never
ab, da das Aktionsfenster oft vom Benutzer vergessen wird. Dabei kann es passieren, dass eine Aktion auf das falsche Objekt angewendet wird.
1<List name="profileList">
2 <ListEntry>
3 <Value name="profileName">session</Value>
4 <Value name="windowTitle">Session Aktionen</Value>
5 <Value name="description">Wähle einen der Befehle aus, um diese Sitzung zu bearbeiten oder zu nutzen.</Value>
6 <Value name="actions">vnc logoff shadow</Value>
7 <Value name="autoClose">long</Value>
8 </ListEntry>
9 ...
10</List>
Die Liste sectionList
¶
Neu in Version 3.20.
Mit der optionalen Liste sectionList
fügst du eine oder mehrere Abschnitte zu dem Client-Fenster hinzu. Jeder Abschnitt hat dabei einen Titel, und darunter einen oder mehrere Schaltflächen mit Aktionen. Zudem kannst du einem Abschnitt eine individuelle Farbe geben, um in hervorzuheben.
Hat ein Benutzer keinen Zugriff auf die Aktionen eines Abschnitts, dann wird dieser Abschnitt weggelassen.
1<List name="profileList">
2 <ListEntry>
3 <Value name="profileName">user</Value>
4 <Value name="windowTitle">Benutzer Aktionen</Value>
5 <Value name="description"></Value>
6 <Value name="actions"></Value>
7 <List name="sectionList">
8 <ListEntry>
9 <Value name="title">Hauptaktionen</Value>
10 <Value name="actions">logoff-user create-user cleanup-profile</Value>
11 </ListEntry>
12 <ListEntry>
13 <Value name="title">Destruktive Aktionen</Value>
14 <Value name="color">red</Value>
15 <Value name="actions">delete-profile</Value>
16 </ListEntry>
17 </Value>
18 </ListEntry>
19 ...
20</List>
Der Wert title
¶
Mit dem Wert title
definierst du den Titel eines Abschnitts. In der Abbildung oben siehst du den Titel mit D makiert. Für den Titel sind alle Zeichen, ausser Kontrollzeichen und Zeilenumbrüche erlaubt.
1<List name="profileList">
2 <ListEntry>
3 <Value name="profileName">user</Value>
4 <Value name="windowTitle">Benutzer Aktionen</Value>
5 <Value name="description"></Value>
6 <Value name="actions"></Value>
7 <List name="sectionList">
8 <ListEntry>
9 <Value name="title">Hauptaktionen</Value>
10 <Value name="actions">logoff-user create-user cleanup-profile</Value>
11 </ListEntry>
12 <ListEntry>
13 <Value name="title">Destruktive Aktionen</Value>
14 <Value name="color">red</Value>
15 <Value name="actions">delete-profile</Value>
16 </ListEntry>
17 </Value>
18 </ListEntry>
19 ...
20</List>
Der Wert actions
¶
Mit dem Wert actions
definierst welche Aktionen in dem Abschnitt angezeigt werden. Dabei gibst du eine durch Leerzeichen getrennte Liste der Aktions-Identifikatoren an. Die Aktionen werden in der von dir Konfigurierten Reihenfolge angezeigt.
Beachte bitte, dass eine Aktion im Fenster verborgen bleibt, wenn ein Benutzer keinen Zugriff darauf hat. Sind in einem Abschnitt für den Benutzer gar keine Aktionen zugänglich, wird der ganze Abschnitt ausgeblendet.
1<List name="profileList">
2 <ListEntry>
3 <Value name="profileName">user</Value>
4 <Value name="windowTitle">Benutzer Aktionen</Value>
5 <Value name="description"></Value>
6 <Value name="actions"></Value>
7 <List name="sectionList">
8 <ListEntry>
9 <Value name="title">Hauptaktionen</Value>
10 <Value name="actions">logoff-user create-user cleanup-profile</Value>
11 </ListEntry>
12 <ListEntry>
13 <Value name="title">Destruktive Aktionen</Value>
14 <Value name="color">red</Value>
15 <Value name="actions">delete-profile</Value>
16 </ListEntry>
17 </Value>
18 </ListEntry>
19 ...
20</List>
Der Wert color
¶
Mit dem optionalen Wert color
kannst du einen Abschnitt einfärben, damit er für die Benutzer leicht zu erkennen ist. Dabei hast du folgende Werte zur Auswahl:
default
red
orange
yellow
green
blue
violet
Wenn du diesen Wert weglässt, wird default
verwendet. In diesem Fall wird der Abschnitt nicht eingefärbt und übernimmt die Hintergrundfarbe.
In def folgenden Abbildung siehst du alle Abschnittsfarben:
Beispielkonfiguration¶
<?xml version="1.0" encoding="UTF-8" ?>
<Configuration
version="1"
xmlns="http://educateit.ch/software/BlueStone/Configuration/1">
<Module name="Application">
<Value name="serverPort">12837</Value>
<Value name="sslProfile">server</Value>
<List name="secrets">
<ListEntry>
<Value name="label">Example</Value>
<Value name="key">[key]</Value>
<Value name="secret">[secret]</Value>
</ListEntry>
</List>
<List name="uiScriptDirectories">
<Value>●applicationDirectory●\uiscripts</Value>
</List>
<List name="groupList">
<ListEntry>
<Value name="groupName">group1</Value>
<Value name="startAsMember">true</Value>
<Value name="includeUserNames">[user names]</Value>
<Value name="includeUserGroups">[user groups]</Value>
<Value name="includeConnectionKeys">[connection keys]</Value>
<Value name="excludeUserNames">[user names]</Value>
<Value name="excludeUserGroups">[user groups]</Value>
<Value name="excludeConnectionKeys">[connection keys]</Value>
</ListEntry>
<!-- ... -->
</List>
<List name="actionList">
<ListEntry>
<Value name="actionName">example</Value>
<Value name="buttonLabel">Example</Value>
<Value name="executeOnClient">true</Value>
<Value name="program">Logoff.exe</Value>
<Value name="arguments">/Server:{arg:servername}</Value>
<Value name="interface">none</Value>
<Value name="requiredGroups">any</Value>
</ListEntry>
<!-- ... -->
</List>
<List name="profileList">
<ListEntry>
<Value name="profileName">example</Value>
<Value name="windowTitle">Example Actions</Value>
<Value name="description">This is a short description in front of the action buttons.</Value>
<Value name="actions">example</Value>
<List name="sections">
<ListEntry>
<Value name="title">Section</Value>
<Value name="actions">example</Value>
</ListEntry>
</List>
</ListEntry>
<!-- ... -->
</List>
</Module>
<Module name="SSL">
<List name="profiles">
<ListEntry>
<Value name="identifier">server</Value>
<Value name="key">[key path to PEM file]</Value>
<Value name="caCertificates">[ca path to PEM file]</Value>
<Value name="localCertificateChain">[path to certificate PEM file]</Value>
<Value name="peerVerificationEnabled">Yes</Value>
</ListEntry>
</List>
</Module>
<Module name="AdGroups">
<List name="server">
<ListEntry>
<Value name="domainList">*</Value>
<Value name="host">[AD Server]</Value>
<Value name="username">[AD User]</Value>
<Value name="password">[AD PW]</Value>
</ListEntry>
</List>
</Module>
<Module name="Log">
<List name="FileWriter">
<ListEntry>
<Value name="LogFilePath">c:/Logs/Actions_Server.log</Value>
</ListEntry>
</List>
</Module>
</Configuration>