Weitere Konfigurationsoptionen

Zentrales Protokollieren von Fehlermeldungen

Wenn opsi-script im Kontext des opsi-service gestartet wird, werden die Protokoll-Informationen über den opsi-web-service an den opsi-server gesendet.

Zentrale Konfiguration über opsi Configs (Host Parameter)

Über opsi Configs (Host-Parameter) kann das Verhalten des opsi-script (z.B. beim Logging) beeinflusst werden:

  • opsi-script.global.debug_prog : boolean
    Wenn false, werden Logmeldungen, welche zum Debuggen des opsi-script selbst dienen, nicht ausgegeben, soweit es sich nicht um Warnungen oder Fehler handelt.
    Default: false
    Damit werden die Logdateien entlastet und nur noch Meldungen, die Skript-relevant sind, stehen in den Logdateien. Die Umstellung der entsprechenden Logmeldungen im Quellcode des opsi-script ist noch nicht abgeschlossen und wird bei ca. 1700 Log-Aufrufen auch noch etwas dauern.

  • opsi-script.global.debug_lib : boolean
    Wenn false, so werden Logmeldungen aus lokalen Funktionen, welche aus Libraries importiert wurden, nur ausgegeben, soweit es sich um Warnungen oder Fehler handelt.
    Der Wert kann innerhalb eines Skriptes mit der Anweisung SetDebug_Lib überschrieben werden.
    Default : false
    siehe auch SetDebugLib

  • opsi-script.global.default_loglevel : intstr
    Setzt (überschreibt) den Standard default Loglevel von opsi-script.
    Dieser Config hat keinen Einfluss auf Skripte, bei denen der Loglevel per setLogLevel explizit gesetzt worden ist.
    Default : '7'
    siehe auch SetLogLevel
    siehe auch [opsi-script-configs_force_min_loglevel]

  • opsi-script.global.force_min_loglevel : intstr
    Erzwingt einen minimalen Loglevel.
    Dies dient dazu, bei der Entwicklung und/oder Fehlersuche gezielt und temporär für einzelne Clients den Loglevel zu erhöhen ohne hierzu Anpassungen am Skript vornehmen zu müssen.
    Default: '0'
    siehe auch SetLogLevel
    siehe auch [opsi-script-configs_default_loglevel]

  • opsi-script.global.ScriptErrorMessages : boolean
    Wenn false, werden Syntax-Fehlermeldungen nicht interaktiv ausgegeben sondern nur in die Logdatei geschrieben. Im Produktivbetrieb ist es sinnvoll, dass dieser Parameter false ist. Daher ist der Default für diesen Config false. Der Default von opsi-script für diesen Parameter ist (aus historischen Gründen) true. Im Servicekontext überschreibt der Config den Default von opsi-script. Außerhalb des Servicekontext gilt der Default von opsi-script. Diese Default-Werte können innerhalb eines Skriptes mit der Anweisung ScriptErrorMessages überschrieben werden.
    Default: false
    siehe auch : ScriptErrorMessages

  • opsi-script.global.AutoActivityDisplay : boolean
    Wenn true, wird während des Laufs von externen Prozessen (winbatch,ShellScript,execwith Sektionen) ein (marquee) Fortschrittsbalken (der Endlos durch läuft) angezeigt.
    Default: true
    siehe auch : AutoActivityDisplay

  • opsi-script.global.supresssystemencodingwarning : boolean
    Wenn true, wird die Warnung: Encoding=system makes the opsiscript not portable between different OS unterdrückt.
    Default: false
    siehe auch : encoding

  • opsi-script.global.reverseproductorderbyuninstall : boolean
    Wenn true, wird die ProductListe umsortiert, so dass uninstall-Aktionen als erstes und in umgekehrter Reihenfolge der Installation durchgeführt werden.
    Default: false

  • opsi-script.global.log_rotation_count : string (number) // seit 4.12.4.29
    Gibt die Anzahl der lokal auf dem Client gesicherten Backups des opsi-script.log an. (opsi-script_0.log, opsi-script_1.log, …​)
    Default = 8 ; Maximal = 999

  • opsi-script.global.writeProductLogFile : boolean // seit 4.12.4.35
    Wenn true, wird auf dem Client im Unterverzeichnis lastprodlogs des opsi-script Logverzeichnisses ( z.B. c:\opsi.org\log\lastprodlogs) für jedes opsi-Produkt eine eigene Logdatei geschrieben. Der Name der Logdatei ist <productId>.log. Es existiert dann für jedes Produkt der Log des letzten Skriptlaufs. Im Fall, dass ein Skript Reboots innerhalb des Skriptes beinhaltet, so enthält dieses Log nur den Teil nach dem letzten Reboot.
    Default: false

  • opsi-script.global.testsyntax : boolean // seit 4.12.7.0
    Wenn true, werden die Skripte von opsi-script im testsyntax-Modus ausgeführt.
    Default: false
    siehe auch: [opsi-script-testsyntax]

