7 Replies Latest reply on Jan 19, 2015 5:44 AM by _Mel_

    Registry Wert für "is installed" Bedingung

    DSMForum Master
      Hallo zusammen,

      ich möchte in der "is installed-Bedingung" (Set the condition for existing installations) abfragen, ob der String eines Registry-Wertes eine bestimmte Zeichenfolge enthält.

      Dabei würde ich gerne mit einer Wildcard arbeiten: ValueName equal to *

      Hat jemand eine Idee, ob das funktioniert?

      Über die passende Definition der "is installed-Bedingung" , möchte ich  vermeiden, dass das Paket erst gar nicht auf Clients gecached wird, die es nicht benötigen.

      Grüße,  Jörg
        • 1. Re: Registry Wert für "is installed" Bedingung
          SBRUTSCH Expert
          Hi,

          wenn du es im eScript verwendest wird das Paket auf jeden Fall schon gecached sein wenn er den Befehl ausführt.

          Du musst das schon Server seitig prüfen damit keine Policieinstanz entseht.

          Also entweder eine dynamische Gruppe oder die Serverseitigen Vorraussetzungen beim Paket pflegen.

          Viele Grüße
          Stefan
          • 2. Re: Registry Wert für "is installed" Bedingung
            _Mel_ Master
            also so wie ich das verstehe müßte * als wildcard in vergleichen auf gleichheit oder ungleichheit funktionieren.

            wenn die preinstalledcondition am paket zutrifft, dann sollte das paket nicht heruntergeladen werden, sondern die PI gleich auf grün gehen.
            • 3. Re: Registry Wert für "is installed" Bedingung
              Frank.Scholer Master
              Hallo Jörg,

              du willst also explizit den Value-Name prüfen, ob der existiert und nicht den Inhalt, richtig? Falls es doch um den Inhalt geht, das geht seit relativ kurzer Zeit (ich meine, wurde mit DSM 2013.2 eingeführt) über die "RegValue"-Bedingung.

              Falls es doch um den Namen geht, dann nimmst du die "RegValueExistsEx"-Bedingung.

              Die Frage ist jetzt noch, ob das mit der führenden Wildcard hinhaut. Das gab meines Wissens nach in der Vergangenheit schön des Öfteren Probleme, weil immer TRUE zurückgeliefert wurde, weil * für alles passt. Da wurde der statische Teil nach der Wildcard garnicht mehr geprüft.

              Ich hab's jetzt gerade mal geprüft mit der aktuellen DSM-Version (2014.1.3.2642) und habe festgestellt, dass das NICHT funktioniert. Das Paket wurde ausgeführt, obwohl ein Registry-Value vorhanden war, auf den ich per Wildcard-IsInstalled-Bedingung abgeprüft habe. Als Gegenprobe hab ich dasselbe ohne Wildcard gemacht und da hat es sich so verhalten wie erwartet (das Paket wurde also nicht gestaged und auch nicht ausgeführt, die Policy-Instanz aber auf grün mit Hinweisen gesetzt, dass die IsPreinstalled-Bedingung gezogen hat).

              Insofern wird, das, was du vorhast so wohl nicht funktionieren :-(.

              Ich habe auch mal gerade probiert, hier mehrere explizite Werte einzutragen, aber dann müssen alle Werte existieren, wenn die Bedingung zutreffen soll (wie früher bei NI5: mehrere Bedingungen werden AND-verknüpft). Insofern könntest du leider auch nicht hier mehrere Werte eintragen, falls das, was du per Wildcard abfangen wolltest, eventuell eine überschaubare Wertemenge wäre...

              Einfallen würde mir jetzt ein zweistufiger Lösungsansatz:
              1. ein kleines Script, was mögliche Werte prüft und dann einen entscheidenden Key setzt (dieses Script wird auf jeden Fall gestaged und ausgeführt, was aber kein Problem ist, da sehr klein)
              2. auf das eigentliche Script setzen einer IsInstalled-Bedingung auf den in 1. gesetzten Key...

              HTH, Grüße Frank
              • 4. Re: Registry Wert für "is installed" Bedingung
                DSMForum Master
                Hallo zusammen,
                vielen Dank für die bisherigen Antworten.
                @Frank: Da das mit der Wildcard nicht funktioniert, wird es tatsächlich am besten sein, vorab über ein separates Paket, ein kleines Script laufen zu lassen, was den „problematischen“ Registrywert auswertet und  einen eindeutigen Wert erzeugt, den ich wiederum für die „is installed condition“ verwenden kann. Danke für diesen Tipp :-)
                • 5. Re: Registry Wert für "is installed" Bedingung
                  derniwi Master
                  Hallo Jörg,

                  je nach dem, wieviele Clients das Betrieff, kannst du natürlich auch eine Schemaerweiterung verwenden. Über ein kleines Paket prüfst du den Wert und füllst die Eigenschaft in der Schemaerweiterung. Darüber bedienst du dann eine dynamische Gruppe, in der die Clients automatisch landen und dieser Gruppe weist du das Paket zu.

                  Nicht sehr schön, aber damit ist auch auf jeden Fall sichergestellt, dass das Paket nicht beim Client im Cache landet, wenn es da nicht hinsoll.

                  Es kommt meiner Meinung nach auch darauf an, wie oft so etwas vorkommt, damit man sich ein einheitliches Schema aufbaut.

                  Gruß
                  Nils
                  • 6. Re: Registry Wert für "is installed" Bedingung
                    bretzeli Expert
                    Kann noch jemand mal schreiben wie man dies im Enteo genau machen soll.
                    Ist so ziemlich das einzige was ich mit Kunden ohne Enteo besser machen kann.
                    Bin mir nich sicher ob spielerein mit KLEINER / GROESSER ziehen wenn dann die
                    version 9.X.XXX ist?

                    11.0.9600.17801 (Ende alles drauf)
                    11.0.9600.17280 (Ohne Hotfixe)
                    11.0.9600.16428 (IE11 Basis)

                    :: Kontrolle ob IE11 schon drauf fallse JA einfach zum Ende
                    CMD /C EXIT 0
                    reg query  "HKLM\Software\Microsoft\Internet Explorer" /v svcVersion | find "11." > nul
                    if %errorlevel%==0 (
                    goto ie11schondrauf
                    ) ELSE (
                    goto installieren_ie11
                    )
                    goto ende
                    • 7. Re: Registry Wert für "is installed" Bedingung
                      derniwi Master
                      Hallo,

                      naja, das hilft dir vielleicht nur teilweise, aber hier ist das Patch Management von Microsoft besser, also über WSUS.

                      Ein weiteres Problem kann auftreten, wenn die Zahlen in den einzelnen Teilen zu groß sind. Ich habe dieses Problem bei TeamViewer, da ist die Version aktuell 10.0.43174. Und die letzte Versionsnummer 43174 ist so groß, dass ein Vergleich fehlschlägt. Ist schon an den Support gemeldet.

                      Du kannst über eScript natürlich die Version zerlegen (neue Funktion "GetFileVersion" in DSM 2015) und dann mit den einzelnen Teilen arbeiten. Mit DSM 2014 musst du halt noch einen Umweg über ein VBS gehen, um die Dateiversion als String zu erhalten.

                      Aber ansonsten fällt mir hier auch nicht viel mehr ein:
                      - Enntweder über ein großes Paket alle Dateien mitgeben, die zutreffen könnten.
                      - Eine Schemaerweiterung und dann mit dynamischen Gruppen arbeiten. Im ersten Paket dann die Auswahl treffen und den Wert für die Schemaerweiterung anpassen. Hat aber den Nachteil, dass das auch sehr aufwändig mit der Pflege ist und die Pakete nicht auf einmal installiert werden.
                      - Im Paket mit IsPreInstalledCondition (Bedingung für vorhandene Installation) und mit "größer" arbeiten. Leider fehlt mir persönlich ein "größer gleich", also muss man da immer mit größer und der Version arbeiten und manuell den Wert um 1 verkleinern.

                      Lösungsansätze gibt es da sicherlich noch einige, es sollte halt auch zum Rest eurer Skripte passen. Du kannst ja auch die IE-Dateien in den allgemeinen Extern$-Share legen (%nidir%\Extern$) und über ein anderes Skript darauf zugreifen, also mit .cmd, .vbs. ps1...

                      Gruß
                      Nils