Blog

Schemaerweiterungen während der OSD Phase bearbeiten

seit DSM 7.1 gibt es eine neue Möglichkeit, während der OSD Phase über z.B. ein PreOS Action Paket, den Wert einer Schemaerweiterung zu bearbeiten.

Ein Beispiel hierfür ist, den Installationsstatus zu definieren, welcher später für die Reboot Steuerung abgefragt werden kann.

So kann zu Beginn einer Installation der Wert „Grundinstallation“ in eine State Info Schemaerweiterung geschrieben werden. Solange dieser Wert gesetzt ist, kann der Client ohne Rücksicht auf Verluste rebootet werden. Mit dem letzten DSM Paket kann über den Befehl „ModifyObjectProperty“ der Wert auf „Produktiver Client“ gesetzt werden. Somit müssen gewisse Sachen geprüft werden, bevor ein Reboot durchgeführt werden kann.

Wichtig ist hierbei eine State Info Schemaerweiterung zu verwenden. Diese wird durch den DSM Client verwaltet. Managed Info Schemaerweiterungen können hierbei nicht verwendet werden, da diese ausschließlich über die DSMC verwaltet werden.

Damit der Wert aus einem PreOS Action Paket in die Schemaerweiterung geschrieben werden kann, gibt es die Datei „_result.txt“, welche die Aktion erledigt.

Diese wird auch bei den neu Eingeführten „OS Self Service“ Paketen verwendet.

Wenn im Script z.B. folgende Zeile abgesetzt wird, wird der Wert „Grundinstallation“ in die Schemaerweiterung eingetragen. Die Variable darf an dieser Stelle aber nicht in „%“-Zeichen gesetzt werden.

echo CurrentComputer.CustomNWCClientInfo.StagingPhase=Grundinstallation > _result.txt

Beispiel:

Sollten Integer Werte in die Schemaerweiterung geschrieben werden, gibt es ein paar kleine Stolperstellen, welche es zu vermeiden gilt.

Wenn man z.B. folgende Syntax verwendet…

                „Echo CurrentComputer.CustomNWCClientInfo.StagingPhase=1>_result.txt“

…steht in der _result.txt folgendes:

               „CurrentComputer.CustomNWCClientInfo.StagingPhase=“

…weil die 1 zur Redirection gehört

 Wenn man es dagegen mit Leerzeichen trennt, also

                „Echo CurrentComputer.CustomNWCClientInfo.StagingPhase=1 >_result.txt“

…dann steht das Leerzeichen mit in der _result.txt.

 Workaround:

                “Echo CurrentComputer.CustomNWCClientInfo.StagingPhase=1|sort>_result.txt”

Ein Umständliches setzen von Registry Keys, welche dann durch den Client ausgelesen werden, bevor sie per „ModifyObjectProperty“ in die Datenbank geschrieben werden entfällt hierbei komplett.

Runtime Service als Local SYSTEM Konto
Frontrange YouTube Channel

Related Posts

 

Comments 3

Klaus Salger (website) on Monday, 08 October 2012 13:12

Hallo Michi,

danke für den Tipp.
Zu dem Workaround habe ich noch einen Verbesserungsvorschlag.
Es funktioniert auch so - ohne sort:

(Echo CurrentComputer.CustomNWCClientInfo.StagingPhase=1)>_result.txt

Also den kompletten Ausdruck, der in die Datei geschrieben werden soll in Klammern setzen.
Das funktioniert auch unter WinPE.

Ciao
Klaus

Hallo Michi, danke für den Tipp. Zu dem Workaround habe ich noch einen Verbesserungsvorschlag. Es funktioniert auch so - ohne sort: (Echo CurrentComputer.CustomNWCClientInfo.StagingPhase=1)>_result.txt Also den kompletten Ausdruck, der in die Datei geschrieben werden soll in Klammern setzen. Das funktioniert auch unter WinPE. Ciao Klaus
Nils Winkler (website) on Monday, 11 March 2013 15:59

Hallo Michi,

ich habe das erfolgreich unter 7.2.1 mit den Variablentypen String und Optionsliste getestet. Der neue Typ "Bool" funktioniert hier jedoch nicht.

Der Tipp von Klaus ist eine gute und schlanke Alternative. Hätte ich auch vorgeschlagen, war nur ein paar Monate zu langsam. :-)

Gruß
Nils

Hallo Michi, ich habe das erfolgreich unter 7.2.1 mit den Variablentypen String und Optionsliste getestet. Der neue Typ "Bool" funktioniert hier jedoch nicht. Der Tipp von Klaus ist eine gute und schlanke Alternative. Hätte ich auch vorgeschlagen, war nur ein paar Monate zu langsam. :-) Gruß Nils
Nils Winkler (website) on Thursday, 14 March 2013 09:03

Update: bool geht doch. Die Werte kann man auslesen und erhält "0" für "falsch" und "1" für "wahr". Beim Setzen muss man allerdings "true" und "false" verwenden:
Echo CurrentComputer.CustomTest.Bool=true >_result.txt

Und wenn man mehrere Werte setzen möchte (für diejenigen, die mit der Kommandozeile nicht so vertraut sind), muss man ab dem zweiten Wert zwei ">"-Zeichen verwenden:
Echo CurrentComputer.CustomTest.Wert1=Wert1 >_result.txt
Echo CurrentComputer.CustomTest.Wert2=Wert2 >>_result.txt
Echo CurrentComputer.CustomTest.Wert3=tWert3 >>_result.txt

Gruß
Nils

Update: bool geht doch. Die Werte kann man auslesen und erhält "0" für "falsch" und "1" für "wahr". Beim Setzen muss man allerdings "true" und "false" verwenden: Echo CurrentComputer.CustomTest.Bool=true >_result.txt Und wenn man mehrere Werte setzen möchte (für diejenigen, die mit der Kommandozeile nicht so vertraut sind), muss man ab dem zweiten Wert zwei ">"-Zeichen verwenden: Echo CurrentComputer.CustomTest.Wert1=Wert1 [b]>[/b]_result.txt Echo CurrentComputer.CustomTest.Wert2=Wert2 [b]>>[/b]_result.txt Echo CurrentComputer.CustomTest.Wert3=tWert3 [b]>>[/b]_result.txt Gruß Nils
Already Registered? Login Here
Guest
Sunday, 22 May 2022

Captcha Image