Client Commands und die Arbeit mit Variablen

Variablen lassen sich an vielen Stellen innerhalb der ACMP Suite einsetzen, insbesondere werden sie im Modul ACMP Desktop Automation verwendet. Ob zum Erstellen oder Auslesen von Verzeichnissen, Schreiben von Informationen in oder aus Active Directory, zur Weiterverwendung innerhalb eines Power-Shell-Skriptes, zum Ändern von Registry Keys usw. Überall, wo mit Werten auf dem Rechner etwas geschehen soll und sich diese eingeben lassen (was in fast allen Bausteinen der Fall ist), sind Variablen hilfreich. Sie sind vollumfänglich integrierbar in die Skripte, die damit deutlich leistungsfähiger werden. Resultat: Die Arbeit mit der ACMP Suite wird schneller und einfacher.


Erstellt werden Variablen an zentraler Stelle im Client Command (oben unter „Variablen bearbeiten“) und sind zunächst einmal leer.


Variablen dienen dazu, bestimmte Werte zu speichern. Dabei gibt es Projekt-, Console-, System- und globale ACMP-Variablen.


Standardmäßig können auch Werte für die Variable hinterlegt werden. Zudem gibt es bereits (eigene) Projekt-Variablen, welche nur in diesem Client Command zur Verfügung stehen und gelesen, beschrieben und erstellt werden können. Die vorgegebenen und nur lesbaren System-Variablen enthalten Informationen vom System, auf dem das Client Command ausgeführt wird. Beispiel: Computername. Außerdem gibt es Konsolen-Variablen, die sich direkt auf die ACMP Konsole beziehen und auch nur gelesen werden können. Und schließlich – auf der anderen Seite des Spektrums – globale Variablen zur dauerhaften Speicherung von Informationen über ein Client Command hinweg. Diese sind überall in ACMP verfügbar, müssen explizit angelegt, können aber auch beschrieben werden.


Das Erstellen von Variablen funktioniert – nebenbei bemerkt – nicht nur über den Menüpunkt (das Variablenfenster), sondern ist in jedem Baustein im Client Command möglich, mit dem sich Variablen befüllen oder auslesen lassen.



Wie werden Variablen befüllt? Dies können wir am Beispiel „Bau eines eigenen Scanners“ erläutern – ein häufig angefragter Fall, wenn der Standard ACMP Agent nicht genau die Client-Informationen ausliest, die der Kunde benötigt. Manchmal ist dazu eine Power Shell erforderlich, manchmal muss im AD nachgesehen werden.


In unserem Beispiel suchen wir uns also zunächst über eine Power-Shell-Abfrage den Windows 10-Key aus dem BIOS. Die Variablen müssen nun, weil es sich um ein neues Client Command handelt, neu erstellt werden (selbst erstellte Projekt-Variablen sind immer nur für das jeweilige Client Command da). Es empfiehlt sich, die Variablen zu testen, was etwa über ein Dialogfenster funktioniert. Im vorliegenden Fall ist sogleich sichtbar: In der Variable steht nicht nur der BIOS-Key, sondern auch der Wert der vorangegangen Suche.


Den Stream der Variable könnt Ihr deshalb so bearbeiten, dass nicht gewünschte Werte aus ihr wieder entfernt werden. Dies funktioniert mit einem „Replace“-Befehl, der den überflüssigen Wert löscht.


Anschließend ist einfach der Key in ein benutzerdefiniertes Feld (Store value on server) zu schreiben. Was also in der Variable „Output“ steht, wird dann für alle Clients, auf denen das Skript läuft, in einem gesonderten Feld gespeichert


Im Detail
Im Anschluss findet ihr die Einzelschrittanleitung zum Bau des eigenen Scanners:
1. Variable über „Projektvariablen verwalten“ anlegen => Variable „Output“
2. In das Client Script den Baustein „Execute PowerShell script“ unter dem Reiter „Processes and Shell“ oder die Bausteinsuche einfügen
3. In „Details“ den Befehl „wmic path softwarelicensingservice get OA3xOriginalProductKey“ einfügen
4. Im unteren Bereich des Fensters die neu angelegte Variable „Output“ verknüpfen => „ok“ bestätigen
5. Baustein „Dialog“ aus dem gleichnamigen Reiter auswählen. (Dieser Baustein ist ein weiteres Beispiel für die Arbeit mit Variablen – im Grunde ein Informationsfenster für den User, um den Inhalt der Variablen
schnell einzusehen. Der User kann darüber aber auch zu einer Eingabe aufgefordert werden.)

