Beipsiel-Skript:
Code: Alles auswählen
[actions]
setLogLevel=7
defVar $path$
defVar $java_home$
;-------------------------------------------------------------------------
;DefFunc identity(val $ident$:string) : string
;-------------------------------------------------------------------------
; set $result$ = $ident$
;EndFunc
;-------------------------------------------------------------------------
DefFunc removePath(ref $fullPaths$:string, ref $pathToRemove$:string): string
;-------------------------------------------------------------------------
DefVar $logLvl$
DefStringList $pathList$
set $logLvl$=getLoglevel
setLogLevel=0
Set $pathList$ = splitString($fullPaths$, ";")
Set $pathList$ = removeFromListByMatch($pathToRemove$,$pathList$)
Set $pathList$ = removeFromListByMatch("", $pathList$)
Set $result$ = composeString($pathList$, ";")
setLogLevel=$logLvl$
EndFunc
;-------------------------------------------------------------------------
DefFunc addPath(ref $fullPaths$:string, ref $pathToAdd$:string): string
;-------------------------------------------------------------------------
DefVar $logLvl$
DefStringList $pathList$
set $logLvl$=getLoglevel
setLogLevel=6
DefVar $found$
Set $pathList$ = splitString($fullPaths$, ";")
Set $pathList$ = removeFromListByMatch("", $pathList$)
set $found$="false"
; for %p% in $pathList$ do sub_compare_path
if ($found$ = "true")
comment "Path already contains [" + $pathToAdd$ + "]"
set $result$ = $path$
else
comment "Appending to path: [" + $pathToAdd$ + "]"
Set $pathList$ = addToList($pathList$, $pathToAdd$)
Set $result$ = composeString($pathList$, ";")
endif
setLogLevel=$logLvl$
[sub_compare_path]
if ("%p%" = $pathToAdd$)
set $found$ = "true"
endif
EndFunc
;----------
; MAIN
;----------
Set $path$ = EnvVar("PATH")
Set $java_home$ = "C:\Applic.64\javavm\bin"
Set $path$ = removePath($path$, $java_home$)
Set $path$ = addPath($path$, $java_home$)
Mit der im Beispiel auskommentierten Funktion identity scheitert der Aufruf der drauffolgenden Funktion removePath.
Die Fehlermeldung (verkürzt):
Code: Alles auswählen
[6] [Mrz 23 16:38:07:796] Set $path$ = removePath($path$, $java_home$)
[7] [Mrz 23 16:38:07:798]
[7] [Mrz 23 16:38:07:800] (created string list $pathList$)
[6] [Mrz 23 16:38:07:804] Set $logLvl$=getLoglevel
[6] [Mrz 23 16:38:07:807] The value of the variable "$logLvl$" is now: "7"
[6] [Mrz 23 16:38:07:810] LogLevel was 7
[2] [Mrz 23 16:38:07:813] Syntax Error in Section: (Command in line 6 origin: C:\tmp\winst_snippet_3.opsiscript line: 7): $pathList$ = splitString($fullPaths$, ";") -> $fullPaths$, ";") illegal String Expressionstr
Es scheint also, als liesse sich die erste definiert Funktion nicht ohne Fehler aufrufen.
Fehler 2
Mit der nicht verwendeten identity-Funktion als "Opfer" lassen sich also removePath und addPath verwenden.
Hier wird nun jedoch die doppelt vorhandene lokale Variable $logLvl$ zum Stolperstein:
Code: Alles auswählen
[6] [Mrz 23 16:36:47:646] Set $path$ = addPath($path$, $java_home$)
[2] [Mrz 23 16:36:47:649] Syntax Error in Section: (Command in line 2 origin: C:\tmp\winst_snippet_3.opsiscript line: 3): $logLvl$ -> name is already in use
[6] [Mrz 23 16:36:47:651] The value of the variable "$path$" is now: ""
Viele Grüsse,
Jens