4 Replies Latest reply on Feb 8, 2016 3:05 AM by Klaus Salger

    Bug bei der OSD Variablenauflösung in 2015.2.1

    Klaus Salger Expert
      Wenn man das aktuelle Default Post OSActionPackage mit einer Zero-Account-Config laufen lässt (also ohne Depot Access Account), gibt's einen Fehler beim Herstellen der Netzverbindung.

      Die Depot-Zugriffsrechte hat in dem Fall der Computer Account, es geht also nicht um ein Berechtigungsproblem.
      Das Problem liegt darin, dass bei dieser Konfiguration kein Depot Access Account konfiguriert ist, der entsprechende Wert in der ICDB ist leer.

      Die Variable wird deswegen im MountNetinstallShare.cmd nicht zu '' aufgelöst sondern unaufgelöst in das Batch geschrieben, also '%OSD.ICDB.ServiceSettings.AccountName%'.
      Bis dahin führt das noch zu keinem Fehler weil dieser Ausdruck auch von der CMD interpretiert und als '' aufgelöst wird.

      Auf die Nase legt sich das Batch dann aber bei
      net use "\\myserver.domain.de\dsm$" %[~= '%OSD.ICDB.ServiceSettings.AccountName%' ? '/User:"%OSD.ICDB.ServiceSettings.AccountName%" "%Decrypt.ICDB.ServiceSettings.Password%"' : ''~]% < nul

      Das ist für die arme CMD dann doch zu viel

      Da hat sich der Entwickler viel Mühe gemacht und genau den Fall, dass der AccountName leer ist abzufangen und dann scheitert's an der Variablenauflösung - schade
      Was das '< nul' am Ende zu bedeuten hat würde mich auch interessieren - zumindest macht das kein Problem und man kommt in den Genuss eines Fehlerhinweises im PosteClient.log.

      Ich nehme an, dass man sich das ganze net use auch gut sparen könnte wenn es für die Authentifizierung gar nicht nötig ist aber das nur nebenbei.

      ServiceSettings.AccountName wird korrekt aufgelöst wenn ein Wert vorhanden ist.
      Auch über den Agent funktioniert die Auflösung - sowohl mit als auch ohne Wert.
      Ich nehme, dass das ein OSD-spezifisches Problem bei der Variablenauflösung ist.

      Ach ja: getestet unter Windows 10.

      Ciao
        Klaus
        • 1. Re: Bug bei der OSD Variablenauflösung in 2015.2.1
          _Mel_ Master
          es funktioniert auch wenn der wert ein leerer string ist - nur wenn der wert nicht gesetzt ist, dann gibt es probleme

          und so funktionierts auch mit nicht gesetzten werten:
          net use "%OSD.ICDB.ServerProperties.NetInstallDir%" %[~= '%[~OSD.ICDB.ServiceSettings.AccountName~]%' ? '/User:"%[~OSD.ICDB.ServiceSettings.AccountName~]%" "%[~Decrypt.ICDB.ServiceSettings.Password~]%"' : ''~]% < nul

          ja, es geht auch ohne, wenn der computeraccount selbst zugriff auf's share hat - wenn nicht, dann nicht
          • 2. Re: Bug bei der OSD Variablenauflösung in 2015.2.1
            Klaus Salger Expert
            Hallo Mel,

            danke für die Lösung.
            Gibt's auch für das "< nul" am Ende eine Erklärung oder ist das einfach ein Tippfehler?

            Das Problem mit der Auflösung der unbelegten Variablen ist ein Bug, der bei Gelegenheit gefixt wird oder ist das "by design"?
            Ich fände es schon schön, wenn ungesetzte Variablen auch in OSD zu '' aufgelöst würden...

            Schönes Wochenende
              Klaus
            • 3. Re: Bug bei der OSD Variablenauflösung in 2015.2.1
              _Mel_ Master
              in der 2016.1 ist der default für depotaccount und das passwort ein leerstring (und nicht mehr undefiniert)

              du kannst generell mit der schreibweise
              %[~varname~default]%
              dafür sorgen, daß anstelle einer nicht definierten variable der defaultwert genommen wird

              d.h.
              %[~varname~]%
              macht aus einer undefinierten variable einen leerstring

              schon aus kompatibilitätsgründen kann man das aber nicht allgemein machen, weil es viele alte scripte gibt, die die umgebungsvariablen nur mit einfachen % zeichen schreiben
              wenn man daraus immer einen leerstring machen würde, dann würde aus
              if "%errorlevel%"=="1"
              if ""=="1"


              ich vermute das < nul kommt daher, daß man so auf der kommandozeile verhindern kann, daß ggf nach benutzername/passwort gefragt wird
              müßte man mal testen ob es in einem batchfile unnötig ist.
              • 4. Re: Bug bei der OSD Variablenauflösung in 2015.2.1
                Klaus Salger Expert
                Ja, dass undefinierte Variablen nicht aufgelöst werden ist normal, damit rechnet man auch - insbesondere bei Umgebungsvariablen.
                Aber von vorhandenen ICDB- oder ODS-Variablen erwarte ich schon, dass sie definiert sind und in jedem Fall aufgelöst werden.

                Die Situation scheint an der Stelle momentan etwas uneinheitlich zu sein.
                Außerhalb des OSD werden ICDB-Variablen wohl zumindest im Regelfall auch dann aufgelöst wenn sie keinen Wert haben. Das gilt scheinbar aber nicht für alle, z.B. %MgrSettings.ListOfSelectedBls% wird auch vom Agent nicht aufgelöst wenn unbelegt.
                Die ODS-Variablen werden wohl grundsätzlich nicht aufgelöst wenn sie nicht definiert sind.

                Ich denke, dass es schon sinnvoll wäre auch die undefinierten ICDB- und ODS-Variablen immer aufzulösen und die Situation damit auch zu vereinheitlichen.
                Ich nehme an, dass es auch nicht besonders aufwendig wäre, das zu ändern indem man undefinierte ICDB- und ODS-Variablen (soweit sie "available on client" und aktiv sind) im Installer genauso behandelt wie welche mit Leerstring.

                Das macht doch mehr Sinn als den Fall bei jedem Zugriff auf eine Variable abfangen zu müssen und dürfte wohl auch kaum ein Kompatibilitätsproblem sein.

                Ciao
                  Klaus