Skinnable 'opsi-script' [W/L/M]

Ab Version 3.6 verfügt 'opsi-script' einen veränderbare Oberfläche. Seine Elemente liegen im Unterverzeichnis winstskin des Verzeichnisses, in dem der ausgeführte opsi-script liegt. Die editierbare Definitionsdatei ist skin.ini.

Seit Version 4.12.4.15 sucht der 'opsi-script' nach dem zu verwendenden Skin Verzeichnis in folgender Reihenfolge, wobei das erste Verzeichnis, welches eine skin.ini enthält verwendet wird:

Windows:

%OpsiScriptDir% = C:\Program Files (X86)\opsi.org\opsi-client-agent\opsi-script

  1. %OpsiScriptDir%\..\custom\customskin

  2. %OpsiScriptDir%\skin

  3. %OpsiScriptDir%\winstskin(for backward compatibility)

Linux:

%OpsiScriptDir% = /opt/opsi-script

  1. '/usr/share/opsi-script/skin'

  2. '/usr/share/opsi-script/customskin' (for backward compatibility)

  3. %OpsiScriptDir%/skin

macOS:

%OpsiScriptDir% = /Applications/opsi-script/Contents/macOS

  1. '/usr/share/opsi-script/skin'

  2. %OpsiScriptDir%/../Resources/skin

Mit dem Befehl SetSkinDirectory kann ein SkinDirectory auch im Script angegeben werden. Wird bei diesem Befehl ein leerer oder ungültiger Pfad angegeben, so wird der Defaultpfad verwendet.

Beispiel:

SetSkinDirectory "%ScriptPath%\testskin"
sleepseconds 1
SetSkinDirectory ""

Anpassung an Corporate Identity

Alle graphischen Komponenten des opsi-script basieren auf den Darstellungskomponenten zum Anzeigen von Grafiken und werden auf die selbe Weise angepasst. Farben können auf drei unterschiedliche Weise angegeben werden: Als symbolischer Name (clRed), als Hexadezimalwert ($FF00FF) oder als rgb Wertliste ((255,0,0)). Ein Hilfsprogramm zur Auswahl von Farben und deren richtigen Schreibweise ist der opsi color chooser.

Als Hintergrund Grafikformate kommt eine Vielzahl unterschiedlicher Bitmap Formate wie .bmp, .png, jpeg usw in Frage. All dies Formate sind wieder Containerformate, dh. z.B. PNG ist nicht unbeding gleich PNG. Evtl ist das eine Darstellbar und das andere nicht. Ein Hilfsprogramm mit dem Sie schnell prüfen können ob eine gegeben Bitmap Grafik korrekt angezeigt werden wird, ist der opsi bitmap viewer.

Die Dateien, die Sie beim opsi-script anpassen können finden Sie im Verzeichnis /var/lib/opsi/depot/opsi-client-agent/files/opsi-script/skin:

  • bg.png
    Die Default Hintergrundgrafik des 'opsi-script' in welche dann zur Laufzeit Textmeldungen und Produktlogos eingeblendet werden. Der Name kann in der Datei skin.ini angepasst werden.

  • skin.ini
    Die Konfigurationsdatei in der festgelegt ist, an welcher Stelle, mit welchem Font und Farbe Textmeldungen eingeblendet werden. Und ab opsi-script Version XY welches Thema geladen werden soll.

