Tabellenablauf mit Autoit

  • Hallo,

    ich bin neu hier und arbeite seit letzter Woche teils beruflich und privat mit Autoit.

    Könnt ihr mir bei folgendem Problem helfen:

    Man muss auf, sagen wir ca. 50 PC jeweils eine anderes Script automatisch ausführen.

    Ich habe schon ein neutrales Scipt geschrieben, welches dies auf einem PC macht, dies Script greift auf eine Txt-Datei zu (in dieser steht nur der PC-Name).

    Nun meine Frage wie kann ich eine zweite Spalte (Scriptname) auslesen, so das das Script zum jeweilen PC das dazugehörige Script ausführt?

    Für manche alten Hasen hier wird dies sicherlich sehr einfach sein.

    Gruss

    Maddown

  • Hallo maddown,

    willst du nicht leiber eine INI Datei nehmen? Ich mach so was ähnliches damit. In der INI lege ich für jeden PC einen Eintrag an und darunter die Scripte, Einstellungen usw. die zutreffend sind. Neue PCs schreiben selber einen Default Eintrag in die INI und ich kann ggf. Einstellungen ergänzen.

    Ist viel leichter als in einer Textdatei das alles zu handeln.

    Gruß
    s.koni

  • Schau dir mal folgende befehle an:
    IniReadSectionNames
    IniReadSection
    IniRead
    IniWrite

    Ein Ini-Aufbau wäre dann z.B.:

    Code
    [ErsterPC]
    1=test.au3
    2=test.exe
    
    
    [ZweiterPC]
    1=abc.exe
    2=xyz.au3
  • also am einfachsten wäre es so

    txtdatei Inhalt
    Pc1|Programm
    Pc2|Programm

    Spoiler anzeigen
    [autoit]


    $File = "File Pfad"

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

    $count = _FileCountLines($File)

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

    For $line = 1 To $count Step +1
    $Befehl = StringSplit(FileReadLine($File,$line),"|")
    Next

    [/autoit]

    so nun ist $Befehl[0] der PC und $Befehl[1] das programm um nun den string noch zu entpacken(string to befehl) nimmst du
    Run(Execute($Befehl[1]))

    damit müsste es gehen

  • Naja, mit meiner Ini ginge es so:

    [autoit]

    $sINI = @ScriptDir & '\test.ini'
    $aComputers = IniReadSectionNames($sINI)
    For $i = 1 TO $aComputers[0]
    $sPC = $aComputers[$i]
    $aBefehle = IniReadSection($sINI, $sPC)
    For $i = 1 To $aBefehle[0][0]
    MsgBox(0, $sPC, $aBefehle[$i][1])
    Next
    Next

    [/autoit]

    @alexanderschill: Dein Code ist nicht wirklich performant. Das ist schneller:

    Spoiler anzeigen
    [autoit]

    $File = "File Pfad"

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

    $hFile = FileOpen($File, 0)
    While 1
    $line = FileReadLine($hFile)
    If @error <> 0 Then ExitLoop ; Wenn keine Zeilen mehr da sind beenden
    $Befehl = StringSplit($line,"|")
    WEnd
    FileClose($hFile)

    [/autoit]
  • Hallo,

    erstmal vielen Dank für die rasche und gute Unterstützung von progandy und alexander, nur hänge ich einfach mit meinem Script.

    Daher mein Script anbei:

    Sag ja bin Anfänger vielleicht könntet ihr mir damit weiterhelfen. ?(

    Danke im voraus für die MÜHE!!!

    #cs
    ;Standardskript für das kopieren der neuen Bilder und Reg-Keys sowie der S-Werte von einem Netzlaufwerk auf mehrere ABC-PC`2 mit jeweils anderem Script.
    #ce

    ;Feste Variablen
    ;----------------------------------------------------------------------------------------------
    $datei = "X:\allgemeine_scripts\ProgrammABC\ABCupdate.txt"

    $dirstart1 = "X:\allgemeine_scripts\ProgrammABC\Bilder\*.*"
    $dirstart2 = "X:\allgemeine_scripts\ProgrammABC\RegKeys\*.*"
    ;$dirstart3 = "X:\allgemeine_scripts\ProgrammABC\ABCupdate.txt"
    $dirstart4 = "\C$\Programme\ProgrammABC\Profiles\"
    $dirstart5 = "X:\allgemeine_scripts\ProgrammABC\Scripts\*.exe"

    $dirziel1 = "\C$\Dokumente und Einstellungen\user1\Anwendungsdaten\ProgrammABC\Profiles"
    $dirziel2 = "\C$\Programme\Scripts\Test\"
    $dirziel3 = "\C$\Dokumente und Einstellungen\user1\Startmenü\Programme\Autostart\"

    $kill = "\C$\Programme\Scripts\taskkill.cmd"
    $linkexe = ""
    $pcname =

    ;Dieses Script überprüft, ob auf den Rechnern ein Verzeichnis vorhanden ist
    ;Falls ja werden die Dateine in das jeweile Verzeichnis lokal auf die HDD kopiert
    ;----------------------------------------------------------------------------------------------
    ;Öffnen des Textfiles & prüfen ob erfolgreich geladen
    ;----------------------------------------------------------------------------------------------
    ;----------------------------------------------------------------------------------------------
    $datei_rn = FileOpen($datei, 0)
    ;Öffnen des Textfiles & prüfen ob erfolgreich geladen
    If $datei_rn = -1 Then
    MsgBox(64, "Fehler", "Die Datei konnte nicht geöffnet werden.")
    Exit
    EndIf
    ;FileClose($datei)

    $datei = FileOpen($datei, 0)
    ;Prüfen des Textfiles, ob dieses ordnungsgemäß geladen wurde
    While 1
    $line = FileReadLine($datei)
    If @error <> 0 Then ExitLoop
    ;Wenn keine Zeilen mehr da sind beenden
    $Befehl = StringSplit($line,"|")
    WEnd
    ;fileClose($datei)

    ;----------------------------------------------------------------------------------------------
    #include "ABCupdate.txt"
    ;$CountLines = _FileCountLines("X:\allgemeine_scripts\ProgrammABC\ABCupdate.txt")
    $count = _FileCountLines($datei)
    For $line = 1 To $count Step +1
    $Befehl = StringSplit(FileReadLine($datei,$line),"|")
    Next


    $Befehl[0] = $pcname
    $Befehl[1] = exe


    ;----------------------------------------------------------------------------------------------
    ;Prüfen ob Rechner online & kopieren des Ordners
    ;----------------------------------------------------------------------------------------------
    ; Zeilen des Textes einlesen bis EOF
    While 1
    $pcname = FileReadLine($datei_rn)
    If @error = -1 Then ExitLoop
    ;Prüfen ob Rechner online
    If Ping($pcname ,250) Then
    ;Prüfen ob Verzeichnis vorhanden
    If FileExists ("\\" & $pcname & $dirziel2) Then
    ;Kopieren der Bilder
    FileCopy($dirstart1, "\\" & $pcname & $dirziel2)
    ;Kopieren der RegKeys
    FileCopy($dirstart2, "\\" & $pcname & $dirziel2)
    EndIf
    ;Prüfen ob Verzeichnis vorhanden
    If FileExists("\\" & $pcname & "\C$\Programme\ProgrammABC") =0 Then
    ;Legt Verzeichnis an, da nicht vorhanden
    DirCreate("\\" & $pcname & "\C$\Programme\ProgrammABC")
    EndIf
    ;Prüfen ob Verzeichnis vorhanden
    If FileExists("\\" & $pcname & "\C$\Dokumente und Einstellungen\user1\Anwendungsdaten\ProgrammABC\Profiles") =0 Then
    ;Legt Verzeichnis an, da nicht vorhanden
    DirCreate("\\" & $pcname & "\C$\Dokumente und Einstellungen\user1\Anwendungsdaten\ProgrammABC\Profiles")
    EndIf
    ;Kopieren der Schwellwerte
    DirCopy("\\" & $pcname & $dirstart4, "\\" & $pcname & $dirziel1, 1)
    ;Beendet laufenedes Script
    Run (@ComSpec & " /c " & "psexec \\" & $pcname & " -i C:\Programme\Scripts\taskkill.cmd","", @SW_HIDE)
    ;Prüfen ob Verzeichnis vorhanden
    If FileExists("\\" & $pcname & $dirziel2) Then
    ;Kopiert neues Script
    FileCopy($dirstart5, "\\" & $pcname & $dirziel2, 1)
    ;Erstellt eine Verknüpfung im Order Programme/Autostart
    FileCreateShortcut("\\" & $pcname & $dirziel2 & $linkexe, "\\" & $pcname & $dirziel3 & "Scriptlink.lnk", 1)
    EndIf
    ;Startet den PC neu
    Run (@ComSpec & " /c " & "psexec \\" & $pcname & " -i C:\Programme\Scripts\restart.cmd","", @SW_HIDE)
    EndIf
    Wend
    ;----------------------------------------------------------------------------------------------
    ;Schließen des Textfiles
    FileClose($datei_rn)
    ;----------------------------------------------------------------------------------------------
    ;Meldung über Beendigung des Scriptes
    MsgBox(64, "Exit", "Das Script wurde erfolgreich beendet")
    ;----------------------------------------------------------------------------------------------

  • hab mir dein script mal angeschaut und es etwas verkürtzt bitte melden falls es nich gehen sollte oder wenn was fehlt

    Spoiler anzeigen
    [autoit]


    Global $IniFile = @ScriptDir & "\Computer.ini", $Ping = 1
    Global $DirStart[5] = ["", "X:\allgemeine_scripts\ProgrammABC\Bilder\*.*", "X:\allgemeine_scripts\ProgrammABC\RegKeys\*.*", "\C$\Programme\ProgrammABC\Profiles\", "X:\allgemeine_scripts\ProgrammABC\Scripts\*.exe"]
    Global $DirZiel[4] = ["", "\C$\Dokumente und Einstellungen\user1\Anwendungsdaten\ProgrammABC\Profiles", "\C$\Programme\Scripts\Test\", "\C$\Dokumente und Einstellungen\user1\Startmenü\Programme\Autostart\"]

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

    $Befehl = IniReadSection($IniFile, "Computer")
    If @error = 1 Then MsgBox(64,"Error", "Ein Fehler ist beim öffnen der Computer.ini aufgetreten")

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

    While $Ping <= $Befehl[0][0]
    If Ping("\\" & $Befehl[0][$Ping], 250) = 1 Then
    MsgBox(64,"Error", "Ein Fehler ist beim anpingen des Computers " & $Befehl[0][$Ping] & "aufgetreten, möglicherweise ist der PC offline")

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

    ElseIf Not FileExists ("\\" & $Befehl[0][$Ping] & $DirZiel[2]) Then
    DirCreate("\\" & $Befehl[0][$Ping] & $DirZiel[2])
    ElseIf Not FileExists("\\" & $Befehl[0][$Ping] & "\C$\Programme\ProgrammABC") Then
    DirCreate("\\" & $Befehl[0][$Ping] & "\C$\Programme\ProgrammABC")
    ElseIf Not FileExists("\\" & $Befehl[0][$Ping] & "\C$\Dokumente und Einstellungen\user1\Anwendungsdaten\ProgrammABC\Profiles")Then
    DirCreate("\\" & $Befehl[0][$Ping] & "\C$\Dokumente und Einstellungen\user1\Anwendungsdaten\ProgrammABC\Profiles")
    EndIf

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

    FileCopy($DirStart[1], $DirZiel[2])
    FileCopy($DirStart[2], $DirZiel[2])
    DirCopy("\\" & $Befehl[0][$Ping] & $DirStart[3], "\\" & $Befehl[0][$Ping] & $DirZiel[1], 1)

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

    Run (@ComSpec & " /c " & "psexec \\" & $Befehl[0][$Ping] & " -i C:\Programme\Scripts\taskkill.cmd","", @SW_HIDE)

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

    FileCopy($DirStart[4], "\\" & $Befehl[0][$Ping] & $DirZiel[2], 1)

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

    FileCreateShortcut("\\" & $Befehl[0][$Ping] & $DirZiel[2] & $Befehl[1][$Ping], "\\" & $Befehl[0][$Ping] & $DirZiel[3] & "Scriptlink.lnk", 1)

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

    Run (@ComSpec & " -m \\" & $Befehl[0][$Ping] & ' -r -t 10 -c "ihr PC wird in 10 Secunden Neugestartet',"", @SW_HIDE)
    $Ping+=1
    WEnd

    [/autoit]

    viel Spaß noch mit autoit

    Edit: Achso hier noch deine Computer.ini

  • Hallo Alexander,

    vielen vielen Dank für die schnelle Hilfe. Wohin soll ich was überweisen? *lach*

    Script läuft nun jetzt, musste noch etwas anpassen. Siehe selbst!

    Vielleicht hat ja jemand anders Interesse an so einem Script.


    Global $IniFile = @ScriptDir & "\Computer.ini", $Ping = 1
    Global $DirStart[5] = ["", "X:\allgemeine_scripts\ProgrammABC\Bilder\*.*", "X:\allgemeine_scripts\ProgrammABC\RegKeys\*.*", "\C$\Programme\ProgrammABC\Profiles\", "X:\allgemeine_scripts\ProgrammABC\Scripts\*.exe"]
    Global $DirZiel[4] = ["", "\C$\Dokumente und Einstellungen\user1\Anwendungsdaten\ProgrammABC\Profiles", "\C$\Programme\Scripts\Test\", "\C$\Dokumente und Einstellungen\user1\Startmenü\Programme\Autostart\"]

    $Befehl = IniReadSection($IniFile, "Computer")
    If @error = 1 Then MsgBox(64,"Error", "Ein Fehler ist beim öffnen der Computer.ini aufgetreten")

    While $Ping <= $Befehl[0][0]

    $var1= Ping($Befehl[$Ping][0], 250)

    If $var1 <> 0 Then

    If Not FileExists("\\" & $Befehl[$Ping] [0] & $DirZiel[2]) Then
    DirCreate("\\" & $Befehl[$Ping][0] & $DirZiel[2])
    EndIf
    If Not FileExists("\\" & $Befehl[$Ping][0] & "\C$\Programme\ProgrammABC") Then
    DirCreate("\\" & $Befehl[$Ping][0] & "\C$\Programme\ProgrammABC")
    EndIf
    If Not FileExists("\\" & $Befehl[$Ping][0] & "\C$\Dokumente und Einstellungen\user1\Anwendungsdaten\ProgrammABC")Then
    DirCreate("\\" & $Befehl[$Ping][0] & "\C$\Dokumente und Einstellungen\user1\Anwendungsdaten\ProgrammABC")
    EndIf

    FileCopy($DirStart[1],"\\" & $Befehl[$Ping][0] & $DirZiel[2])
    FileCopy($DirStart[2],"\\" & $Befehl[$Ping][0] & $DirZiel[2])
    DirCopy("\\" & $Befehl[$Ping][0] & $DirStart[3], "\\" & $Befehl[$Ping][0] & $DirZiel[1], 1)

    Run (@ComSpec & " /c " & "psexec \\" & $Befehl[$Ping][0] & " -i C:\Programme\Scripts\taskkill.cmd","", @SW_HIDE)

    FileCopy($DirStart[4], "\\" & $Befehl[$Ping][0] & $DirZiel[2], 1)

    FileCreateShortcut("\\" & $Befehl[$Ping][0] & $DirZiel[2] & $Befehl[1][$Ping], "\\" & $Befehl[$Ping][0] & $DirZiel[3] & "Scriptlink.lnk", 1)

    Run (@ComSpec & " -m \\" & $Befehl[$Ping][0] & ' -r -t 10 -c "ihr PC wird in 10 Secunden Neugestartet',"", @SW_HIDE)

    ElseIf $var1 =0 Then
    MsgBox(64,"Error", "Ein Fehler ist beim anpingen des Computers " & $Befehl[$Ping][0] & " aufgetreten, möglicherweise ist der PC offline")
    EndIf
    $Ping+=1

    WEnd

    Dank nochmal an alle, ich kann das Forum nur bestens empfehlen.

    Gruss Maddown

  • eine bitte ab sofort befor du einen Quelltext reinstellst den sp und den autoitbutten drücken

    und dazwischen einfügen
    Danke