For-Schleife mit Aufruf eigener Funktion mit Parameterübergabe -> Parameter illegal String?

Antworten
IvicaE
Beiträge: 136
Registriert: 13 Sep 2016, 14:10

For-Schleife mit Aufruf eigener Funktion mit Parameterübergabe -> Parameter illegal String?

Beitrag von IvicaE »

Hallo Leute,

ich brauche wieder einmal mehr eure Unterstützung.

Ich möchte mir das Leben im OPSI-Scripten etwas einfacher machen und mehr mit Schleifen, eigenen Funktionen und Parameter arbeiten.

Ich habe ein OPSI-Paket welches mir mehrere Parameter anbietet.
Parameter 1 und 2 sind ein muss, Parameter 3-7 sind Pfadangaben zu ausführbaren Programmen. Diese muss mindestens 1 Angabe haben, kann aber bis 5 enthalten.

Die Properties für die Pfadangabe haben alle den selben Aufbau: prog1, prog2,..,prog5

So, ich würde gerne in diesem Fall eine For-Schleife erstellen welche dann eine eigene Sub aufruft und den Schleifenzähler übergibt.
In dieser 'Funktion (also die 'Sub') will ich prüfen ob ein Property gesetzt ist und wenn ja in eine String-Liste aufnehmen (global deklariert) welche ich später dann 'weiterverwenden will.

So, nun ich habe eine For-Schleife und ich habe eine eigene Sub welche ich in der Schleife aufrufe und den Schleifenzähler als Parameter übergebe.

Code: Alles auswählen

for %s% = "1" to "5" do Sub_getPropertyPathValue %s%
In der Sub selber habe ich folgendes:

Code: Alles auswählen

[Sub_getPropertyPathValue]
set $tmpVar$ = "prog_"+%1
comment $tmpVar$
Auch habe ich versucht auch nur den 1. PArameter auszugeben mit comment %1 oder auch Message %1.
Leider bekommei ch bei allen Versuchen immer ein
illegal String ExpressionStr
bzw. im konkreten Fall:
$tmpVar$ = "prog_1"+%1 -> %1 illegal String Expressionstr
Ich bin ein alter Programmierer und fühle mich in so einigen Sprachen recht wohl und zu Hause.
Aber hier stehe ich noch auf sehr wackeligen Beinen und weiß eigentlich sozusagen nichts.

Parameter an Funktionen können doch mittlerweile übergeben werden, richtig? Parameter ansprechen tut man wie in einer Batchdatei mit der Nummerierung incl. dem vorhergehenden %-Zeichen, richtig?
Winst kennt nicht wirklich Integervariablen was mir in meinem Vorhaben ja recht Wurst sein kann -> Die Zahl im Parameter müsste demnach ja bereits ein String sein. Und wenn nicht, finde ich im Handbuch leider nichts zu Umwandlungen von Zahlen zu Strings.
Wieso meckert Winst an dieser Stelle und was passt ihm hier nicht wirklich?

Nach der Lösung dieses Problemes (hoffentlich) komme ich ja zu dem Punkt das ich die Properties in dieser Sub auslesen möchte. Wird das Vorhaben so überhaupt gehen oder übesehe ich vielleicht noch was grundlegendes?

Jedenfalls schon einmal im Voraus danke für eure Hilfe oder zumindest das Lesen bis hierher ;)
IvicaE
Beiträge: 136
Registriert: 13 Sep 2016, 14:10

Re: For-Schleife mit Aufruf eigener Funktion mit Parameterübergabe -> Parameter illegal String?

Beitrag von IvicaE »

Natürlich könnte es sein, ist sogar wahrscheinlich, das ich einfach nur blöd bin, aber ich finde auch in der Winst-Anleitung nichts zu diesem Thema.

Ich finde nicht einmal die Parameterübergabe an Sub-Funktionen außer die von der Umgebung vorgesehenen PArameter wie 32 / 664 / Sysnative u.ä.

Daher meine Frage: geht das überhaupt?
Irgendwo (Internet, Forum, sonst wo) habe ich bei irgendwem gesehen daß Parameter übergeben wurden und daß man auf diese wie in der Batch-Datei (%1, %2, usw.) zugreifen kann in der Sub-Funktion.
Irre ich mich in dieser Sache?

Wenn ich mich irre:
Muss ich über eine globale Variable gehen wie auch schon in älteren Forenbeiträgen gefunden zu älteren OPSI-Versionen?

Wenn ich mich nicht irre:
Dann bekomme ich die Syntax wohl nicht wirklich hin..

Code: Alles auswählen

sub_test "Hello world"

[sub_test]
comment %1
Ergebnis: Leere Zeile zwischen 'Start Sub' und 'End Sub' in der sub_test

Mit einer globalen Variable geht das schon, aber wenn es per Parameter funktionieren würde wäre das noch besser.
Benutzeravatar
n.wenselowski
Ex-uib-Team
Beiträge: 3194
Registriert: 04 Apr 2013, 12:15

Re: For-Schleife mit Aufruf eigener Funktion mit Parameterübergabe -> Parameter illegal String?

Beitrag von n.wenselowski »

Hi,

es läuft im Winst ein wenig anders.
Hier definierst du deine Variablen und greifst in der Sub einfach darauf zu - eine Übergabe muss nicht stattfinden, gibt es so aktuell noch gar nicht.

Dein erstes Beispiel kannst du mal so probieren:

Code: Alles auswählen

for %s% = "1" to "5" do Sub_getPropertyPathValue

Code: Alles auswählen

[Sub_getPropertyPathValue]
set $tmpVar$ = "prog_"+%s%
comment $tmpVar$
Ich hoffe das hilft dir weiter!

Gruß

Niko

Code: Alles auswählen

import OPSI
Benutzeravatar
malte.gerth
Beiträge: 9
Registriert: 29 Mai 2025, 22:15

Re: For-Schleife mit Aufruf eigener Funktion mit Parameterübergabe -> Parameter illegal String?

Beitrag von malte.gerth »

Hallo,

ich habe hier genau das selbe Problem.

Code: Alles auswählen

; detect the device ID by driver description
; ------------------------------------------
if ($DeviceID$ = "NONE")
    for %deviceToCheck% = "1" to "9" do Sub_set_device_id_by_driver_description
    if ($DeviceID$ = "NONE")
        isFatalError "Could not detect dynamic device ID for chipset '" + $WantedChipsetName$ + "' available"
    endif
endif

Code: Alles auswählen

[Sub_set_device_id_by_driver_description]
    Set $DeviceRegistryKey$ = "[HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Class\{4D36E972-E325-11CE-BFC1-08002BE10318}\000" + %deviceToCheck%
    Set $DeviceRegistryKey$ = $DeviceRegistryKey$ + "] DriverDesc"
    Set $ChipsetName$ = GetRegistryStringValue64($DeviceRegistryKey$)
    if ($ChipsetName$ = $WantedChipsetName$)
        Set $DeviceID$ = %deviceToCheck%
    endif

Code: Alles auswählen

Syntax Error in Section: Sub_set_device_id_by_driver_description (Command in line 355 in section: Sub_set_device_id_by_driver_description; file: sections.opsiinc; section start at line: 75; origin: sections.opsiinc; line: 76): $DeviceRegistryKey$ = "[HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Class\{4D36E972-E325-11CE-BFC1-08002BE10318}\" + 1 + "] DriverDesc" -> "1 + "] DriverDesc"" is an illegal String Expressionstr

Syntax Error found in line: >Set $DeviceRegistryKey$ = "[HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Class\{4D36E972-E325-11CE-BFC1-08002BE10318}\" + 1 + "] DriverDesc"<
Wenn man schaut hat der ursprüngliche Autor auch genau den selben Fall.
Es geht nicht um die Übergabe des Parameters, sondern die Fehlermeldung beim Zusammenbauen des Strings.
Benutzeravatar
j.schneider
uib-Team
Beiträge: 2050
Registriert: 29 Mai 2008, 15:14

Re: For-Schleife mit Aufruf eigener Funktion mit Parameterübergabe -> Parameter illegal String?

Beitrag von j.schneider »

Hallo,

Problem ist hierbei die String-Verknüpfung von %deviceToCheck%.
So sollte es funktionieren:

Code: Alles auswählen

[Sub_set_device_id_by_driver_description]
    Set $DeviceRegistryKey$ = "[HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Class\{4D36E972-E325-11CE-BFC1-08002BE10318}\000%deviceToCheck%"
    Set $DeviceRegistryKey$ = $DeviceRegistryKey$ + "] DriverDesc"
    Set $ChipsetName$ = GetRegistryStringValue64($DeviceRegistryKey$)
    if ($ChipsetName$ = $WantedChipsetName$)
        Set $DeviceID$ = "%deviceToCheck%"
    endif
Siehe:
https://docs.opsi.org/opsi-docs-de/4.3/ ... -iteration


Vielen Dank für die Nutzung von opsi. Im Forum ist unser Support begrenzt.

Für den professionellen Einsatz und individuelle Beratung empfehlen wir einen Support-Vertrag und eine Schulung.
Gerne informieren wir Sie zu unserem Angebot.

uib GmbH
Telefon: +49 6131 27561 0
E-Mail: sales@uib.de


Antworten