Server Reboot Script

  • Hallo zusammen,

    ich habe ein kleines Projekt angefangen, welches folgendes beinhaltet:

    Ich möchte von einem Server aus mehrerer andere Server neustarten und das ganze soll dabei geloggt werden. Geloggt wird bis jetzt nur die Ausführung des Befehls. Was ich dann aber möchte ist, das geprüft wird (wie weis ich noch nicht genau) ob die Server auch gebootet wurden. Dazu aber später.

    Jetzt bitte ich Euch das ihr auch das Teil mal anschaut und mir evtl. Verbesserungen vorschlagt, was ich besser machen könnte oder halt was ich anders machen sollte. Das wäre mir eine sehr große Hilfe da ich noch nicht sooo in den Tiefen stecke wie man andere hier.

    Hier die Erklärung:

    Am Anfang wird die Domäne, der User und ja auch das Kennwort eingetragen.

    Anschließend der timeout vom Reboot Befehl.

    Dann kommen die Befehlszeilen zum Neustart und Abbruch desselbigen.

    Dann ein paar Sachen für das Log.

    Checkpoint 1

    Überprüft ober der User der im Script steht, der User ist der den Task ausführt, wenn ja startet er es ohne weitere Abfrage.

    Checkpoint 2

    Manuelles Starten des Scripts, dort soll dann ein Passwort eingegeben werden, welche oben extra aufgeführt ist. Wird es einegeben startet das Script und fragt dann anschließend ob der Neustart abgebrochen werden soll, falls nötig.

    Unten dann die Funktionen.

    Das wäre so der grobe Abriss dessen was drin steht.

    Also hier das Teilchen:

    Spoiler anzeigen
    [autoit]


    #cs ---------------------------------------------------------------------

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

    AutoIt Version: 3.2.10.0
    Author: Andreas Heß
    Copyright:Andreas Heß

    Script Function:Reboot mehrerer Server.
    Script Version:1.5
    Script Date:03.09.2008

    #ce ---------------------------------------------------------------------

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

    #NoTrayIcon
    #include <Date.au3>

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

    $Domaene = "localsite.localdomain.com"
    $Benutzer = "userxy"
    $Kennwort = "passwortxy"
    $Passwort = "passwortxy"
    $timeout = "120"

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

    $srv01 = "\\srvxyz123"
    $srv02 = "\\srvxyz124"
    $srv03 = "\\srvxyz125"
    $srv04 = ""
    $srv05 = ""
    $srv06 = ""
    $srv07 = ""
    $srv08 = ""
    $srv09 = ""
    $srv10 = ""
    $srv11 = ""
    $srv12 = ""
    $srv13 = ""
    $srv14 = ""
    $srv15 = ""
    $srv16 = ""
    $srv17 = ""
    $srv18 = ""
    $srv19 = ""
    $srv20 = ""

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

    ;------------------------------------------------------------------------
    ;------------------ Variablen zum Reboot und zum Abbruch ----------------
    ;------------------------------------------------------------------------
    $reboot = @SystemDir & "\shutdown.exe -r -f -t " & $timeout & " -m "
    $cancel = @SystemDir & "\shutdown.exe -a -m "
    ;------------------------------------------------------------------------
    ;------------------------- Variablen für Logdatei -----------------------
    ;------------------------------------------------------------------------
    $Log = @ScriptDir & "\logs\Rebootlog vom " & _NowDate() & ".txt"
    $txt1 = "Automatischer Reboot "
    $txt2 = "Manueller Reboot "
    $txt3 = " wurde ausgelöst "
    $txt4 = " wurde abgebrochen "
    $txt5 = "am " & _NowDate() & " um " & _NowTime() & " von " & @UserName
    ;------------------------------------------------------------------------
    ;------------------------------- Checkpoint 1 ---------------------------
    ;------------------------------------------------------------------------
    $sec_1 = @UserName
    $manuell = 0
    If $sec_1 = $Benutzer Then
    RunAsSet($Benutzer,$Domaene,$Kennwort)
    If Not $srv01 = "" Then
    _reboot_srv01()
    EndIf
    If Not $srv02 = "" Then
    _reboot_srv02()
    EndIf
    If Not $srv03 = "" Then
    _reboot_srv03()
    EndIf
    If Not $srv04 = "" Then
    _reboot_srv04()
    EndIf
    If Not $srv05 = "" Then
    _reboot_srv05()
    EndIf
    If Not $srv06 = "" Then
    _reboot_srv06()
    EndIf
    If Not $srv07 = "" Then
    _reboot_srv07()
    EndIf
    If Not $srv08 = "" Then
    _reboot_srv08()
    EndIf
    If Not $srv09 = "" Then
    _reboot_srv09()
    EndIf
    If Not $srv10 = "" Then
    _reboot_srv10()
    EndIf
    If Not $srv11 = "" Then
    _reboot_srv11()
    EndIf
    If Not $srv12 = "" Then
    _reboot_srv12()
    EndIf
    If Not $srv13 = "" Then
    _reboot_srv13()
    EndIf
    If Not $srv14 = "" Then
    _reboot_srv14()
    EndIf
    If Not $srv15 = "" Then
    _reboot_srv15()
    EndIf
    If Not $srv16 = "" Then
    _reboot_srv16()
    EndIf
    If Not $srv17 = "" Then
    _reboot_srv17()
    EndIf
    If Not $srv18 = "" Then
    _reboot_srv18()
    EndIf
    If Not $srv19 = "" Then
    _reboot_srv19()
    EndIf
    If Not $srv20 = "" Then
    _reboot_srv20()
    EndIf
    RunAsSet()
    Else
    ;------------------------------------------------------------------------
    ;------------------------------- Checkpoint 2 ---------------------------
    ;------------------------------------------------------------------------
    $sec_2 = InputBox("Warnung -- Warnung", "Reboot erfordert Passwort.", "", "*",250,50)
    $manuell = 1
    If $sec_2 = $Passwort Then
    RunAsSet($Benutzer,$Domaene,$Kennwort)
    If Not $srv01 = "" Then
    _reboot_srv01()
    EndIf
    If Not $srv02 = "" Then
    _reboot_srv02()
    EndIf
    If Not $srv03 = "" Then
    _reboot_srv03()
    EndIf
    If Not $srv04 = "" Then
    _reboot_srv04()
    EndIf
    If Not $srv05 = "" Then
    _reboot_srv05()
    EndIf
    If Not $srv06 = "" Then
    _reboot_srv06()
    EndIf
    If Not $srv07 = "" Then
    _reboot_srv07()
    EndIf
    If Not $srv08 = "" Then
    _reboot_srv08()
    EndIf
    If Not $srv09 = "" Then
    _reboot_srv09()
    EndIf
    If Not $srv10 = "" Then
    _reboot_srv10()
    EndIf
    If Not $srv11 = "" Then
    _reboot_srv11()
    EndIf
    If Not $srv12 = "" Then
    _reboot_srv12()
    EndIf
    If Not $srv13 = "" Then
    _reboot_srv13()
    EndIf
    If Not $srv14 = "" Then
    _reboot_srv14()
    EndIf
    If Not $srv15 = "" Then
    _reboot_srv15()
    EndIf
    If Not $srv16 = "" Then
    _reboot_srv16()
    EndIf
    If Not $srv17 = "" Then
    _reboot_srv17()
    EndIf
    If Not $srv18 = "" Then
    _reboot_srv18()
    EndIf
    If Not $srv19 = "" Then
    _reboot_srv19()
    EndIf
    If Not $srv20 = "" Then
    _reboot_srv20()
    EndIf
    RunAsSet()
    If MsgBox(4,"Cancel Reboot","Soll der Reboot abgebrochen werden?",$timeout)=6 Then
    RunAsSet($Benutzer,$Domaene,$Kennwort)
    If Not $srv01 = "" Then
    _cancel_srv01()
    EndIf
    If Not $srv02 = "" Then
    _cancel_srv02()
    EndIf
    If Not $srv03 = "" Then
    _cancel_srv03()
    EndIf
    If Not $srv04 = "" Then
    _cancel_srv04()
    EndIf
    If Not $srv05 = "" Then
    _cancel_srv05()
    EndIf
    If Not $srv06 = "" Then
    _cancel_srv06()
    EndIf
    If Not $srv07 = "" Then
    _cancel_srv07()
    EndIf
    If Not $srv08 = "" Then
    _cancel_srv08()
    EndIf
    If Not $srv09 = "" Then
    _cancel_srv09()
    EndIf
    If Not $srv10 = "" Then
    _cancel_srv10()
    EndIf
    If Not $srv11 = "" Then
    _cancel_srv11()
    EndIf
    If Not $srv12 = "" Then
    _cancel_srv12()
    EndIf
    If Not $srv13 = "" Then
    _cancel_srv13()
    EndIf
    If Not $srv14 = "" Then
    _cancel_srv14()
    EndIf
    If Not $srv15 = "" Then
    _cancel_srv15()
    EndIf
    If Not $srv16 = "" Then
    _cancel_srv16()
    EndIf
    If Not $srv17 = "" Then
    _cancel_srv17()
    EndIf
    If Not $srv18 = "" Then
    _cancel_srv18()
    EndIf
    If Not $srv19 = "" Then
    _cancel_srv19()
    EndIf
    If Not $srv20 = "" Then
    _cancel_srv20()
    EndIf
    RunAsSet()
    EndIf
    Else
    Exit
    EndIf
    EndIf
    ;------------------------------------------------------------------------
    ;---------------------- Abschnitt Funktionen - Beginn -------------------
    ;------------------------------------------------------------------------
    Func _reboot_srv01()
    If $manuell = 1 Then
    Run($reboot & $srv01,"",@SW_HIDE)
    FileOpen($Log,9)
    FileWrite($Log,$txt2 & $srv01 & $txt3 & $txt5 & @CRLF)
    FileClose($Log)
    Else
    Run($reboot & $srv01,"",@SW_HIDE)
    FileOpen($Log,9)
    FileWrite($Log,$txt1 & $srv01 & $txt3 & $txt5 & @CRLF)
    FileClose($Log)
    EndIf
    EndFunc
    Func _cancel_srv01()
    Run($cancel & $srv01,"",@SW_HIDE)
    FileOpen($Log,9)
    FileWrite($Log,$txt2 & $srv01 & $txt4 & $txt5 & @CRLF)
    FileClose($Log)
    EndFunc
    Func _reboot_srv02()
    If $manuell = 1 Then
    Run($reboot & $srv02,"",@SW_HIDE)
    FileOpen($Log,9)
    FileWrite($Log,$txt2 & $srv02 & $txt3 & $txt5 & @CRLF)
    FileClose($Log)
    Else
    Run($reboot & $srv02,"",@SW_HIDE)
    FileOpen($Log,9)
    FileWrite($Log,$txt1 & $srv02 & $txt3 & $txt5 & @CRLF)
    FileClose($Log)
    EndIf
    EndFunc
    Func _cancel_srv02()
    Run($cancel & $srv02,"",@SW_HIDE)
    FileOpen($Log,9)
    FileWrite($Log,$txt2 & $srv02 & $txt4 & $txt5 & @CRLF)
    FileClose($Log)
    EndFunc
    Func _reboot_srv03()
    If $manuell = 1 Then
    Run($reboot & $srv03,"",@SW_HIDE)
    FileOpen($Log,9)
    FileWrite($Log,$txt2 & $srv03 & $txt3 & $txt5 & @CRLF)
    FileClose($Log)
    Else
    Run($reboot & $srv03,"",@SW_HIDE)
    FileOpen($Log,9)
    FileWrite($Log,$txt1 & $srv03 & $txt3 & $txt5 & @CRLF)
    FileClose($Log)
    EndIf
    EndFunc
    Func _cancel_srv03()
    Run($cancel & $srv03,"",@SW_HIDE)
    FileOpen($Log,9)
    FileWrite($Log,$txt2 & $srv03 & $txt4 & $txt5 & @CRLF)
    FileClose($Log)
    EndFunc
    Func _reboot_srv04()
    If $manuell = 1 Then
    Run($reboot & $srv04,"",@SW_HIDE)
    FileOpen($Log,9)
    FileWrite($Log,$txt2 & $srv04 & $txt3 & $txt5 & @CRLF)
    FileClose($Log)
    Else
    Run($reboot & $srv04,"",@SW_HIDE)
    FileOpen($Log,9)
    FileWrite($Log,$txt1 & $srv04 & $txt3 & $txt5 & @CRLF)
    FileClose($Log)
    EndIf
    EndFunc
    Func _cancel_srv04()
    Run($cancel & $srv04,"",@SW_HIDE)
    FileOpen($Log,9)
    FileWrite($Log,$txt2 & $srv04 & $txt4 & $txt5 & @CRLF)
    FileClose($Log)
    EndFunc
    Func _reboot_srv05()
    If $manuell = 1 Then
    Run($reboot & $srv05,"",@SW_HIDE)
    FileOpen($Log,9)
    FileWrite($Log,$txt2 & $srv05 & $txt3 & $txt5 & @CRLF)
    FileClose($Log)
    Else
    Run($reboot & $srv05,"",@SW_HIDE)
    FileOpen($Log,9)
    FileWrite($Log,$txt1 & $srv05 & $txt3 & $txt5 & @CRLF)
    FileClose($Log)
    EndIf
    EndFunc
    Func _cancel_srv05()
    Run($cancel & $srv05,"",@SW_HIDE)
    FileOpen($Log,9)
    FileWrite($Log,$txt2 & $srv05 & $txt4 & $txt5 & @CRLF)
    FileClose($Log)
    EndFunc
    Func _reboot_srv06()
    If $manuell = 1 Then
    Run($reboot & $srv06,"",@SW_HIDE)
    FileOpen($Log,9)
    FileWrite($Log,$txt2 & $srv06 & $txt3 & $txt5 & @CRLF)
    FileClose($Log)
    Else
    Run($reboot & $srv06,"",@SW_HIDE)
    FileOpen($Log,9)
    FileWrite($Log,$txt1 & $srv06 & $txt3 & $txt5 & @CRLF)
    FileClose($Log)
    EndIf
    EndFunc
    Func _cancel_srv06()
    Run($cancel & $srv06,"",@SW_HIDE)
    FileOpen($Log,9)
    FileWrite($Log,$txt2 & $srv06 & $txt4 & $txt5 & @CRLF)
    FileClose($Log)
    EndFunc
    Func _reboot_srv07()
    If $manuell = 1 Then
    Run($reboot & $srv07,"",@SW_HIDE)
    FileOpen($Log,9)
    FileWrite($Log,$txt2 & $srv07 & $txt3 & $txt5 & @CRLF)
    FileClose($Log)
    Else
    Run($reboot & $srv07,"",@SW_HIDE)
    FileOpen($Log,9)
    FileWrite($Log,$txt1 & $srv07 & $txt3 & $txt5 & @CRLF)
    FileClose($Log)
    EndIf
    EndFunc
    Func _cancel_srv07()
    Run($cancel & $srv07,"",@SW_HIDE)
    FileOpen($Log,9)
    FileWrite($Log,$txt2 & $srv07 & $txt4 & $txt5 & @CRLF)
    FileClose($Log)
    EndFunc
    Func _reboot_srv08()
    If $manuell = 1 Then
    Run($reboot & $srv08,"",@SW_HIDE)
    FileOpen($Log,9)
    FileWrite($Log,$txt2 & $srv08 & $txt3 & $txt5 & @CRLF)
    FileClose($Log)
    Else
    Run($reboot & $srv08,"",@SW_HIDE)
    FileOpen($Log,9)
    FileWrite($Log,$txt1 & $srv08 & $txt3 & $txt5 & @CRLF)
    FileClose($Log)
    EndIf
    EndFunc
    Func _cancel_srv08()
    Run($cancel & $srv08,"",@SW_HIDE)
    FileOpen($Log,9)
    FileWrite($Log,$txt2 & $srv08 & $txt4 & $txt5 & @CRLF)
    FileClose($Log)
    EndFunc
    Func _reboot_srv09()
    If $manuell = 1 Then
    Run($reboot & $srv09,"",@SW_HIDE)
    FileOpen($Log,9)
    FileWrite($Log,$txt2 & $srv09 & $txt3 & $txt5 & @CRLF)
    FileClose($Log)
    Else
    Run($reboot & $srv09,"",@SW_HIDE)
    FileOpen($Log,9)
    FileWrite($Log,$txt1 & $srv09 & $txt3 & $txt5 & @CRLF)
    FileClose($Log)
    EndIf
    EndFunc
    Func _cancel_srv09()
    Run($cancel & $srv09,"",@SW_HIDE)
    FileOpen($Log,9)
    FileWrite($Log,$txt2 & $srv09 & $txt4 & $txt5 & @CRLF)
    FileClose($Log)
    EndFunc
    Func _reboot_srv10()
    If $manuell = 1 Then
    Run($reboot & $srv10,"",@SW_HIDE)
    FileOpen($Log,9)
    FileWrite($Log,$txt2 & $srv10 & $txt3 & $txt5 & @CRLF)
    FileClose($Log)
    Else
    Run($reboot & $srv10,"",@SW_HIDE)
    FileOpen($Log,9)
    FileWrite($Log,$txt1 & $srv10 & $txt3 & $txt5 & @CRLF)
    FileClose($Log)
    EndIf
    EndFunc
    Func _cancel_srv10()
    Run($cancel & $srv10,"",@SW_HIDE)
    FileOpen($Log,9)
    FileWrite($Log,$txt2 & $srv10 & $txt4 & $txt5 & @CRLF)
    FileClose($Log)
    EndFunc
    Func _reboot_srv11()
    If $manuell = 1 Then
    Run($reboot & $srv11,"",@SW_HIDE)
    FileOpen($Log,9)
    FileWrite($Log,$txt2 & $srv11 & $txt3 & $txt5 & @CRLF)
    FileClose($Log)
    Else
    Run($reboot & $srv02,"",@SW_HIDE)
    FileOpen($Log,9)
    FileWrite($Log,$txt1 & $srv11 & $txt3 & $txt5 & @CRLF)
    FileClose($Log)
    EndIf
    EndFunc
    Func _cancel_srv11()
    Run($cancel & $srv11,"",@SW_HIDE)
    FileOpen($Log,9)
    FileWrite($Log,$txt2 & $srv11 & $txt4 & $txt5 & @CRLF)
    FileClose($Log)
    EndFunc
    Func _reboot_srv12()
    If $manuell = 1 Then
    Run($reboot & $srv12,"",@SW_HIDE)
    FileOpen($Log,9)
    FileWrite($Log,$txt2 & $srv12 & $txt3 & $txt5 & @CRLF)
    FileClose($Log)
    Else
    Run($reboot & $srv12,"",@SW_HIDE)
    FileOpen($Log,9)
    FileWrite($Log,$txt1 & $srv12 & $txt3 & $txt5 & @CRLF)
    FileClose($Log)
    EndIf
    EndFunc
    Func _cancel_srv12()
    Run($cancel & $srv12,"",@SW_HIDE)
    FileOpen($Log,9)
    FileWrite($Log,$txt2 & $srv12 & $txt4 & $txt5 & @CRLF)
    FileClose($Log)
    EndFunc
    Func _reboot_srv13()
    If $manuell = 1 Then
    Run($reboot & $srv13,"",@SW_HIDE)
    FileOpen($Log,9)
    FileWrite($Log,$txt2 & $srv13 & $txt3 & $txt5 & @CRLF)
    FileClose($Log)
    Else
    Run($reboot & $srv13,"",@SW_HIDE)
    FileOpen($Log,9)
    FileWrite($Log,$txt1 & $srv13 & $txt3 & $txt5 & @CRLF)
    FileClose($Log)
    EndIf
    EndFunc
    Func _cancel_srv13()
    Run($cancel & $srv13,"",@SW_HIDE)
    FileOpen($Log,9)
    FileWrite($Log,$txt2 & $srv13 & $txt4 & $txt5 & @CRLF)
    FileClose($Log)
    EndFunc
    Func _reboot_srv14()
    If $manuell = 1 Then
    Run($reboot & $srv14,"",@SW_HIDE)
    FileOpen($Log,9)
    FileWrite($Log,$txt2 & $srv14 & $txt3 & $txt5 & @CRLF)
    FileClose($Log)
    Else
    Run($reboot & $srv14,"",@SW_HIDE)
    FileOpen($Log,9)
    FileWrite($Log,$txt1 & $srv14 & $txt3 & $txt5 & @CRLF)
    FileClose($Log)
    EndIf
    EndFunc
    Func _cancel_srv14()
    Run($cancel & $srv14,"",@SW_HIDE)
    FileOpen($Log,9)
    FileWrite($Log,$txt2 & $srv14 & $txt4 & $txt5 & @CRLF)
    FileClose($Log)
    EndFunc
    Func _reboot_srv15()
    If $manuell = 1 Then
    Run($reboot & $srv15,"",@SW_HIDE)
    FileOpen($Log,9)
    FileWrite($Log,$txt2 & $srv15 & $txt3 & $txt5 & @CRLF)
    FileClose($Log)
    Else
    Run($reboot & $srv15,"",@SW_HIDE)
    FileOpen($Log,9)
    FileWrite($Log,$txt1 & $srv15 & $txt3 & $txt5 & @CRLF)
    FileClose($Log)
    EndIf
    EndFunc
    Func _cancel_srv15()
    Run($cancel & $srv15,"",@SW_HIDE)
    FileOpen($Log,9)
    FileWrite($Log,$txt2 & $srv15 & $txt4 & $txt5 & @CRLF)
    FileClose($Log)
    EndFunc
    Func _reboot_srv16()
    If $manuell = 1 Then
    Run($reboot & $srv16,"",@SW_HIDE)
    FileOpen($Log,9)
    FileWrite($Log,$txt2 & $srv16 & $txt3 & $txt5 & @CRLF)
    FileClose($Log)
    Else
    Run($reboot & $srv16,"",@SW_HIDE)
    FileOpen($Log,9)
    FileWrite($Log,$txt1 & $srv16 & $txt3 & $txt5 & @CRLF)
    FileClose($Log)
    EndIf
    EndFunc
    Func _cancel_srv16()
    Run($cancel & $srv16,"",@SW_HIDE)
    FileOpen($Log,9)
    FileWrite($Log,$txt2 & $srv16 & $txt4 & $txt5 & @CRLF)
    FileClose($Log)
    EndFunc
    Func _reboot_srv17()
    If $manuell = 1 Then
    Run($reboot & $srv17,"",@SW_HIDE)
    FileOpen($Log,9)
    FileWrite($Log,$txt2 & $srv17 & $txt3 & $txt5 & @CRLF)
    FileClose($Log)
    Else
    Run($reboot & $srv17,"",@SW_HIDE)
    FileOpen($Log,9)
    FileWrite($Log,$txt1 & $srv17 & $txt3 & $txt5 & @CRLF)
    FileClose($Log)
    EndIf
    EndFunc
    Func _cancel_srv17()
    Run($cancel & $srv17,"",@SW_HIDE)
    FileOpen($Log,9)
    FileWrite($Log,$txt2 & $srv17 & $txt4 & $txt5 & @CRLF)
    FileClose($Log)
    EndFunc
    Func _reboot_srv18()
    If $manuell = 1 Then
    Run($reboot & $srv18,"",@SW_HIDE)
    FileOpen($Log,9)
    FileWrite($Log,$txt2 & $srv18 & $txt3 & $txt5 & @CRLF)
    FileClose($Log)
    Else
    Run($reboot & $srv18,"",@SW_HIDE)
    FileOpen($Log,9)
    FileWrite($Log,$txt1 & $srv18 & $txt3 & $txt5 & @CRLF)
    FileClose($Log)
    EndIf
    EndFunc
    Func _cancel_srv18()
    Run($cancel & $srv18,"",@SW_HIDE)
    FileOpen($Log,9)
    FileWrite($Log,$txt2 & $srv18 & $txt4 & $txt5 & @CRLF)
    FileClose($Log)
    EndFunc
    Func _reboot_srv19()
    If $manuell = 1 Then
    Run($reboot & $srv19,"",@SW_HIDE)
    FileOpen($Log,9)
    FileWrite($Log,$txt2 & $srv19 & $txt3 & $txt5 & @CRLF)
    FileClose($Log)
    Else
    Run($reboot & $srv19,"",@SW_HIDE)
    FileOpen($Log,9)
    FileWrite($Log,$txt1 & $srv19 & $txt3 & $txt5 & @CRLF)
    FileClose($Log)
    EndIf
    EndFunc
    Func _cancel_srv19()
    Run($cancel & $srv19,"",@SW_HIDE)
    FileOpen($Log,9)
    FileWrite($Log,$txt2 & $srv19 & $txt4 & $txt5 & @CRLF)
    FileClose($Log)
    EndFunc
    Func _reboot_srv20()
    If $manuell = 1 Then
    Run($reboot & $srv20,"",@SW_HIDE)
    FileOpen($Log,9)
    FileWrite($Log,$txt2 & $srv20 & $txt3 & $txt5 & @CRLF)
    FileClose($Log)
    Else
    Run($reboot & $srv20,"",@SW_HIDE)
    FileOpen($Log,9)
    FileWrite($Log,$txt1 & $srv20 & $txt3 & $txt5 & @CRLF)
    FileClose($Log)
    EndIf
    EndFunc
    Func _cancel_srv20()
    Run($cancel & $srv20,"",@SW_HIDE)
    FileOpen($Log,9)
    FileWrite($Log,$txt2 & $srv20 & $txt4 & $txt5 & @CRLF)
    FileClose($Log)
    EndFunc
    ;------------------------------------------------------------------------
    ;----------------------- Abschnitt Funktionen - Ende --------------------
    ;------------------------------------------------------------------------

    [/autoit]

    Für Anregungen/Kritik und ähnliches wäre ich wie gesagt sehr dankbar.

    LG

    Schnuecks

    • Offizieller Beitrag

    Hallo!

    Mal kurz drüber geschaut:
    Arbeit mit Arrays und Funktionsparametern, dann wird das Skript ca. 90% kürzer vermutlich und 10x übersichtlicher ;)

    Beispiel:

    peethebee

  • Leider habe ich es mit Arrays nicht so, dran gedacht hatte ich auch schon. Wie man ein simples Array erstellt ist mir soweit klar. Was mir nur unklar ist wie ich es dann im Script mit dem Befehl verbinde.

    Habt ihr da mal nen konkretes Beispiel für mich.

    Sollte mein Array so aussehen

    Spoiler anzeigen
    [autoit]


    Global $Array[20]

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

    $array[0] = "\\srvxyz123"
    $array[1] = "\\srvxyz124"
    $array[2] = "\\srvxyz125"
    $array[3] = ""
    $array[4] = ""
    $array[5] = ""
    $array[6] = ""
    $array[7] = ""
    $array[8] = ""
    $array[9] = ""
    $array[10] = ""
    $array[11] = ""
    $array[12] = ""
    $array[13] = ""
    $array[14] = ""
    $array[15] = ""
    $array[16] = ""
    $array[17] = ""
    $array[18] = ""
    $array[19] = ""

    [/autoit]

    Die Frage ist wie gesagt wie verbinde ich das jetzt mit meinen Funktionen.

    Welche Funktionen soll ich den ersetzen, den Shutdown() habe ich extra nicht benutzt.
    Welche könnte ich den ersetzen mit Funktionsparametern?


    LG

    Schnuecks

    • Offizieller Beitrag

    Ich habe Dein Script mal "etwas" gekürzt:

    Spoiler anzeigen
    [autoit]


    #cs ---------------------------------------------------------------------

    AutoIt Version: 3.2.10.0
    Author: Andreas Heß
    Copyright:Andreas Heß

    Script Function:Reboot mehrerer Server.
    Script Version:1.5
    Script Date:03.09.2008

    #ce ---------------------------------------------------------------------

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

    #NoTrayIcon
    #include <Date.au3>

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

    $Domaene = "localsite.localdomain.com"
    $Benutzer = "userxy"
    $Kennwort = "passwortxy"
    $Passwort = "passwortxy"
    $timeout = "120"

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

    Global $aSrv[20] = ["\\srvxyz123","\\srvxyz124","\\srvxyz125","","","","","","","","","","","","","","","","",""]

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

    ;------------------------------------------------------------------------
    ;------------------ Variablen zum Reboot und zum Abbruch ----------------
    ;------------------------------------------------------------------------
    $reboot = @SystemDir & "\shutdown.exe -r -f -t " & $timeout & " -m "
    $cancel = @SystemDir & "\shutdown.exe -a -m "
    ;------------------------------------------------------------------------
    ;------------------------- Variablen für Logdatei -----------------------
    ;------------------------------------------------------------------------
    $Log = @ScriptDir & "\logs\Rebootlog vom " & _NowDate() & ".txt"
    $txt1 = "Automatischer Reboot "
    $txt2 = "Manueller Reboot "
    $txt3 = " wurde ausgelöst "
    $txt4 = " wurde abgebrochen "
    $txt5 = "am " & _NowDate() & " um " & _NowTime() & " von " & @UserName
    ;------------------------------------------------------------------------
    ;------------------------------- Checkpoint 1 ---------------------------
    ;------------------------------------------------------------------------
    $sec_1 = @UserName
    $manuell = 0
    If $sec_1 = $Benutzer Then
    RunAsSet($Benutzer, $Domaene, $Kennwort)
    For $i = 0 To 19
    If $aSrv[$i] <> "" Then _reboot($aSrv[$i])
    Next
    RunAsSet()
    Else
    ;------------------------------------------------------------------------
    ;------------------------------- Checkpoint 2 ---------------------------
    ;------------------------------------------------------------------------
    $sec_2 = InputBox("Warnung -- Warnung", "Reboot erfordert Passwort.", "", "*", 250, 50)
    $manuell = 1
    If $sec_2 = $Passwort Then
    RunAsSet($Benutzer, $Domaene, $Kennwort)
    For $i = 0 To 19
    If $aSrv[$i] <> "" Then _reboot($aSrv[$i])
    Next
    RunAsSet()
    If MsgBox(4, "Cancel Reboot", "Soll der Reboot abgebrochen werden?", $timeout) = 6 Then
    RunAsSet($Benutzer, $Domaene, $Kennwort)
    For $i = 0 To 19
    If $aSrv[$i] <> "" Then _cancel($aSrv[$i])
    Next
    RunAsSet()
    EndIf
    Else
    Exit
    EndIf
    EndIf
    ;------------------------------------------------------------------------
    ;---------------------- Abschnitt Funktionen - Beginn -------------------
    ;------------------------------------------------------------------------
    Func _reboot($srv)
    Local $hFile
    If $manuell = 1 Then
    Run($reboot & $srv, "", @SW_HIDE)
    $hFile = FileOpen($Log, 9)
    FileWrite($hFile, $txt2 & $srv & $txt3 & $txt5 & @CRLF)
    FileClose($hFile)
    Else
    Run($reboot & $srv01, "", @SW_HIDE)
    $hFile = FileOpen($Log, 9)
    FileWrite($hFile, $txt1 & $srv & $txt3 & $txt5 & @CRLF)
    FileClose($hFile)
    EndIf
    EndFunc ;==>_reboot

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

    Func _cancel($srv)
    Local $hFile
    Run($cancel & $srv, "", @SW_HIDE)
    $hFile = FileOpen($Log, 9)
    FileWrite($hFile, $txt2 & $srv & $txt4 & $txt5 & @CRLF)
    FileClose($hFile)
    EndFunc ;==>_cancel
    ;------------------------------------------------------------------------
    ;----------------------- Abschnitt Funktionen - Ende --------------------
    ;------------------------------------------------------------------------

    [/autoit]

    Edit: und ein paar Fehler beseitigt!

  • Das is ja glatter Wahnsinn ^^

    Wenn man bedenkt wie riesig es vorher war. Ich werde mich dann damit mal intensiver auseinandersetzen um zu verstehen was Du da gemacht hast.

    Aber erstmal vielen Dank. Hätte ich jetzt nicht gedacht das man es soo komprimieren kann, respekt.


    Viele liebe Grüße

    Schnuecks

    PS: Ich werde bestimmt noch einige Fragen dazu haben ^^

  • Habe noch eine Frage und zwar hast Du im folgenden Abschnitt die Variable $hFile verwendet wozu dient diese. Hätte man nicht einfach die $Log nehmen können? Sorry wenn ich blöd frag.

    Spoiler anzeigen
    [autoit]


    Func _reboot($srv)
    Local $hFile
    If $manuell = 1 Then
    Run($reboot & $srv, "", @SW_HIDE)
    $hFile = FileOpen($Log, 9)
    FileWrite($hFile, $txt2 & $srv & $txt3 & $txt5 & @CRLF)
    FileClose($hFile)
    Else
    Run($reboot & $srv, "", @SW_HIDE)
    $hFile = FileOpen($Log, 9)
    FileWrite($hFile, $txt1 & $srv & $txt3 & $txt5 & @CRLF)
    FileClose($hFile)
    EndIf
    EndFunc ;==>_reboot

    [/autoit]

    LG

    Schnuecks

    • Offizieller Beitrag

    Hallo!

    $hfile ist ein Handle (quasi für das Programm eine Verbindung) zu einer Datei, die hier eröffnet wird:
    $hFile = FileOpen($Log, 9)
    Das hat den Vorteil, dass man Optionen mit angeben kann (hier 9) und in diesem Fall Verzeichnisse erstellt werden falls nötig.
    Danach wird diese Verbindung genutzt, um die Daten schreiben und (wichtig!) mit FileClose wieder zu schließen :).

    Ich hoffe, ich konnte es erklären ;).

    peethebee

    p.s. nur ca. 78% kürzer, aber dafür auch besser :D

  • Nur um es richtig zu verstehen.

    die 9 kann ich ja im FileOpen auch schon mitgeben.

    Wenn ich es nur mit FileOpen ,9 machen würde wo wäre der direkte Unterschied.

    [autoit]


    FileOpen($Datei ,9)
    FileWrite($Datei,"irgendwas")
    FileClose($Datei)

    [/autoit]

    Schnuecks

    [autoit]


    $hFile = FileOpen($Datei ,9)
    FileWrite($hFile,"irgendwas")
    FileClose($hFile)

    [/autoit]
    • Offizieller Beitrag

    Das obere Beispiel dürfte eigentlich gar nicht funktionieren, weil es keinen "Bezugspunkt" zwischen FileOpen, FileWrite und FileClose gibt.
    Das es hier trotzdem funktioniert liegt nur daran, dass FileWrite auch mit einem Dateinamen funktioniert, allerdings nur im Append-Mode, den Du hier ja haben möchtest. Insofern könntest Du FileOpen und FileClose ganz weglassen und nur FileWrite($Datei, "irgendwas") schreiben. Ich habe mir aber angewöhnt stets mit einem FileHandle zu arbeiten, weil das eine Fehlerquelle weniger darstellt und IMHO der bessere Programmierstil ist.

  • Wenn jetzt dumm rüberkommt, sorry.

    [autoit]

    FileOpen("text.txt",9) ;öffnet diese Datei. Wird einfach nur geöffnet
    FileWrite("text.txt", "irgendwas") ;beschreibt diese Datei.
    FileClose("text.txt") ;schließt diese wieder. Wird einfach geschlossen

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

    $hFile = FileOpen("text.txt",9) ;öffnet diese Datei. Stellt Verbindung mit FileWrite und Close her.
    FileWrite($hFile, "irgendwas") ;beschreibt diese Datei
    FileClose($hFile) ;schließt diese wieder. Trennt Verbindung zwischen FileWrite und Close.

    [/autoit]

    Ist das so gemeint, ich versuch es nur zu verstehen.

    LG

    Schnuecks

  • So meine lieben,

    das Script funktioniert soweit 1a in der Testumgebung. Wie ich ja oben geschrieben habe soll es wenn der Neustart durchgeführt wurde, mir eine Rückmeldung geben ob der Neustart sauber durchgeführt wurde.

    Meine Ideen dazu wären:

    a.) Evtl. eine Ping oder SNMP Abfrage ob der Server auch wieder da ist.
    b.) Eine zweite Datei die auf dem Server vor dem Neustart installiert wird und dann nachdem Neustart ausgeführt wird um Rückmeldung zu geben.
    c.) Ein Registrykey der gesetzt wird und dann wieder ausgelesen wird.

    Wenn ihr noch Ideen hättet wäre nicht schlecht.

    LG

    Schnuecks

    Einmal editiert, zuletzt von Schnuecks (8. September 2008 um 09:53)

    • Offizieller Beitrag

    Die Methode mit Ping ist wohl am einfachsten zu realisieren. Könnte man auch mit einer GUI verbinden und in regelmäßigen Zeitabständen abfragen, sodass man in der GUI eine Anzeige hat, ob der jeweilige Server On oder Off ist.
    Und wenn Du sowieso schon eine GUI hast, kannst Du gleich noch für jeden Server einen Button einbauen, damit man auch jeden Server einzeln resetten kann. Plus einen Button für alle Server selbstverständlich.

  • Das mit der GUI ist nicht schlecht hatte ich mir auch schon überlegt. Aber dann erstmal weggelassen.
    Allerdings sollte es im automatischen Modus keine geben. Macht ja auch keinen Sinn.

    Mit der Ping-Abfrage ist so eine Sache. Kann man es so verwirklichen das er wartet bis der Ping weg ist und dann wartet bis der Ping wieder da ist.
    Weis is Kauderwelsch aber so stell ich mir das vor.

    LG

    Schnuecks

    • Offizieller Beitrag

    Du Ping'st die Rechner an und wenn eine Antwort kommt, sind sie online, wenn nicht, dann eben nicht. In die Logdatei schreibst Du dann jeweils die Uhrzeit.
    Oder wenn Du das unbedingt nach dem ReBoot haben willst, dann eben eine Zeitschleife, in der die Rechner angepingt werden und wenn sie innerhalb dieser Zeit nicht antworten, dann hat etwas mit dem ReBoot nicht geklappt.

  • Ja ich hätte das schon gerne direkt nach dem Reboot, wär mir am liebsten.

    Muss ich mal sehen wie ich das mit dem Ping hinbekomme, werde mich die Tage mal dransetzen.


    LG und vielen Dank schonmal

    Schnuecks

  • So jetzt bin ich endlich mal dazu gekommen damit weiterzumachen.

    Spoiler anzeigen
    [autoit]

    Func _pingcheck($srv)
    Local $ping = Ping($srv)
    Local $break = 0
    If $ping > 0 Then
    Do
    $ping = Ping($srv)
    $break = $break + 1
    Until $ping = 0 ;or $break = 500
    $hFile = FileOpen($Log, 9)
    FileWrite($hFile, $txt6 & $srv & @CRLF)
    FileClose($hFile)
    EndIf
    If $ping = 0 Then
    Do
    $ping = Ping($srv)
    $break = $break + 1
    Until $ping > 0 ;or $break = 500
    $hFile = FileOpen($Log, 9)
    FileWrite($hFile, $txt7 & $srv & @CRLF)
    FileClose($hFile)
    EndIf
    EndFunc ;==>_pingcheck

    [/autoit]

    Wie ist Eure Meinung dazu funktionieren tut es soweit weis nur nicht ob es die optimale Lösung ist die ich suche.

    Das $break soll nur eine Endlosschleife vermeiden und ist zu Testzwecken drin.

    Edit: Irgendwie läuft es doch nicht so wie ich dachte.


    LG

    Schnuecks

    Einmal editiert, zuletzt von Schnuecks (6. November 2008 um 15:18)

  • Ich habe das komplette Script hier nochmal soweit funktioniert es jetzt wie es soll.

    Es wäre nett wenn ihr es auch mal testen könntet und mir evtl. nochmal Feedback gebt was ich verbessern oder ändern könnte.

    Spoiler anzeigen
    [autoit]

    #cs ---------------------------------------------------------------------

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

    AutoIt Version: 3.2.10.0
    Author: Andreas Heß
    Copyright: Andreas Heß

    Script Function: Reboot mehrerer Server.
    Script Version: 1.7
    Script Date: 03.09.2008

    #ce ---------------------------------------------------------------------

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

    #NoTrayIcon
    #include <Date.au3>

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

    $Domaene = "local.localdomain.com" ;Domäne
    $Benutzer = "test" ;User
    $Kennwort = "test" ;Kennwort
    $Passwort = "test" ;Kennwort für manuellen Start
    $timeout = "10" ;Zeit bis zum Neustart in Sekunden

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

    Global $aSrv[20] = ["test01","test02","test03","test04","test05","","","","","","","","","","","","","","",""]

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

    $reboot = @SystemDir & "\shutdown.exe -r -f -t " & $timeout & " -m \\"
    $cancel = @SystemDir & "\shutdown.exe -a -m \\"

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

    $Log = @ScriptDir & "\logs\Rebootlog vom " & _NowDate() & ".txt"
    $txt1 = "Automatischer Reboot "
    $txt2 = "Manueller Reboot "
    $txt3 = " wurde ausgelöst "
    $txt4 = " wurde abgebrochen "
    $txt5 = "am " & _NowDate() & " um " & _NowTime() & " von " & @UserName
    $txt6 = "Serverstatus "
    $txt7 = " OFFLINE "
    $txt8 = " ONLINE "
    ;------------------------------------------------------------------------
    ;------------------------------- Checkpoint 1 ---------------------------
    ;------------------------------------------------------------------------
    $sec_1 = @UserName
    $manuell = 0
    If $sec_1 = $Benutzer Then
    RunAsSet($Benutzer, $Domaene, $Kennwort)

    For $i = 0 To 19
    If $aSrv[$i] <> "" Then _reboot($aSrv[$i])
    Next

    For $i = 0 To 19
    If $aSrv[$i] <> "" Then _pingdown($aSrv[$i])
    Next

    For $i = 0 To 19
    If $aSrv[$i] <> "" Then _pingup($aSrv[$i])
    Next

    RunAsSet()
    Else
    ;------------------------------------------------------------------------
    ;------------------------------- Checkpoint 2 ---------------------------
    ;------------------------------------------------------------------------
    $sec_2 = InputBox("Warnung -- Warnung", "Reboot erfordert Passwort.", "", "*", 250, 50)
    $manuell = 1
    If $sec_2 = $Passwort Then
    RunAsSet($Benutzer, $Domaene, $Kennwort)

    For $i = 0 To 19
    If $aSrv[$i] <> "" Then _reboot($aSrv[$i])
    Next

    For $i = 0 To 19
    If $aSrv[$i] <> "" Then _pingdown($aSrv[$i])
    Next

    For $i = 0 To 19
    If $aSrv[$i] <> "" Then _pingup($aSrv[$i])
    Next

    RunAsSet()
    EndIf
    EndIf

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

    ;------------------------------------------------------------------------
    ;---------------------- Abschnitt Funktionen - Beginn -------------------
    ;------------------------------------------------------------------------
    Func _pingdown($srv)
    Local $hFile
    Do
    $ping = Ping($srv,250)
    Until $ping = 0
    $hFile = FileOpen($Log, 9)
    FileWrite($hFile, $txt6 & $srv & $txt7 & $txt5 & @CRLF)
    FileClose($hFile)
    EndFunc ;==>_pingdown

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

    Func _pingup($srv)
    Local $hFile
    Do
    $ping = Ping($srv,250)
    Until $ping = 1
    $hFile = FileOpen($Log, 9)
    FileWrite($hFile, $txt6 & $srv & $txt8 & $txt5 & @CRLF)
    FileClose($hFile)
    EndFunc ;==>_pingup

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

    Func _reboot($srv)
    Local $hFile
    If $manuell = 1 Then
    Run($reboot & $srv, "", @SW_HIDE)
    $hFile = FileOpen($Log, 9)
    FileWrite($hFile, $txt2 & $srv & $txt3 & $txt5 & @CRLF)
    FileClose($hFile)
    Else
    Run($reboot & $srv, "", @SW_HIDE)
    $hFile = FileOpen($Log, 9)
    FileWrite($hFile, $txt1 & $srv & $txt3 & $txt5 & @CRLF)
    FileClose($hFile)
    EndIf
    EndFunc ;==>_reboot

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

    #cs Erstmal deaktiviert
    Func _cancel($srv)
    Local $hFile
    Run($cancel & $srv, "", @SW_HIDE)
    $hFile = FileOpen($Log, 9)
    FileWrite($hFile, $txt2 & $srv & $txt4 & $txt5 & @CRLF)
    FileClose($hFile)
    EndFunc ;==>_cancel
    #ce

    [/autoit]

    Die Idee mit der GUI ist auch interessant werde sie evtl. nochmal aufgreifen.


    LG

    Schnuecks

  • Das Script läuft ja soweit, Was mich halt noch so ein bisschen stört ist die Logausgabe.

    Dort steht bei den Einträgen immer die gleiche Zeit. ist es möglich das so zu ändern das die aktuelle Zeit dort steht.
    Ich benutze dazu aus der Date.au3 die Funktion _NowTime()

    Auszug:
    Manueller Reboot Test01 wurde ausgelöst am 10.11.2008 um 12:08:27 von Test
    Serverstatus Test01 ist OFFLINE am 10.11.2008 um 12:08:27 von Test
    Serverstatus Test01 ist ONLINE am 10.11.2008 um 12:08:27 von Test


    LG

    Schnuecks