Seit opsi-script Version 4.12.4.35 besteht die Möglichkeit zwischen zwei Themen (Theme) zu wählen. Ist Theme = default oder nichts angegeben wird das Standard-Aussehen von opsi-script beibehalten wie Sie es kennen und Sie haben über die skin.ini folgende detaillierte Einstellmöglichkeiten (hier belegt mit den ausgelieferten Default-Werten):

[Form]
Theme = default #diese Zeile kann hier auch weggelassen werden
Color = $00FFB359

[LabelVersion]
Left = 20
Top = 367
Width = 85
Height = 16
FontName = Arial
FontSize = 7
FontColor = $00E2A973
FontBold = false
FontItalic = false
FontUnderline = false

[LabelProduct]
Left = 260
Top = 100
Width = 315
Height = 100
FontName = Arial
FontSize = 32
FontColor = $00E7E7E7
FontBold = false
FontItalic = false
FontUnderline = false

[LabelInfo]
Alignment=Center
Left = 60
Top = 260
Width = 520
Height = 24
FontName = Arial
FontSize = 11
FontColor = $00E7E7E7
FontBold = true
FontItalic = false
FontUnderline = false

[LabelDetail]
Left = 60
Top = 285
Width = 520
Height = 20
FontName = Arial
FontSize = 8
FontColor = $00E7E7E7
FontBold = false
FontItalic = false
FontUnderline = false

[LabelCommand]
Left = 60
Top = 310
Width = 520
Height = 20
FontName = Arial
FontSize = 8
FontColor = $00E7E7E7
FontBold = false
FontItalic = false
FontUnderline = false

[LabelProgress]
Left = 60
Top = 335
Width = 520
Height = 40
FontName = Arial
FontSize = 8
FontColor = $00E7E7E7
FontBold = false
FontItalic = false
FontUnderline = false

[ActivityBar]
Left = 60
Top = 350
Width = 420
Height = 10
BarColor = clBlue

[ImageBackground]
File = bg.png

[ImageProduct]
File = product.png
Left = 40
Top = 65
Width = 160
Height = 160

[Image1Over]
File =
Left = 0
Top = 0
Width = 0
Height = 0

[Image2Over]
File =
Left = 0
Top = 0
Width = 0
Height = 0

[ProgressBar]
Left = 275
Top = 160
Width = 280
Height = 20
BarColor = $00E7E7E7
StartColor = $00E7E7E7
FinalColor = $00E7E7E7
ShapeColor = $00E7E7E7
Shaped = true
ShowFullBlock = false
RoundCorner = true
BlockSize = 10
SpaceSize = 3
Cylinder = true
Glass = true

Setzen sie Theme = WindowsSimple um nur eine einfache Oberfläche beim Installieren von opsi-Produkten anzuzeigen. Diese ähnelt der von Windows verwendeten wenn Betriebssystemupdates installiert werden. Es gibt folgende Einstellmöglichkeiten (hier belegt mit den ausgelieferten Default-Werten):

[Form]
Theme = WindowsSimple #Diese Zeile ist hier nötig und darf nicht geändert werden
Color = clHotLight

[LabelInfo]
Caption = Software wird installiert. Bitte warten.

Schutz Ihrer Änderungen vor Updates: Das custom Verzeichnis

Möchten Sie Änderungen welche Sie an den oben genannten Dateien durchgeführt haben, davor schützen, das selbige beim Einspielen einer neuen Version des opsi-client-agenten verloren gehen, so können Sie hierfür das custom Verzeichnis /var/lib/opsi/depot/opsi-client-agent/files/custom (früher /var/lib/opsi/depot/opsi-client-agent/files/opsi/custom) verwenden. Das komplette custom Verzeichnis wird bei der Installation einer neuen Version des opsi-client-agenten gesichert und wieder hergestellt, so das hier gemachte Änderungen nicht verloren gehen.

  • custom/opsi-script/skin/.
    wird bei der Installation des opsi-client-agent auf dem Client nach C:\Program Files (x86)\opsi.org\opsi-client-agent\opsi-script\skin kopiert.

'opsi-script' encoding [W/L/M]

