Software installiern bei Logon

  • Hallo!

    Um Software automatisch verteilen zu können, habe ich folgendes Programm geschrieben, dass auf den Rechnern nach der Anmeldung ausgeführt wird.
    Die Logon-Scripts werden über Samba per Batch aufgerufen.

    So sollte es laufen:
    Das Programm liest aus einer ini-Datei das Laufwerk und den Behfehlsaufruf aus.
    Danach findet ein Abgleich des Rechnernamens statt. Steht der Rechnername bereits in der ini-Datei, soll keine Installation erfolgen. Fehlt der Rechnername, soll die angegebene Software installiert werden und danach der Rechnername in die ini-Datei eingetragen werden.

    Alles läuft über das Netzwerk, sprich alle Daten liegen auf Servern, die benötigte Freigabe ist als Laufwerk verbunden.

    [autoit]

    $var1 = IniReadSection("install.ini", "Computer")
    $var2 = IniReadSection("install.ini", "Options")
    If @error Then
    Exit
    Else
    For $a = 1 To $var2[0][0]
    If $var2[$a][0] == "Pfad" Then
    $p=$var2[$a][1]
    EndIf
    If $var2[$a][0] == "Command" Then
    $c=$var2[$a][1]
    EndIf
    Next

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

    For $i = 1 To $var1[0][0]
    $x=0
    If $var1[$i][1] == @ComputerName Then
    $x=$x+1
    EndIf
    Next

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

    if $x <>1 Then
    RunAsWait("admin", @ComputerName, "password", 0, @ComSpec & ' /c ' & $p & $c, "", @SW_HIDE)
    IniWrite("install.ini", "Computer", @ComputerName, @ComputerName)
    EndIf
    Exit
    EndIf

    [/autoit]

    Problem ist nun, dass der Abgleich der Rechnernamen anscheinend nicht richtig funktioniert. Jedenfalls konnte ich beobachten, dass das Programm die Software installiert, obwohl der Rechnername bereits in der ini vorhanden war.

    Hier noch der Aufbau der ini-Datei:

    Code
    ;Einstellungen zur Installierenden Software.
    ;Der Insatllationsbefehl wird aus Pfad und Command zusammengesetzt, daher immer z.B. den abschließenden \ mit angeben.
    [Options]
    Pfad=
    Command=msiexec.exe /i \\server\adobe_reader\adobe910\AcroRead.msi TRANSFORMS=" \\server\adobe_reader\adobe910\adobe.mst" /qn
    
    
    ;Auf diesen Rechnern wurde das Script bereits ausgeführt
    [Computer]
    Computer1=Computer1

    Was könnte das Problem sein? Wer kann helfen?

    Danke.

    • Offizieller Beitrag

    Du setzt eine Zählvariable, die die nicht in der INI enthaltenen Rechner zählt ($x=0), und wenn sie erhöht wurde startest du die Installation.
    Beim Vergleich auf diese Variable prüfst du aber: if $x <>1 (statt 0)
    Somit wird immer dann installiert, wenn alle Rechner in der INI stehen. Und nur wenn ein neuer Rechnername in der INI ist, wird nicht installiert. ;)

  • Ich denke, ich habe zwei Fehler gemacht.

    Zum einen Vergleiche ich mit 1 statt mit 0 und zum anderen setzte ich in der Schleife $x immer wieder auf 0. Wenn jetzt also auf dem Rechner breits die Installation gelaufen war, der Rechner aber nicht an letzter Stelle der ini stand, wurde $x immer wieder auf 0 gesetzt, was zur Folge hatte, dass nochmals installiert wurde.

    Hier nun die abgeänderte Fassung:

    [autoit]

    $var1 = IniReadSection("install.ini", "Computer")
    $var2 = IniReadSection("install.ini", "Options")
    If @error Then
    Exit
    Else
    For $a = 1 To $var2[0][0]
    If $var2[$a][0] == "Pfad" Then
    $p=$var2[$a][1]
    EndIf
    If $var2[$a][0] == "Command" Then
    $c=$var2[$a][1]
    EndIf
    Next

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

    $x = 0
    For $i = 1 To $var1[0][0]
    If $var1[$i][1] == @ComputerName Then
    $x=$x+1
    EndIf
    Next

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

    if $x == 0 Then
    RunAsWait("admin", @ComputerName, "password", 0, @ComSpec & ' /c ' & $p & $c, "", @SW_HIDE)
    IniWrite("install.ini", "Computer", @ComputerName, @ComputerName)
    EndIf
    Exit
    EndIf

    [/autoit]