6. Feld „Nachricht“ mit der Variable „%Output%“ (wichtig Variablenamen zwischen „%“ | Autovervollständigung durch „strg“+“Leertaste“) füllen und per OK bestätigen
7. Über die grüne Play-Taste im Ribbon-Menü lokal starten
8. Wie zu erkennen, ist die Bezeichnung des ausgelesenen Schlüssels noch Teil der Variablen.
9. Baustein „Replace String“ aus dem Reiter „Strings“ einfügen
10. Quelle: %Output% | Alte Zeichenfolge: „OA3xOriginalProductKey“ | Neue Zeichenfolge:„“ | Ergebnis speichern in: „output“ => bestätigen
11. Weiteren Dialog-Baustein einfügen und wieder in Nachricht Variable Output ausgeben lassen
12. Ist das Ergebnis wie gewünscht?
13. Hinweis: Auf benutzerdefinierte Felder gehen wir später näher ein. Daher setzen wir an dieser Stelle voraus, dass Ihr ein entsprechendes Feld bereits anlegen könnt, dies im Vorfeld getan und so die
Informationen eines Clients erweitert habt.
Baustein „Store Value on Server“ aus dem Reiter ACMP hinzufügen
14. Die Bausteine „Dialog“ aus den Tests entfernen, und das Client Command ist „fertig“ bzw. zum Testen bereit.


So einfach kann es sein: Drei Zeilen, ein Skript, und ein neues Client Command ist in drei Minuten erstellt. Resultat ist ein Scanner, der am PC per Power Shell etwas ausliest (hier den BIOS Key) und in der ACMP Datenbank zu den Clients speichert. Nach dem Test im Benutzerkontext über den Play Button empfiehlt sich natürlich nochmal ein „vollständiger“ Test in der Teststufe und auf den ausgewählten Testsystemen – so wird das Verhalten im Systemkontext geprüft.


Adressieren einzelner Variablenwerte


Ein Tipp zum Handling von Variablen wollen wir hier gern noch ausführen: Oft erfolgt der Start einer Abfrage auch mal ins AD, liest dort Informationen zu User A aus (Host ist der ACMP Server) und speichert die Ergebnisse ab. Es stehen dann in der Variablen sehr viele Informationen (Name, Telefonnummer, E-Mail-Adresse…) hintereinander, nur per Komma getrennt. Ist nur ein bestimmter Einzelwert davon erforderlich (oder auch mehrere), lässt sich dieser innerhalb der Variable durch Setzen von Punkten adressieren. So könnt Ihr Euch aus einer Menge von Werten komfortabel die Rosinen herauspicken, das heißt die Werte, die Ihr im jeweiligen Arbeitsschritt benötigt. Variablen, die als Rückgabewert kommagetrennte Werte enthalten, lassen sich dadurch gezielt ansprechen.

Mit dem Baustein „LDAP Verzeichnis durchsuchen“ (erklären wir dir in einem der kommenden Artikel) kannst Du etwa aus dem Active Directory gezielt einen Nutzer auslesen. Dabei erhältst Du einen großen Datensatz mit E-Mail- Adresse, Name usw. In dem langen String stellt sich etwa die E-Mail-Adresse so dar: „[…], Mail=xy@xyz.de, […]“. Wurde nun das Abfrageergebnis zu dem User vom LDAP Baustein in eine Variable (im Beispiel benannt mit „Output“) geschrieben, lässt sich beispielsweise gezielt die Mailadresse ansprechen => „%Output.mail%“ und in einem Dialog anzeigen. (Dies funktioniert jedoch nur mit durch Komma getrennte Werte, im oben genannten Stil)


Es gibt also viele verschiedene Arten, Werte in eine Variable hineinzubekommen, sie dort „aufzuhübschen“ und anschließend auch wieder herauszubekommen. Dies versetzt uns in die Lage, zu Laufzeiten Informationen auszulesen und mit ihnen weiterzuarbeiten. So entsteht in den Client Commands auch eine gute Fehlerprotokollierung, und Ihr könnt deutlich komplexere Skripte erstellen, die auf bestimmte Gegebenheiten dynamisch reagieren.