Einige Hinweise zu den verwendeten Begriffen:

  • ASCII, plain ASCII
    ASCII ist eine Abkürzung von: American Standard Code for Information Interchange
    'plain ascii': 7 Bit pro Zeichen; kann 128 verschiedene Zeichen darstellen. Hier enthalten sind die arabischen Ziffern, die Zeichen des lateinischen Alphabetes in Groß- und Kleinschreibung sowie eine Reihe von Sonder- und Steuerzeichen.
    Diese 128 Zeichen finden sich auch in den nachfolgend beschriebenen Erweiterungen wieder.

  • ANSI, Codepages
    Verwendet 8 Bit pro Zeichen (also ein Byte). Damit können Die ersten (unteren) 128 Zeichen entsprechen plain ASCII. Die oberen 128 Zeichen sind für unterschiedliche Alphabete in unterschiedlichen 'Codepages' definiert. Bekannte 'code pages':
    Windows-1252 = CP1252 = ISO 8851-1 = Western Europe code page.
    Die 256 Zeichen von CP1252 sind auch die Basis von Unicode UTF-16.
    'ANSI' ist eine Abkürzung von: American National Standards Institute:
    https://stackoverflow.com/questions/701882/what-is-ansi-format :
    'ANSI encoding is a slightly generic term used to refer to the standard code page on a system, ( …​ )The name "ANSI" is a misnomer, since it does not correspond to any actual ANSI standard, but the name has stuck.'
    In Deutsch:
    'ANSI encoding ist ein verbreiteter Begriff um sich auf die Standard code page eines Systems zu beziehen. (…​.) Der Name "ANSI" ist allerdings falsch und irreführend, da es keinen entsprechenden ANSI-Standard gibt. Trotzdem ist der Begriff allgemein üblich.'
    Was ist dann mit dem Begriff ANSI encoding gemeint ?
    https://wiki.freepascal.org/Character_and_string_types#AnsiChar says:
    'A variable of type AnsiChar, also referred to as char, is exactly 1 byte in size, and contains one "ANSI" (local code page) character.'
    In Deutsch:
    'Ein ANSI Zeichen hat eine Länge von einem Byte und ist gemäß der lokalen code page definiert.'
    Die Probleme mit der Verwendung von Codepages sind:

    • Für unterschiedliche Regionen in der Welt müssen unterschiedliche Codepages verwendet werden.

    • Es können nur maximal 255 Zeichen dargestellt werden aber viele Alphabete haben deutlich mehr Zeichen.

  • Unicode, UTF-8
    'Unicode' ist (wie 'ANSI') eine Encodingfamilie (nicht ein Encoding).
    Der bedeutendste Unterschied im Vergleich zu code pages ist, das um ein Zeichen zu codieren hier bis zu 4 Bytes verwendet werden. Damit können 'alle' Alphabete in einem Encoding untergebracht werden.
    Die wichtigsten Mitglieder der 'Familie' Unicode sind:

    • UTF-16-LE (auch teilweise bezeichnet als 'Windows Unicode'):
      Hier wird für jedes Zeichen mindestens 2 Byte (bis zu 4 Byte) verwendet. Das 'LE' steht für 'Little Endian' und gibt Auskunft über die Reihenfolge der Bytes. (Zeichen 'n' : LE='6E 00', BE='00 6E').

    • UTF-8:
      Verwendet für alle 'plain ASCII' Zeichen 1 Byte. Für alles was darüber hinaus geht werden 2 bis 4 Byte verwendet.
      Dies bedeutet auch, das eine Datei welche nur 'plain ASCII' Zeichen enthält es binär keinen Unterschied macht, ob diese nun als 'UTF-8' oder 'cp1252' abgespeichert worden ist.

    • BOM
      Eine Datei mit einem 'Unicode' encoding kann (muß aber nicht) in den ersten 4 Byte eine Information über das verwendete (unicode-)Encoding enthalten - den 'BOM' ('Byte Order Mark'). opsi-script erkennt und verwendet einen 'BOM' so er vorhanden ist.

Das Default Encoding für ein Script ist das Encoding das Systems auf dem der opsi-script läuft. D.h. auf einem Griechischen System wird das script mit unter Windows mit cp1253 interpretiert während das selbe Script auf einem deutschem Windows System mit cp1252 und auf einem Linux oder macOS System mit UTF-8 interpretiert wird.

