Variable setzen aus INI-File / Registry

Feedback und Verbesserungsvorschläge zu ACMP
Antworten
Eisi
Beiträge: 49
Registriert: Mo Jan 16, 2017 9:59 pm

Hallo Leute,

ich vermisse bei Variable setzen aus INI-File und Registy die Möglichkeit Standard-Werte zu setzen, falls der Key nicht existiert. Wie in Delphi mit DefaultValue:

ini.ReadString('Section_Name', 'Key_Name', 'default value');

Schöne Grüße aus Hamburg... Sven
Benutzeravatar
ngottschalk
Beiträge: 293
Registriert: Mi Sep 08, 2010 12:57 pm

Hi Sven,

sofern du nicht direkt mit dem "DelphiScript" arbeiten möchtest (und auch da bin ich mir nicht sicher, ob diese Umgebung Delphi genau genug abbildet, um diese Funktion zu bieten), würde mir hierzu nur ein Standardwert einfallen, mit dem du die Variable initialisieren kannst (falls es nicht reicht, einfach auf leeren Inhalt zu prüfen), diesen kannst du in der Variablenverwaltung hinterlegen.
Kannst du deinen Usecase kurz umreißen? Momentan fallen mir nur wenige Grenzfälle ein, in denen das Setzen eines Wertes im Fehlerfall wirklich notwendig wäre.
Mit freundlichen Grüßen

Niklas Gottschalk (gottschalk@zoller-usa.com)
IT Systems Administrator
Zoller Inc.
Eisi
Beiträge: 49
Registriert: Mo Jan 16, 2017 9:59 pm

Hallo Niklas,

ich versuche mal, ein Usecase zu umreißen:

Um zu bestimmen, ob in einem bestimmten Rollout bestimmte Software-Pakte zu installieren sind, oder nicht, habe ich eine INI-Datei erstellt. Hier wird z.B. in der Sektion [E-PV18] (steht für einen bestimmten Fachbereich) der Key SoftInst mit 010010001001 gesetzt. Jede Stelle steht für ein Software-Paket und, wie bestimmt schon erraten, steht 1 für installieren und 0 für nicht.
Nun kann es mal vorkommen, dass ein Rollout verwendet wird, welches noch keine Section in der INI-Datei hat. Hier hätte ich dann gerne einen Standard-Wert zurückgeben lassen. Geht nur halt nicht und den Umweg über Delphi-Script wollte ich nicht gehen, da zu aufwendig. Die Rückgabe eines Default-Wert ist übrigens auch kein Delphi-Ding, sondern ist so auch in zahlreichen anderen Sprachen integriert.

Btw: Eine Variable mit "If ...Then" auf den Wert "" (Leer) zu prüfen, scheint auch nicht zu gehen. Da habe ich mir heute auch schon die Zähne ausgebissen. Habe das jetzt auf <> "" geprüft und arbeite dann den Else-Zweig ab. Nicht schön, aber funktioniert :-)

Schöne Grüße aus dem Norden... Sven Biehl
Benutzeravatar
ngottschalk
Beiträge: 293
Registriert: Mi Sep 08, 2010 12:57 pm

Hi Sven,

wundert mich, dass die Abfrage auf einen leeren String nicht funktioniert, aber ich meine, ich würde auch der Einfachheit halber immer auf != leer prüfen; Aber mal eine andere Frage: Wenn du schon Ini-Dateien benutzt, warum dann komplizierte Binärwerte parsen, anstatt einfach in jeder Ini-Sektion entsprechende Schlüssel zu benutzen? Ist deutlich einfacher zu lesen, ändern und in Skripten zu benutzen;) Beispiel:

[E-PV18]
Software1 = Install
Software2 = Ignore ; Als Ini darf ich sogar Kommentare beinhalten, warum etwas entfernt/nicht installiert wird
Software3 = Remove
Software4 = Install

[E-PV19]
Software1 = ...


Dies hätte sogar den Vorteil, dass die Dateien auf den Clients thoretisch verbleiben und später als Kriterium zum Entfernen von Software dienen könnten, da du mehr als nur zwei Status hättest.
Mit freundlichen Grüßen

Niklas Gottschalk (gottschalk@zoller-usa.com)
IT Systems Administrator
Zoller Inc.
Eisi
Beiträge: 49
Registriert: Mo Jan 16, 2017 9:59 pm

Hi Niklas,

den Gedanken hatte ich auch. Aber ich wollte die INI-Datei aus Performance-Gründen nur einmal anfassen (es kann passieren, dass 10 bis 20 Clients auf einmal ausgerollt werden). Eine binäre Verschlüsselung erlaubt es mir, alle Einstellungen mit einem String zu erfassen. Ansonsten müsste ich immer die komplette Section auslesen und auswerten. Da ist es mit einem String einfacher.

Da es sich bei meiner Verschlüsselung nicht wirklich im einen binären Wert handelt, kann ich ebenfalls mehrere Status abfragen. An einer Stelle bestimme ich, ob Desktop-Verknüpfungen von Microsoft Office erstellt werden sollen. Hier setze ich an der selben Position 1 für Word, 2 für Excel und 3 für beide ein.
Ich brauche diese Abfragen ausschließlich für das Ausrollen neuer Rechner.

Es ist schwierig, alle Gedankengänge in einem Post zu schreiben, der einen zu einer Lösung geführt hat.

Beim "If .. Then"-Command gibt es leider kein "nicht gleich" (!=). Und das <> funktioniert halt nicht (habe im Feld Wert "" probiert und auch einfach nichts einzutragen). :-(

Und danke für die Denkanstöße...

Schöne Grüße... Sven Biehl
Dennis Koch
Beiträge: 501
Registriert: Di Nov 20, 2012 4:03 pm

Hallo Sven,

auf leer kann man wie folgt prüfen
if.png
if.png (175.39 KiB) 5915 mal betrachtet
Mit freundlichen Grüßen / Best regards

Dennis Koch
Aagon GmbH
Eisi
Beiträge: 49
Registriert: Mo Jan 16, 2017 9:59 pm

Hallo Dennis,

das habe ich so ausprobiert, leider ohne Erfolg. Auslesen eines nicht vorhandenen Wertes aus der INI-Datei, ergibt eine leere Variable (oder scheinbar leer?). Da hat aber genau diese Abfrage nicht gegriffen. Allerdings funktioniert %Wert% <> "" ELSE. Ich habe keine Erklärung dafür. Ausprobiert mit der 5.4.1 (die 5.4.2-Welle hat uns noch nicht erwischt... ;-)

Schöne Grüße... Sven Biehl
Antworten