Script nach neustart fortsetzen

  • Hallo,

    immer noch ein Teil meines gesamten Scripts...

    es soll am Anfang der Computername umbenannt werden und anschließend in die Domäne aufgenommen werden.
    Da dies ohne weiteres nicht mit autoit möglich ist, wollte ich jetzt einfach wenigstens die Fenster automatisch öffnen lassen sodas man
    nur noch mit der Tastatur den Namen eingeben muss.
    Bekannt ist ja das Windows System anschließend einen Neustart erfordern. Um nicht jedes mal das Script von vorne zu starten soll nach dem Neustart die nächste Aktion automatisch fortfahren.

    Scenario: Neuer Mitarbeiter, die Rechner müssen personalisiert werden, der ablauf immer gleich bis auf die Namen die angepasst werden müssen

    Image PC fährt hoch-->PC Namen ändern-->Neustart-->Script fortsetzen-->zur Domäne hinzufügen-->Neustart-->Script fortsetzen-->Neustart--> zu lokalen Gruppen hinzufügen(Adminrechte)-->Neustart-->Script fortsetzen-->andere Benutzereinstellungen-->Adminrechte entfernen-->Neustart-->auflisten von aufgetretenden Fehlern usw.

  • Spoiler anzeigen
    [autoit]

    #Region - Timestamp
    ;2011-09-21 09:33:35
    #EndRegion

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

    Global $run
    If IsArray($CMDLine) And $CMDLine[0] >= 1 Then
    If $CMDLine[1] = 1 Then
    $run = "erste"
    ElseIf $CMDLine[1] = 2 Then
    $run = "zweite"
    Else
    MsgBox(0,0, "Unbekannter Parameter!" & @CRLF & "Ende!")
    Exit
    EndIf
    Else
    MsgBox(0,0, "Kein Parameter übergeben!"& @CRLF & "Ende!")
    Exit
    EndIf

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

    MsgBox(0,0, "Das ist der " & $run & " Durchlauf")

    [/autoit]


    In SciTE Shift+F8 drücken und als ersten Startparameter 1 oder 2 eingeben.
    Den Autostart realisierst du über den Windows Autostartordner. Eine .bat mit dem Startaufruf für dein Skript da reinzuschreiben sollte reichen.

  • kannst du mir kurz die technik dahinter erklären?

    wie merkt es sich denn ob er nach dem Neustart zuletzt bei Parameter 1 oder 2 war?

  • ich würde beim ersten Aufruf einen Regkey schreiben
    und zwar unter "HKEY_LOCAL_MACHINE\ Software\ Microsoft\ Windows\ CurrentVersion\ RunOnce" welcher dann auch das Programm wieder aufruft.
    Dann dann beim zweiten Aufruf den zuvor geschriebenen Regkey prüfen,
    dann weißt Du das es der 2. Aufruf ist wenn der regkey existiert und dabei auch den Regkey wieder entfernen.

    Gruß Dietmar

    Achtung Anfänger! :whistling:

    Betrachten des Quellcodes auf eigene Gefahr, bei Übelkeit,Erbrechen,Kopfschmerzen übernehme ich keine Haftung. 8o

  • Um es dir enfacher zu machen, würde ich eine kleine Datei empfelen, die die Durchlaufnummer speichert, und ein Skript, welches sich in den Autostart fügt, und nach bestimmter ANzahl an Durchläufen Selbstmord begeht.
    MfG

  • okay das klingt logisch,

    wenn ich das Parameter Fenster habe, muss ich dann in die Felder die Zeile eintragen bei der z.B. bei 2 angefangen werden soll?
    oder was trag ich in die Felder ein?

    oder arbeite ich jetzt doch mit verschiedenen .exe?

  • hab das mal kurz überflogen diese variante könnte dir helfen
    da ich mir nicht sicher bin ob die CMD nach dem neutstart noch existiert, hab ich dir ne alternative gebastelt

    [autoit]


    ;Script start --->
    IF
    ;Script fortsetzen-->
    fileExists("datei.ini") then
    ; geänderte pc-name auslesen für rest des programmes
    $pc_name = iniread("datei.ini","start","pc-name","default")
    #cs
    $pc_name dient als schlüssel um dem programm zu sagen wie es weitergehn soll
    ....rest des programmes....

    #ce
    ;vor ende des programm
    FileDelete("datei.ini")
    ;damit das ganze wiederholt werden kann
    else
    ;//PC Namen ändern//
    -->>iniwrite("datei.ini","start","pc-name","value")
    #cs
    Hier wird nach nichtgefundener datei deine werte für den neustart gesetzt
    #ce
    ;-->Neustart-->

    [/autoit]
  • Man kann es sich auch umständlicher machen, als es sein muss.
    Im Autostatt Ordner bedarf es lediglich einer .bat ala ...

    Code
    @echo off
    start "" "C:\Pfad\zu\deiner.exe" /2


    DIe kann dein Programm dorthin schreiben.
    Der Parameter "2" wird vom Skript ausgewertet und gut.

    Wozu noch irgendwelche Registrierungseinträge anlegen oder gar das ganze Programm in den Autostart packen und eine weitere Datei auswerten lassen?

  • ja das kilingt super
    danke an alle die hier aktiv am proggen waren :)

    allerdings nochmal die Frage zum Parameter
    wenn ich SHIFT+F8 drücke geht ja nunmal das Fenster auf...trage ich dann da die Zeile ein ab wo Parameter 2 beginnt usw.?

    es müsste nur lediglich die .bat vor jedem neustart im autostart mit dem nächsten Parameter angepasst werden richtig?


  • wenn ich SHIFT+F8 drücke geht ja nunmal das Fenster auf...trage ich dann da die Zeile ein ab wo Parameter 2 beginnt usw.?


    Nein, du trägst dort den/die Parameter ein. Shift+F8 dient eigentlich nur zum Testen des Skripts. SciTE startet dann das Skript mit den angegebenen Parametern. Praktisch so, wie deine bat es später tun würde.

    Zitat

    es müsste nur lediglich die .bat vor jedem neustart im autostart mit dem nächsten Parameter angepasst werden richtig?


    Richtig. Du brauchst lediglich eine Funktion, die die bestehende Datei löscht und sie wieder mit dem neuen Parameter schreibt. Soll kein Neustart mehr erfolgen, musst du die Datei natürlich ebenfalls aus dem Autostart entfernen.

  • Ach ja, eine Funktion um den PC in die Domäne aufzunehmen gibt es auch schon. _AD_JoinDomain in meiner AD UDF (Download siehe bitte meine Signatur).

  • Darf ich mal fragen was Ihr gegen runOnce habt wo der regkey doch für genaus so etwas ist,
    es geht doch vermutlich um das Fortsetzten einer Installation, welche einen Neustart braucht. ?(

    Da finde ich eine zusätzliche Datei eher hässlich. :)
    Oder send es mehrere Installationen mit mehreren Neustarts auf demselben PC?

    Achtung Anfänger! :whistling:

    Betrachten des Quellcodes auf eigene Gefahr, bei Übelkeit,Erbrechen,Kopfschmerzen übernehme ich keine Haftung. 8o

  • Hier, hab dir was kleines geschrieben. Braucht einfach dann nachdem deine Sachen in die Case rein hast in den Autostart zu legen.

    Was macht das ganze

    - nach Neustart wieder automatisch Anmeldung als Admin
    - setzt wie gewünscht am nächsten Schritt das Script vor
    - löscht sich Spurlos nach Abarbeitung alles Schritt selbt

    Spoiler anzeigen
    [autoit]

    $adminname = "admin"
    $adminpass = "pass"

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

    If FileExists(@ScriptDir & "\status.ini") Then
    $wert = IniRead(@ScriptDir & "\status.ini", "aktion")
    Else
    IniWrite(@ScriptDir & "\status.ini", "aktion", "neachster", "2")
    $wert = 1
    EndIf

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

    Switch $wert
    Case 1
    RegWrite("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon", "DefaultUserName", "REG_SZ", $adminname)
    RegWrite("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon", "DefaultPassword", "REG_SZ", $adminpass)
    RegWrite("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon", "AutoAdminLogon", "REG_SZ", "1")
    ;PC Namen ändern
    Case 2
    ;zur Domäne hinzufügen
    IniWrite(@ScriptDir & "\status.ini", "aktion", "neachster", "3")
    Case 3
    ;zu lokalen Gruppen hinzufügen(Adminrechte)
    IniWrite(@ScriptDir & "\status.ini", "aktion", "neachster", "4")
    Case 4
    ;andere Benutzereinstellungen
    IniWrite(@ScriptDir & "\status.ini", "aktion", "neachster", "5")
    Case 5
    ;auflisten von aufgetretenden Fehlern
    IniWrite(@ScriptDir & "\status.ini", "aktion", "neachster", "6")
    Case 6
    FileDelete(@ScriptDir & "\status.ini")
    RegWrite("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon", "DefaultUserName", "REG_SZ", "")
    RegWrite("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon", "DefaultPassword", "REG_SZ", "")
    RegWrite("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon", "AutoAdminLogon", "REG_SZ", "0")
    _SelfDelete()
    EndSwitch

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

    Func _SelfDelete($iDelay = 0)
    Local $sCmdFile
    FileDelete(@TempDir & "\scratch.bat")
    $sCmdFile = 'ping -n ' & $iDelay & '127.0.0.1 > nul' & @CRLF _
    & ':loop' & @CRLF _
    & 'del "' & @ScriptFullPath & '" > nul' & @CRLF _
    & 'if exist "' & @ScriptFullPath & '" goto loop' & @CRLF _
    & 'del ' & @TempDir & '\scratch.bat'
    FileWrite(@TempDir & "\scratch.bat", $sCmdFile)
    Run(@TempDir & "\scratch.bat", @TempDir, @SW_HIDE)
    EndFunc ;==>_SelfDelete

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

    Andy hat mir ein Schnitzel gebacken aber da war ein Raupi drauf und bevor Oscar das Bugfixen konnte kam Alina und gab mir ein AspirinJunkie.

  • naja sehe nicht unbedingt den zwingenen Grund und ursprünglich ging es ja ur um den Neuaufruf.
    Bist Du Dir sicher das Du so oft neustarten musst das ist ja selbst für Windows schon ein kranker Zustand.
    Ansonsten http://g prestaging WDS (RIS) etc :)

    Achtung Anfänger! :whistling:

    Betrachten des Quellcodes auf eigene Gefahr, bei Übelkeit,Erbrechen,Kopfschmerzen übernehme ich keine Haftung. 8o

  • ja nach dem ändern von PC Namen und Domain ist immer jeweils ein Neustart erforderlich... --> erbärmliches Windows ;)
    außerdem werden die Rechte erst nach einem Neustart gültig --> 3x neustart
    das gleiche beim entziehen der rechte --> wirksam erst nach neustart

  • außerdem werden die Rechte erst nach einem Neustart gültig --> 3x neustart

    force policy update kann helfen oder nur ein Logon/off
    Für Domänenbeitritt/austritt braucht man auch einen reboot, deswegen google mal nach prestaging und WDS und solchen sachen
    wenn du schon ne Domäne hast dann nutze diese auch.

    Achtung Anfänger! :whistling:

    Betrachten des Quellcodes auf eigene Gefahr, bei Übelkeit,Erbrechen,Kopfschmerzen übernehme ich keine Haftung. 8o

  • Nein, das ist eine Funktion die ebenfalls oben dabei ist ;)

    Andy hat mir ein Schnitzel gebacken aber da war ein Raupi drauf und bevor Oscar das Bugfixen konnte kam Alina und gab mir ein AspirinJunkie.

  • okay gut
    gibt es ne möglichkeit das Passwort nicht unbedingt im Klartext in den Quellcode zu schreiben?^^