Wir empfehlen dringend alle opsiscript Dateien in UTF-8 encoding zu erzeugen und die Zeile encoding=utf8 in die Datei einzufügen.
Dies macht Ihre Dateien besser portierbar.
Siehe hierzu auch den nachfolgenden Abschnitt.

  • encoding=<encoding>
    Seit Version 4.11.4.1 kann bei einem Script (egal ob Hauptscript, sub, include oder library) das encoding auch angegeben werden. Dazu gibt es den Befehl:
    encoding=<encoding>
    Dieser Befehl kann an einer beliebigen Stelle in der Scriptdatei stehen.
    Wird dieser Befehl nicht gefunden, so wird zunächst davon ausgegangen, das das Encoding der Datei dem Systemencoding des laufenden Betriebssystems entspricht. Unter Linux und macOS wäre dies UTF-8. Unter Windows ist dies ein cp* abhängig von der Lokalisierung. In Westeuropa z.B. cp1252.
    Wenn die einzulesende Datei Umlaute enthält (also nicht nur 'plain ASCII' ist), so führt das fehlen der Zeile encoding=utf8 zu der Warnung:
    'Encoding=system makes the opsiscript not portable between different OS'.
    Diese Warnung kann unterdrückt werden durch den config (Hostparameter):
    opsi-script.global.supresssystemencodingwarning = true.
    siehe auch [opsi-script-configs_supresssystemencodingwarning]
    Wenn die einzulesende Datei Umlaute enthält (also nicht nur 'plain ASCII' ist) und es einen Widerspruch zwischen dem detektierten Encoding (z.B. über ein BOM) und dem impliziten Encoding system bzw. dem per encoding= angegebenen Encoding gibt, so wird folgende Warnung in das Log geschrieben:
    'Warning: Given encodingString <> is different from the expected encoding <>'

    Bei der Verwendung von encoding=<encoding>
    kann <encoding> ist eines der folgenden Werte sein:

Tabelle 1. Encodings
encoding erlaubter alias Bemerkung

system

verwende encoding des laufenden OS

auto

versuche das encoding zu erraten.

UTF-8

utf8

UTF-8BOM

utf8bom

Ansi

ansi

8 Bit Encoding mit Codepage

CP1250

cp1250

Zentral- und osteuropäische Sprachen

CP1251

cp1251

Kyrillisches Alphabet

CP1252

cp1252

Westeuropäische Sprachen

CP1253

cp1253

Griechisches Alphabet

CP1254

cp1254

Türkisches Alphabet

CP1255

cp1255

Hebräisches Alphabet

CP1256

cp1256

Arabisches Alphabet

CP1257

cp1257

Baltische Sprachen

CP1258

cp1258

Vietnamesische Sprachen

CP437

cp437

Die ursprüngliche Zeichensatztabelle des IBM-PC

CP850

cp850

"Multilingual (DOS-Latin-1)", westeuropäische Sprachen

CP852

cp852

Slawische Sprachen (Latin-2), zentraleuropäische und osteuropäische Sprachen

CP866

cp866

Kyrillisches Alphabet

CP874

cp874

Thai Alphabet

CP932

cp932

Japanische Schreibsysteme (DBCS)

CP936

cp936

GBK für chinesische Kurzzeichen (DBCS)

CP949

cp949

Hangul/Koreanische Schriftzeichen (DBCS)

CP950

cp950

Chinesische Langzeichen (DBCS)

ISO-8859-1

iso8859-1

Latin-1

ISO-8859-2

iso8859-2

Latin-2

KOI-8

koi8

Kyrillisches Alphabet

UCS-2LE

ucs2le, utf16le

(UTF-16-LE, Windows Unicode Standard)

UCS-2BE

ucs2be, utf18be

(UTF-16-BE)

siehe auch : [reencodestr]
siehe auch : [reencodestrlist]
siehe auch : [strLoadTextFileWithEncoding]
siehe auch : [loadUnicodeTextFile]
siehe auch : [loadTextFileWithEncoding]

Quellen siehe auch: