Command Line Parameters - übergabe von Variablen

  • Hi Leute, ;)
    Ich brauch mal eure Hilfe !

    wie kann ich einer EXE unterschiedliche Parameter mitgeben
    z.B. logon.exe -gGruppe1 -gGruppe2 ...... (die gruppe 1 kann zb. Mitglieder oder Domänen-User oder was auch immer ..... heissen, bei der gruppe xy genauso .....)

    mein Ansatz wär so:

    Spoiler anzeigen
    [autoit]

    If $CmdLine[0] > 0 Then
    Select
    Case $CmdLine[1] = "-g" & $logongroup1 And $CmdLine[2] = "-g" & $logongroup2 And $CmdLine[3] = "-g" & $logongroup3 And $CmdLine[4] = "-g" & $logongroup4
    MsgBox(0, '', "Parameter p")
    Case $CmdLine[1] = "-g" & $logongroup1 And $CmdLine[2] = "-g" & $logongroup2 And $CmdLine[3] = "-g" & $logongroup3
    MsgBox(0, '', "Parameter q")
    Case $CmdLine[1] = "-g" & $logongroup1 And $CmdLine[2] = "-g" & $logongroup2
    MsgBox(0, '', "Parameter p")
    Case $CmdLine[1] = "-g" & $logongroup1
    MsgBox(0, '', "Parameter p")
    Case Else
    MsgBox(0, '', "Falscher Parameter")
    EndSelect
    Else
    MsgBox(0, '', "Kein Parameter")
    EndIf

    [/autoit]

    lieg ich da richtig damit ?

    danke für eure hilfe ....


    lg
    TOM :)

  • Also wir brauchen:

    eine Netlogon.exe (keine VBS,kein Bat, kein cmd)

    diese Netlogon.exe soll automatisch alles wichtige aus dem AD auslesen und umsetzen.
    Ok das weis ich schon wie es geht.

    Was ich aber jetzt brauche ist:

    Ich will der Netlogon.exe beibringen das ich per Parameter noch eine "AD-Gruppe" zusätzlich zu den ausgelesenen "AD-Gruppen" hinzufügen kann.

    also : USER1 ist in der Finanzabteilung : d.H. er ist in den Gruppen Finanz, Telebanking, ....
    dieser USER1 soll jetzt aber kurzfristig stundenweise aber in der Personalabteilung aushelfen also braucht er für die Stunde einen zugang zu der gruppe PERS und Sekretaria.

    (es geht z.b: bei den gruppen PERS / Sekretariat um reine LW zuordnungen / NW-Shares)

    verstehst du was ich meine ?

    Netlogon.EXE [<Parameter><Variable>]

    lg
    TOM

  • Prinzipiell funktioniert es so, wie du gepostet hast, aber: Wenn du z.B. $CmdLine[3] abfragst und nur 2 Parameter hast, dann ist das Array zu klein und du bekommst einen Fehler, also vielleicht vorher mit $CmdLine[0] überprüfen wieviele Parameter überhaupt mitgegeben wurden und nicht nur ob mehr als ein Parameter angegeben wurde.

  • Ich löse das mit der Hilfe von variablen Parametern.
    Der aufruf kann wie in diesem Beispiel sein:

    Example: /name="LAN-Verbindung" /addr="192.168.0.100" /mask="255.255.255.0" /gateway="192.168.0.1" /dns="192.168.0.1"

    Skript:

    Spoiler anzeigen
    [autoit]


    ;===============================================================================
    ; Function Name: _ParseParameterLine($CMDString)
    ; Description:: Parses a CMD-String to Parameters with Values
    ;
    ; Parameter(s): $CMDString -> String to parse
    ; Requirement(s): ?
    ;
    ; Return Value(s): Error: o and @error = StringRegExp-Error
    ; Success: 2 Dimensional Array:
    ; $array[$i][0] : Parameter includind value
    ; $array[$i][1] : Parameter
    ; $array[$i][2] : Value with quotation marks (only if value has quotaion marks)
    ; $array[$i][3] : Value without quotation marks
    ;
    ; Author(s): Prog@ndy
    ; Modified by Patric Pendelin
    ;
    ; Basis: http://regexlib.com/REDetails.aspx?regexp_id=1220
    ;===============================================================================
    Func _ParseParameterLine($CMDString)
    Local $y, $j, $i, $entry
    Local $x = StringRegExp($CMDString, '(?:\s*)(?<=[-|/])(?<name>\w*)(?:(?:[:|=](?:("(?<value1>.*?)(?<!\\)")|(?<value>[\w\d|\.\-]*)))|\w*?)', 4)
    If @error Then Return SetError(@error, 0, 0)
    Local $ResultArray[UBound($x)][4]
    For $i = 0 To UBound($x) - 1
    $entry = $x[$i]
    For $y = 0 To UBound($entry) - 1
    $j = $y
    If $y > 3 Then $j = 3
    $ResultArray[$i][$j] = $entry[$y]
    Next
    Next
    Return $ResultArray
    EndFunc ;==>_ParseParameterLine

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit]


    Jeder Parameter kann so in beliebiger Reinfolge übergeben werden (oder auch weggelassen werden)
    Die Abfrage (Auswertung) habe ich über eine "Select ... Case" Schleife gelöst
    Also:

    Spoiler anzeigen
    [autoit]


    For $i = 0 To UBound($av_Parameter) - 1
    Select
    Case $av_Parameter[$i][1] = "name"
    "mach etwas!"
    Case $av_Parameter[$i][1] = "source"
    "mach etwas!"
    usw.
    EndSelect
    Next

    [/autoit]


    Ich hoffe das bringt dich ein wenig weiter.