getOutStreamFromSection findet Sektion nicht in Funktion

luca
Beiträge: 15
Registriert: 24 Aug 2015, 16:07

getOutStreamFromSection findet Sektion nicht in Funktion

Beitragvon luca » 25 Apr 2018, 11:03

Folgende Funktion wurde in der Datei "library.opsiscript" definiert:

Code: Alles auswählen

DefFunc getDateTime(val $NONE$ : string) : stringlist
    DefVar $output$

    Set $output$ = takeString(0, getOutStreamFromSection("DosBatch_getDate"))
    Set $result$ = addlisttolist($result$, splitString($output$, "."))

    Set $output$ = takeString(0, getOutStreamFromSection("DosBatch_getTime"))
    Set $result$ = addlisttolist($result$, splitString($output$, ":"))

    [DosBatch_getDate]
    date /t

    [DosBatch_getTime]
    time /t
endfunc


Wenn ich diese Funktion aufrufe:

Code: Alles auswählen

[Actions]
encoding=utf8
requiredWinstVersion >= "4.12.0.0"
SetLogLevel=8

importLib "library.opsiscript"

DefStringlist $datetime$
Set $datetime$ = getDateTime("")


erhalte ich folgenden Fehler

Code: Alles auswählen

[6] [Apr 25 10:47:10:018] Added defined function:: getdatetime to the known functions
[7] [Apr 25 10:47:10:020]
[7] [Apr 25 10:47:10:024] (created string list $datetime$)
[6] [Apr 25 10:47:10:027] Set  $datetime$ = getDateTime("")
[8] [Apr 25 10:47:10:030] We are coming from function with index: -1 (-1 = base)
[8] [Apr 25 10:47:10:032] We enter the defined function: getdatetime with 13 lines. inDefFuncLevel: 1
[8] [Apr 25 10:47:10:034] Paramnr: 0 is : ""
[8] [Apr 25 10:47:10:036] Paramnr: 0 is the string:
[8] [Apr 25 10:47:10:040] Defined local string var: $output$ in local function: getdatetime
[6] [Apr 25 10:47:10:043] Set  $output$ = takeString(0, getOutStreamFromSection("DosBatch_getDate"))
[2] [Apr 25 10:47:10:047] Syntax Error in Section:  (Command in line 3 origin: C:\...\Desktop\template\CLIENT_DATA\test.opsiscript line: 4): $output$ = takeString(0, getOutStreamFromSection("DosBatch_getDate")) -> Section "DosBatch_getDate" not found
[8] [Apr 25 10:47:10:049] We leave the defined function: getdatetime ; inDefFuncLevel: 0
[8] [Apr 25 10:47:10:052]     retrieving strings from getDateTime
[8] [Apr 25 10:47:10:055]         
[7] [Apr 25 10:47:10:058]   The value of the variable "$datetime$" is now:[


Derselbe Fehler kommt auch, wenn ich die Sektion umbenne. Ich habe schon diverse Groß- und Kleinschreibungen versucht und auch aus "dosbatch" ein "shellinanicon" gemacht, alles ohne Erfolg.

Interessanter weise passiert außerdem folgendes:
Wenn ich nur die Zeile

Code: Alles auswählen

Set $datetime$ = getDateTime("")
auskommentiere ist alles Fehlerlos, aber wenn ich zusätzlich die Zeile

Code: Alles auswählen

DefStringlist $datetime$
auskommentiere, dann erhalte ich folgenden Fehler:

Code: Alles auswählen

[2] [Apr 25 10:58:25:690] Found DefFunc without EndFunc
[2] [Apr 25 10:58:25:692] Syntax Error in Section: Actions (Command in line 22 origin: library.opsiscript Line: 16): time -> Found DefFunc without EndFunc


Zeile 16 ist die letzte Zeile in der Funktion.

Benutzeravatar
d.oertel
Beiträge: 3242
Registriert: 04 Jun 2008, 14:27

Re: getOutStreamFromSection findet Sektion nicht in Funktion

Beitragvon d.oertel » 26 Apr 2018, 14:06

Hi,

Hallo allerseits,

Bitte mal den hier probieren und Rückmeldung geben:
https://download.uib.de/opsi4.0/experimental/opsi-v407/products/localboot/opsi-winst_4.12.0.17-1.opsi
die Doku hier:
https://download.uib.de/opsi4.0/experimental/opsi-v407/doc/opsi-winst-manual-de.pdf
Beispielefinden sich im allg. Test und Beispielprodukt:
https://download.uib.de/opsi4.0/experimental/opsi-v407/products/localboot/opsi-script-test_4.12.0.17-1.opsi

Code: Alles auswählen

changelog:
=============================
opsi-winst/opsi-script (4.12.0.17) stable; urgency=low

  * osparser: processcall: log Executing on LLNotice
  * new unit osparserhelper in common (Skip / getword /  ...)
  * osdefinedfunctions: int new local string vars
  * osdefinedfunctions: isVisibleLocalVar check for empty varname
  * osparser: catch powershellCall at Linux
  * OsDefinedFunction.parseCallParameter: fix handling parameters with ')'

-- Detlef Oertel <d.oertel@uib.de>  Fri, 13 Apr 2018:15:00:00 +0200

opsi-script-test (4.12.0.16-1) stable; urgency=low

  * ExecWith_powershell: added trap { write-output $_ ; exit 1 }
  * ExecWith_powershell: added exit $LASTEXITCODE
  * fuction with no parameters
  * fuction with no (void) result
  * using isConfidential to test:
    ** SetConfidential
    ** asConfidential
    ** splitStringOnWhiteSpace
    ** splitString
  * asConfidential
  * upper(<str>)
  * lower(str)
  * RegKeyExists
  * RegVarExists
  * %opsiapplog%
  * %opsidata%
  * getIndexFromListByContaining
  * new function : getSubListByMatch(<search string>, <target list>) :stringlist
  * new function : getSubListByMatch(<search list>, <target list>) :stringlist
  * new function : getSubListByContaining(<search string>, <target list>) :stringlist
  * new function : getSubListByContaining(<search list>, <target list>) :stringlist
  * new function : getSubListByKey(<search string>, <target list>) :stringlist
  * new function : getSubListByKey(<search list>, <target list>) :stringlist
  * new function : getKeyList(<list>) :stringlist
  * getregistryvalue(<keystr>, <varstr> [, <access str>]) : string
  * powershellCall

-- detlef oertel <d.oertel@uib.de>  Tue,  27 Mar 2018 15:00:00 +0200

=============================


gruß
d.oertel
opsi support - uib gmbh

For productive opsi installations we recommend support contracts.
http://www.uib.de
http://www.opsi.org

luca
Beiträge: 15
Registriert: 24 Aug 2015, 16:07

Re: getOutStreamFromSection findet Sektion nicht in Funktion

Beitragvon luca » 27 Apr 2018, 08:44

Hallo und danke für das schnelle Update.

Leider ist mein Problem noch nicht behoben. Deklaration ohne Parameter und ohne Rückgabewert (void) funktioniert jetzt, aber ich bekomme denselben Fehler bezüglich der nicht gefundenen Sektion.

luca
Beiträge: 15
Registriert: 24 Aug 2015, 16:07

Re: getOutStreamFromSection findet Sektion nicht in Funktion

Beitragvon luca » 07 Mai 2018, 12:58

Ich habe den Fehler mit den nicht erkannten Sections identifizieren können. Er findet die section erfolgreich, wenn die Funktionsdefinition und der Aufruf in derselben Datei sind. Nicht jedoch, wenn ich die Funktion in einer Library definiere, die ich dann über "importLib" importiere.

Das macht Libraries leider relativ nutzlos solange dieser Bug besteht.

Benutzeravatar
d.oertel
Beiträge: 3242
Registriert: 04 Jun 2008, 14:27

Re: getOutStreamFromSection findet Sektion nicht in Funktion

Beitragvon d.oertel » 07 Mai 2018, 16:54

Hi,

ich kann das Problem hier nicht nachvollziehen.

Bitte die Testscripte incl. libraries per zip an mich (d.oertel(at)uib.de) senden.

gruß
d.oertel
opsi support - uib gmbh

For productive opsi installations we recommend support contracts.
http://www.uib.de
http://www.opsi.org

larsg
Beiträge: 185
Registriert: 16 Dez 2014, 18:06

Re: getOutStreamFromSection findet Sektion nicht in Funktion

Beitragvon larsg » 08 Mai 2018, 09:21

Ich habe exakt den gleichen Fehler.

Sektionen in Funktionen werden innerhalb der Funktion nicht mittels GetOutStreamFromSektion gefunden, sofern die Funktion via ImportLib importiert wird.
Wird die Funktion im aufrufenden Skript direkt definiert, funktioniert es.

Mail mit Beispiel ist raus.

Benutzeravatar
d.oertel
Beiträge: 3242
Registriert: 04 Jun 2008, 14:27

Re: getOutStreamFromSection findet Sektion nicht in Funktion

Beitragvon d.oertel » 09 Mai 2018, 16:31

opsi support - uib gmbh

For productive opsi installations we recommend support contracts.
http://www.uib.de
http://www.opsi.org

luca
Beiträge: 15
Registriert: 24 Aug 2015, 16:07

Re: getOutStreamFromSection findet Sektion nicht in Funktion

Beitragvon luca » 11 Mai 2018, 08:58

Die Sektion wird jetzt erfolgreich gefunden. Danke.