1 2 Previous Next 17 Replies Latest reply on Aug 7, 2009 12:17 PM by NicoS1

    Fehler in If Abfrage (LineExists) ?

    TorstenStreng Expert
      Hallo,

      kann das evtl. mal jemand ausprobieren bzw. bestätigen?

      Ich habe folgende Abfrage:

      If not LineExists('"%ProgramFilesDir%\Anwendung0815\Anwendung0815.log"','*Anwendung0815 -- Installation operation completed successfully*')

      Leider schlägt das bei mir fehl. Im NI Logfile steht dann folgendes:

      12:51:41.380 E           Warning (Module:Main, Severity:0x03): C:\WINDOWS\"C:\Program Files (x86)\Anwendung0815\Anwendung0815.log" contains an invalid path.

      T.
        • 1. Re: Fehler in If Abfrage (LineExists) ?
          NicoS1 Master
          Uff... das ist irgend so ein 64 Bit Problem mit den Umgebungsvariablen... ganz blöde idee... hast du mal %ProgramFiles% probiert statt %ProgramFilesDir%.

          Ansonsten musst du evtl. den Pfad hardcoden
          • 2. Re: Fehler in If Abfrage (LineExists) ?
            Klaus Salger Expert
            Hallo Torsten,

            hab gerade versucht, das zu reproduzieren - kein Problem gefunden.
            %ProgramFilesDir% wird sowohl auf W2k3 x86 also auch auf W2k3 x64 ganz normal aufgelöst.

            Eigentlich würde ich in Deinem Fall vermuten, dass auf dem entsprechenden Computer "HKLM\SW\Wow6432Node\Microsoft\Windows\CurrentVersion\ProgramFilesDir" falsch gesetzt ist. Dazu passen bei Dir allerdings die Anführungszeichen nicht (die sind da übrigens nicht nötig).

            Das sieht so aus, also ob (in einer älteren Version?) im Script stehen würde "If not LineExists('%windir%\"%ProgramFilesDir%\Anwendung0815..."...)".

            Ein paar Zeilen über der von Dir geposteten Logzeile sollte das If-Statement mit noch nicht aufgelösten Variablen stehen, sowas wie "Evaluating condition "LineExists('_ProgramFilesDir_\Anwendung0815..."" oder eben "Evaluating condition "LineExists('_Windir_\_ProgramFilesDir_\Anwendung0815..."".

            Was steht denn da?

            Ciao
              Klaus
            • 3. Re: Fehler in If Abfrage (LineExists) ?
              TorstenStreng Expert
              Hallo Klaus,

              hab gerade versucht, das zu reproduzieren - kein Problem gefunden.
              %ProgramFilesDir% wird sowohl auf W2k3 x86 also auch auf W2k3 x64 ganz normal aufgelöst.



              Das ist auch nicht mein Problem. Wird auch bei mir korrekt aufgelöst!

              Eigentlich würde ich in Deinem Fall vermuten, dass auf dem entsprechenden Computer "HKLM\SW\Wow6432Node\Microsoft\Windows\CurrentVersion\ProgramFilesDir" falsch gesetzt ist. Dazu passen bei Dir allerdings die Anführungszeichen nicht (die sind da übrigens nicht nötig).



              Nein das paßt schon. Und das mit den Anführungszeichen ist mir schon klar

              Das sieht so aus, also ob (in einer älteren Version?) im Script stehen würde "If not LineExists('%windir%\"%ProgramFilesDir%\Anwendung0 815..."...)".



              Es gibt keine ältere Version. Hab gerade nochmal ein ganz neues escript (mit Pfadangabe Hardcoded) angelegt, quasi nur nen 2-zeiler als Test --> gleiches Ergebnis!

              If LineExists('"C:\Program Files (x86)
              etinst\NiLogs\*Microsoft XML Parser*.log"','*Microsoft XML Parser -- Installation completed successfully*')
              ExitProcEx(Done,'Installation erfolgreich ')

              10:26:34.929 2        ---->Starting installation of "If Abfrage Test"
              10:26:34.960 E         Warning (Module:Main, Severity:0x03): C:\WINDOWS\"C:\Program Files (x86)
              etinst\NiLogs\*Microsoft XML Parser*.log" contains an invalid path.
              10:26:34.992 2        Condition FALSE  -> skipping IF part
              10:26:34.992 2        Skipping command : ExitProcEx

              10:26:35.007 2         ER: Creating event manager
              10:26:35.007 2        SI: Rewriting SI client state data...
              10:26:35.117 2        xniFPS: '{20806AE9-34AC-4887-8626-A0C3E0E8E0B9}' is installed
              10:26:35.163 2        FPS.dll: Closing the file package '\\?\C:\WINDOWS\enteo\RepositoryCache\32706\rev\1\'.

              10:26:35.163 2        ---->Installation of If Abfrage Test complete.

              Gruß
              T.
              • 4. Re: Fehler in If Abfrage (LineExists) ?
                Klaus Salger Expert
                Hi Torsten,

                was ich sagen wollte ist, dass der LineExist bei mir ganz normal funktioniert, nicht nur dass die Variablen normal aufgelöst werden.

                Setz doch mal den Loglevel auf Debug und führ Dein Testscript nochmal aus, dann sollte man im Log sehen, ob bzw. welche Variablen enteo hier auflöst.

                Ciao
                  Klaus
                • 5. Re: Fehler in If Abfrage (LineExists) ?
                  TorstenStreng Expert
                  Hi Klaus,

                  hier im Log Level 0.

                  11:54:48.155 2        ---->Starting installation of "If Abfrage Test"

                  11:54:48.171 1        Evaluating condition "LineExists('"_ProgramFilesDir_
                  etinst\NiLogs\*Microsoft XML Parser*.log"','*Microsoft XML Parser -- Installation completed successfully*')"
                  11:54:48.187 1          RegValue 'ProgramFilesDir' resolved as 'C:\Program Files (x86)'
                  11:54:48.202 0         Checking if *Microsoft XML Parser -- Installation completed successfully* exists in C:\WINDOWS\"C:\Program Files (x86)
                  etinst\NiLogs\*Microsoft XML Parser*.log"
                  11:54:48.312 E         Warning (Module:Main, Severity:0x03): C:\WINDOWS\"C:\Program Files (x86)
                  etinst\NiLogs\*Microsoft XML Parser*.log" contains an invalid path.
                  11:54:48.343 0         SWMSRT: Searching for triggered jobs (13)
                  11:54:48.343 1         SWMSRT: Checking if policies should run for the trigger 'Time based trigger'.
                  11:54:48.358 0         SWMSRT: Using Registry only to get PolicyInstances
                  11:54:48.358 0         SWMSRT: No triggered jobs found
                  11:54:48.374 2        Condition FALSE  -> skipping IF part
                  11:54:48.374 2        Skipping command : ExitProcEx

                  Gruß
                  T.
                  • 6. Re: Fehler in If Abfrage (LineExists) ?
                    Klaus Salger Expert
                    OK, im Script ist das %windir% offenbar nicht, trotzdem fügt der LineExist-Befehl den Pfad ein - äußerst seltsam.
                    Ich denke, das sollte sich mal der FrontRange-Support anschauen

                    Ich kann das wie gesagt in unserer enteo 6.2.0.5 Labsystem nicht reproduzieren.
                    Hast Du enteo Test- und Produktionsysteme verfübar? Siehst Du's in beiden?

                    Ansonsten wie gesagt -> Call aufmachen.

                    Ciao
                      Klaus
                    • 7. Re: Fehler in If Abfrage (LineExists) ?
                      TorstenStreng Expert
                      Hallo Klaus,

                      den Call hatte ich schon seit längerem offen. Hab dann heute morgen die Email eines Support Mitarbeiters aus den USA gefunden. Dieser hat den Call geschlossen mit der Begründung der Befehl würde nur mit "ini" und "cfg" Dateien funktionieren. Ich kann das nicht glauben! Mal davon abgesehen, das es bei mir zu einer falschen Pfadauflösung kommt. Ob der Befehl Text Dateien auswerten kann, ist eine andere Sache. Auf jeden Fall steht davon auch nichts in der Online Hilfe.

                      Kannst Du Text Dateien auswerten?

                      Gruß
                      Torsten
                      • 8. Re: Fehler in If Abfrage (LineExists) ?
                        Klaus Salger Expert
                        Hallo Torsten,

                        sehr lustig! Ich glaube nicht, dass der Kollege vom Support Dein Problem verstanden hat. Vielleicht hat er aber auch das Produkt nicht verstanden

                        Natürlich kann man mit LineExist beliebige Textdateien auslesen. Das hat aber mit Deinem Problem wie Du ja auch sagst nichts zu tun. Ich glaube nicht, dass jemand ernsthaft behaupten will, dass automatisch ein falscher Pfad verwendet wird nur weil der Dateiinhalt nicht genehm ist.

                        Damit LineExist funktioniert sollte das Textfile in ANSI und nicht in Unicode vorliegen, ansonsten bekommt man halt kein sinnvolles Ergebnis aber auch Unicode-Files kann man selbstverständlich auslesen.

                        Ich habe den Befehl mit NI 5.x regelmäßig verwendet um Logfiles auszulesen und zu prüfen, ob die Installation über eine setup.exe erfolgreich war. Bin nicht sicher, ob ich das bei der enteo V6 schon mal gemacht habe, da gibt’s ja jetzt ExecuteEx mit Prüfung des Errorlevels…

                        Wenn’s der Sache dienlich ist könnte ich heute Abend aber auch mal ausprobieren, obs in der enteo V6 auch wirklich wirklich ganz sicher funkioniert wie in der V5.x. Ich sag dann nochmal bescheid.

                        Ciao
                          Klaus
                        • 9. Re: Fehler in If Abfrage (LineExists) ?
                          TorstenStreng Expert
                          Hallo Klaus,

                          ja das wäre nett wenn Du da nochmal schauen könntest!

                          Hier der lustige Lösungstext:

                          Incident Summary:
                          eScript "IF" command with condition "LineExists" does not work.

                          Resolution:
                          1. Verfied Enteo only allows the search of two seperate filetypes, one being an ini file and the other a cfg file.

                          Ähm....bezügl. ExecuteEx. Woher weißt denn welche Errorlevels so zurück gegeben werden? Sind die nicht immer unterschiedlich? Oder meldet ein z.B. ein MSI immer den gleichen wenn erfolgreich? Wie kriegt man die raus, vor allem bei nicht MSI Produkten?

                          Gruß
                          Torsten
                          • 10. Re: Fehler in If Abfrage (LineExists) ?
                            Klaus Salger Expert
                            Hallo Torsten,

                            hier der Beweis zum Thema LineExist:

                            22:51:23.429 2        ---->Starting installation of "LineExist-Test"
                            22:51:23.429 2        -> Set('Suchtext','*distribution contains the following files*')
                            22:51:23.429 1         RegValue 'ProgramFilesDir' resolved as 'C:\Program Files (x86)'
                            22:51:23.429 2        -> Set('Logfile','C:\Program Files (x86)\7-Zip\readme.txt')
                            22:51:23.429 1        Evaluating condition "LineExists('_Logfile_','_Suchtext_')"
                            22:51:23.429 0         Checking if *distribution contains the following files* exists in C:\Program Files (x86)\7-Zip\readme.txt
                            22:51:23.461 2        Condition TRUE  -> entering IF part

                            22:51:23.461 2        ->  MsgBox  *distribution contains the following files* in C:\Program Files (x86)\7-Zip\readme.txt gefunden
                            22:51:28.835 2        else - Skipping ELSE part
                            22:51:28.835 2        Skipping command : MsgBox


                            Wegen der Errorlevels - wenn "0" zurück gegeben wird kann man davon ausgehen, dass es alles OK ist.
                            Es gibt aber auch andere Error Codes, die dann z.B. sagen "Reboot nötig", das sind bei MS z.B. 3010, 3011, 1604 und 1641.
                            Im Endeffekt gilt aber Doku lesen und ausprobieren. Jeder Hersteller kann da sein eigenes Süppchen kochen.
                            Einige MSI Error Code findest Du z.B. hier: [URL="http://support.microsoft.com/?scid=kb%3Ben-us%3B304888&x=13&y=8"]http://support.microsoft.com/?scid=kb%3Ben-us%3B304888&x=13&y=8

                            Ciao
                              Klaus
                            • 11. Re: Fehler in If Abfrage (LineExists) ?
                              TorstenStreng Expert
                              Hi Klaus,

                              das wird immer besser. Ich hab mal, genau wie in Deinem Test, mit Set probiert. Der Pfad scheint dann zu stimmen aber die Auswertung funktioniert trotzdem nicht.

                              Test 1:

                              12:18:36.801 2        ---->Starting installation of "If Abfrage Test"
                              12:18:36.816 1         RegValue 'ProgramFilesDir' resolved as 'C:\Program Files (x86)'

                              12:18:36.832 2        -> Set('Logfile','C:\Program Files (x86)
                              etinst\NiLogs\AdbeRdrUpd912_all_incr.log')

                              12:18:36.847 2        -> Set('Suchtext','*Configuration completed successfully*')

                              12:18:36.863 1        Evaluating condition "LineExists('_Logfile_','_Suchtext_')"
                              12:18:36.879 0         Checking if *Configuration completed successfully* exists in C:\Program Files (x86)
                              etinst\NiLogs\AdbeRdrUpd912_all_incr.log
                              12:18:36.941 2        Condition FALSE  -> skipping IF part
                              12:18:36.957 2        Skipping command : ExitProcEx

                              Auszug aus dem MSI Logfile:

                              MSI (s) (DC:F0) [17:10:33:204]: Product: Adobe Reader 9.1.2 - Español - Update 'Adobe Reader 9.1.2 - CPSID_49166' installed successfully.

                              MSI (s) (DC:F0) [17:10:33:204]: Note: 1: 1728
                              MSI (s) (DC:F0) [17:10:33:204]: Producto: Adobe Reader 9.1.2 - Español -- Configuration completed successfully.

                              Der Eintrag ist also vorhanden!



                              Test 2:

                              11:56:31.209 2        ---->Starting installation of "If Abfrage Test"
                              11:56:31.209 1         RegValue 'ProgramFilesDir' resolved as 'C:\Program Files (x86)'

                              11:56:31.225 2        -> Set('Logfile','C:\Program Files (x86)
                              etinst\NiLogs\PSE450W2K3X64.log')

                              11:56:31.241 2        -> Set('Suchtext','*Installation operation completed successfully*')

                              11:56:31.256 1        Evaluating condition "LineExists('_Logfile_','_Suchtext_')"
                              11:56:31.272 0         Checking if *Installation operation completed successfully* exists in C:\Program Files (x86)
                              etinst\NiLogs\PSE450W2K3X64.log
                              11:56:31.522 2        Condition FALSE  -> skipping IF part
                              11:56:31.522 2        Skipping command : ExitProcEx

                              Auszug aus dem MSI Logfile:

                              MSI (s) (84:68) [16:25:57:058]: Note: 1: 1707
                              MSI (s) (84:68) [16:25:57:058]: Product: Citrix Presentation Server for Windows -- Installation operation completed successfully.

                              Verrückt oder?
                              T.
                              • 12. Re: Fehler in If Abfrage (LineExists) ?
                                Klaus Salger Expert
                                Hallo Torsten,

                                ist ja komisch, dass es mit der Logfile-Variablen funktioniert.

                                Dass Du die Zeile in Deinem Log nicht findest ist aber normal - MSI schreibt Logs in UNICODE und damit kann LineExist nix anfangen.

                                Wenn Du das MSI-Log überprüfen willst kannst Du es z.B. per VBS vorher in ANSI umwandeln. Ein entsprechendes VBS könnte ich bei Bedarf posten.

                                Ciao
                                  Klaus
                                • 13. Re: Fehler in If Abfrage (LineExists) ?
                                  TorstenStreng Expert
                                  Guten Morgen Klaus,

                                  das mit dem Umwandeln in ANSI ist mir zu aufwändig. Ich hab mich jetzt der guten alten "find.exe" bedient.

                                  Mir wurde der Incident wieder geschlossen mit folgender Aussage:

                                  Hello Thorsten,

                                  Even though you can place Wildcards for the path and allow for the searching of different files, by design the code only allows for two different methods of currently searching. If a non-supported file type is utilized the searched path will attempt to duplicate itself up to the searched file.

                                  Please see my testing below as it reveals the same problem.

                                  Test using non-supported File type. (Not Successful)

                                  1. Tested IF LineExists Statement.
                                  2. If Line Exists, then create a share on CHISV01 called LineExists.
                                  3. Select>> Prepare for distribution.
                                  4. Select>> Distribution Setup.
                                  5. Select>> Right Click on newly created Escript>>Execute Pilot Installation.
                                  6. Select>>XP01 for destination of Policy.
                                  7. Select>>Manage Users and Computers.
                                  8. Select>>XP01>>Right Click Execute Changes>>Check Ignore Maintenance Mode>>Ok.
                                  9. Script Executed. Generated Error:18:47:48.774 E******** Warning (Module:Main, Severity:0x03): C:\Program Files\Common Files\enteo\NiLogs\C:\Program Files
                                  etinst\NiLogs\eMMC_2.LOG contains an invalid path.

                                  Test using supported file type (Successful)

                                  10. Ran script against an INI file which again we only have to possible methods INI, and CFG
                                  11 .Test results are as follows: 19:00:50.585 1******* Evaluating condition "LineExists('_NiDir_\desktop.ini','[{5984FFE0-28D4-11CF-AE66-08002B2E1262}]')"
                                  19:00:50.585 0******* checking if [{5984FFE0-28D4-11CF-AE66-08002B2E1262}] exists in \\CHISV01\enteo$\desktop.ini
                                  19:00:50.585 1******* Network OS: Active Directory
                                  19:00:50.585 0******* using account SOLYS\administrator to access share
                                  19:00:50.679 2******* Condition TRUE******************* -> entering IF part
                                  19:00:50.679 0******* ExR status report is disabled for IfLineExistsTest
                                  19:00:50.679 2******* xniFPS: '{B49A2CB5-7186-4676-B0DB-E46E0B81E121}' is installed
                                  19:00:50.679 1******* FPSClnt.dll: --------------- FpsClientAnnounceFilePackageState interface called ---------------
                                  19:00:50.679 0******* FPSClnt.dll: Parameter:
                                  19:00:50.679 0******* FPSClnt.dll: File package Id : 958
                                  19:00:50.679 0******* FPSClnt.dll: Package revision: R1
                                  19:00:50.679 0******* FPSClnt.dll: Package in use* : no
                                  19:00:50.757 1******* FPSClnt.dll: --------------- FpsClientAnnounceFilePackageState finished ---------------

                                  My recommendation would be to turn in an enhancement request to allow for more supported file types.



                                  T.
                                  • 14. Re: Fehler in If Abfrage (LineExists) ?
                                    Klaus Salger Expert
                                    Morgen Torsten,

                                    hätte ja nicht gedacht, dass die Window find.exe so leistungsfähig ist, dass die sogar mit Unicode umgehen kann, das Teil kann doch sonst so gut wie nix (verglichen z.B. mit grep)
                                    Naja, damit ist das akute Problem also erledigt.

                                    An die Adresse von FrontRange wären dann 2 Dinge zu sagen:
                                    1. Bitte den Bug bei LineExist fixen.
                                    2. Bitte dem LineExist gleich auch Unicode beibringen.
                                    Und als Bonuspunkt: Bitte prüfen, ob's beim Support evtl. noch Verbesserungspotential gibt

                                    Ciao
                                      Klaus
                                    1 2 Previous Next