Systemwiederherstellung Xp

  • Hallo, liebe AutoIt-Gemeinde,
    ich versuche momentan, per AutoIt einen Systemsicherung zu erstellen. Was auch teilweise klappt (mit Script 1), während die anderen beiden Scripte nur bedingt auf mehren PC`s laufen (alle AutoIt-Version 3.3.6.1, alles XP SP3), aber bei manchen kommt eine Fehlermeldung (a la "... ist kein type "Object" oder so). Das ist aber nicht mein Problem, sondern wie um alles in der Welt bekomme ich eine Info, ob, wann und unter welchen Namen dies Sicherung erstellt wurde?
    Man kann (könnte) auf den Laufwerken unter System Volume Information nachschauen, wenn
    1. der Zugriff nicht verweigert würde und
    2. ich diese komische Zahl irgendwoher bekommen würde....

    Ich denke, da haben die Profis hier bestimmt bessere Ideen... , eventuell auch eleganter als meine eigene... Oder? Wie immer vielen Dank im Voraus.

    GLG
    WillyWu.

    Ach ja und hier die "Testversionen":
    Meine:

    Spoiler anzeigen
    [autoit]

    ;################### Systemsicherungspunkt ##############################
    $PID = ProcessExists("rstrui.exe")
    If $PID Then ProcessClose($PID)
    ProcessWaitClose($PID)

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

    Run(@SystemDir & "\Restore\rstrui.exe")
    WinWaitActive("Systemwiederherstellung","")
    Send("!E")
    Sleep (2000)
    Send("!W")
    Sleep(2000)
    Send("Standardsicherung vor Updates")
    Send("{TAB}{TAB}{Enter}")
    ;Sleep(2000)
    ;Send ("!E"); erstellen
    ;? Check if fertig? C:\System Volume Information\_restore{ED2D09BD-82F3-42F8-94F4-D2E4E6C4584D} ???? Woher die Zahl????
    Sleep(5000)
    $RstruiUpd="Systemsicherung wurde erstellt am: "& @MDAY&"."&@MON&"."&@YEAR&" um: "&@HOUR&":"&@MIN&":"&@SEC & @CR
    Tooltip($RstruiUpd)
    WinWaitActive("Systemwiederherstellung","")
    Send("!C")
    ;$PID = Run("rstrui.exe")
    If $PID Then ProcessClose($PID)
    ProcessWaitClose($PID)
    ;??? Auswertung?!??
    ;################### Systemsicherungspunkt ##############################

    [/autoit]


    sowie die 2., die auf manchen PC`s laufen, auf manchen nicht, warum auch immer

    Spoiler anzeigen
    [autoit]

    #include <date.au3>
    ;Unattended System Restore Point
    ;sysrestorepoint.vbs
    ;© Doug Knox - rev 02/11/2002
    ;Downloaded from http://www.dougknox.com
    ;Extracted from original code by Bill James - http://www.billsway.com

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

    $sr = ObjGet("winmgmts:\\.\root\default:Systemrestore")
    MsgBox(1,"Info über ObjGet/winmgmts:\\.\root\default:Systemrestore/",$sr)

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

    $msg = "New Restore Point successfully created." & @CR
    $msg = $msg & "It is listed as: " & @CR
    $msg = $msg & "Standardspeicherung" ;& _NowDate & " " & Time

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

    ;Put a ; in front of the next five lines to disable the Success Failed Prompt.
    If ($sr.createrestorepoint("Standardspeicherung", 0, 100)) = 0 Then MsgBox (1,"INfo",$msg)
    If ($sr.createrestorepoint("Automatic Restore Point", 0, 100)) <> 0 Then MsgBox (1,"Info","Restore Point creation Failed!")

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

    #cs

    [/autoit]

    und diese hier:

    Spoiler anzeigen
    [autoit]

    $text = InputBox("Eingabefenster", "Name des Wiederherstellungspunktes")
    CreateRestorePoint($text)

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

    Func CreateRestorePoint($sRestorePointName)
    Local $objSystemRestore
    $objSystemRestore = ObjGet("winmgmts:{impersonationLevel=impersonate}!root/default:SystemRestore")
    If Not $objSystemRestore.createrestorepoint($sRestorePointName, 0, 100) = 0 Then SetError(1)
    EndFunc

    [/autoit]


    Danke wie immer im Voraus.

    Einmal editiert, zuletzt von WillyWu (28. Februar 2011 um 17:31)

  • Habe dir mal fix ne Funktion gebastelt

    Spoiler anzeigen
    [autoit]

    ; #INDEX# =========================================================================================
    ; SystemRestore Functions
    ; ~~~~~~~~~~~~~~~~~~~~~~~~~~~
    ; _WinWMI_SystemRestore_CreateRestorePoint()
    ; _WinWMI_SystemRestore_GetSystemRestoreProperties()
    ; =================================================================================================

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

    ; #FUNCTION# ======================================================================================
    ; Name .............: _WinWMI_SystemRestore_CreateRestorePoint()
    ; Description ......: Creates an Restorepoint
    ; Syntax ...........: _WinWMI_SystemRestore_CreateRestorePoint(Const $sDescription ,Const $sRestorePointType , Const $sEventType)
    ; Parameters .......: Const $sDescription - Description of the Restorepoint
    ; Const $sRestorePointType - Type of this Restorepoint (Application installed = 0, App uninstalled = 1, Driver installed = 10, App modified = 12, Installation canceled = 13)
    ; Const $sEventType - Eventtype of this Restorepoint (Begin nested system change = 102, begin system change = 100, end nested system change = 103, end system change = 101)
    ; Return values ....: Success - 1
    ; Failure - 0 Sets @error to:
    ; |-1 Connection failed
    ; |-2 Creating SystemRestorePoint failed
    ; Author ...........: Mahagon
    ; Link .............: http://msdn.microsoft.com/en-us/library/…7(v=vs.85).aspx
    ; Link (German).....: http://www.scriptinternals.de/new/ger/suppor…estorePoint.htm
    ; =================================================================================================

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

    Func _WinWMI_SystemRestore_CreateRestorePoint(Const $sDescription, Const $sRestorePointType, Const $sEventType, Const $sComputer = "127.0.0.1")
    $oWMI = ObjGet("winmgmts:{impersonationLevel=impersonate}!\\" & $sComputer & "\root\DEFAULT:SystemRestore")
    If IsObj($oWMI) = 0 Then Return SetError(-1, @error, 0)
    If $oWMI.CreateRestorePoint($sDescription, $sRestorePointType, $sEventType) = 0 Then
    Return 1
    Else
    Return SetError(-2, @error, 0)
    EndIf
    EndFunc ;==>_WinWMI_SystemRestore_CreateRestorePoint

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

    ; #FUNCTION# ======================================================================================
    ; Name .............: _WinWMI_SystemRestore_GetSystemRestoreProperties()
    ; Description ......: Returns requested SystemRestore Properties in a 2D Array
    ; Syntax ...........: _WinWMI_SystemRestore_GetSystemRestoreProperties(Const[ $sFields = "*",Const[ $sRestorePointDescription = "%",Const[ $sComputer = "127.0.0.1"]]])
    ; Parameters .......: Const $sFields - [optional] SystemRestore Properties seperated by comma (default:"*")
    ; $sRestorePointDescription - [optional] Description of the Restorepoint (default:"%")
    ; Const $sComputer - [optional] Target Computer (default:"127.0.0.1")
    ; Return values ....: Success - requested SystemRestore Properties in a 2D Array
    ; Failure - 0 Sets @error to:
    ; |-1 Connection failed
    ; |-2 WMI Class not found/no access
    ; |-3 No matches found
    ; Author ...........: Mahagon
    ; Link .............: http://msdn.microsoft.com/en-us/library/…1(v=vs.85).aspx
    ; Link (German).....: http://www.scriptinternals.de/new/ger/suppor…stemRestore.htm
    ; =================================================================================================

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

    Func _WinWMI_SystemRestore_GetSystemRestoreProperties(Const $sFields = "*", $sRestorePointDescription = "%", Const $sComputer = "127.0.0.1")
    $oWMI = ObjGet("winmgmts:{impersonationLevel=impersonate}!\\" & $sComputer & "\root\DEFAULT")
    If IsObj($oWMI) = 0 Then Return SetError(-1, @error, 0)
    $oList = $oWMI.ExecQuery("SELECT " & $sFields & " FROM SystemRestore WHERE Description LIKE '" & $sRestorePointDescription & "'", "WQL")
    If IsObj($oList) = 0 Then Return SetError(-2, @error, 0)
    $aFields = StringSplit($sFields, ",", 2)
    If $sFields = "*" Then
    $iaFieldscount = 5
    Else
    $iaFieldscount = UBound($aFields)
    EndIf
    If $oList.Count = 0 Then Return SetError(-3, @error, 0)
    Local $aReturn[$oList.Count][$iaFieldscount]
    $iCount = 0
    For $oItem In $oList
    With $oItem
    If $sFields = "*" Then
    For $iFields = 0 To $iaFieldscount - 1
    Switch $iFields
    Case 0
    $aReturn[$iCount][$iFields] = .CreationTime
    Case 1
    $aReturn[$iCount][$iFields] = .Description
    Case 2
    $aReturn[$iCount][$iFields] = .EventType
    Case 3
    $aReturn[$iCount][$iFields] = .RestorePointType
    Case 4
    $aReturn[$iCount][$iFields] = .SequenceNumber
    EndSwitch
    Next
    Else
    For $iFields = 0 To UBound($aFields) - 1
    Switch $aFields[$iFields]
    Case "CreationTime"
    $aReturn[$iCount][$iFields] = .CreationTime
    Case "Description"
    $aReturn[$iCount][$iFields] = .Description
    Case "EventType"
    $aReturn[$iCount][$iFields] = .EventType
    Case "RestorePointType"
    $aReturn[$iCount][$iFields] = .RestorePointType
    Case "SequenceNumber"
    $aReturn[$iCount][$iFields] = .SequenceNumber
    EndSwitch
    Next
    EndIf
    EndWith
    $iCount += 1
    Next
    Return $aReturn
    EndFunc ;==>_WinWMI_SystemRestore_GetSystemRestoreProperties

    [/autoit]

    Hoffe das es dem entspricht, was du gesucht hast :)

    21 is only half the truth.

  • Hallo, Mahagon,

    vielen lieben Dank für rasche Antwort. Jetzt aber bitte nicht lachen oder böse sein, aber ich bin Anfänger und schaue fasziniert in Deinen Code der Funktion, meilenweit weg vom verstehen. Deshalb meine Frage - nicht böse sein: der Code läuft ohne Fehler, aber ich kann nicht wirklich viel damit anfangen, sorry. Wie muss ich da jetzt eingeben, wie ich Sicherung nennen will und wie bekomme ich das Ergebnis? Der Name würde ich tippen muss unter $sDescription eingegeben werde, tippe ich, mit den 2 anderen Sachen dort kann ich schon nix mehr anfangen. Ganz zu schweigen von der Funktion, die mir dann das Ergebnis zeigen soll.....

    Riesiges Sorry, aber so schnell und super das Forum hier ist, es sind auch vereinzlte Laien und Anfänger wie ich darunter, die nicht alle Hilfen verstehen.....

    Danke erneut im Voraus.

    LG
    WillyWu.

  • Kein Problem :)
    Die Beschreibung der Parameter die du übergeben kannst, findest du jeweils über der Funktion.
    Hab dir mal ein Beispiel gebastelt ;)

    Spoiler anzeigen
    [autoit]

    _WinWMI_SystemRestore_CreateRestorePoint("Sicherung", 0, 100) ;erstellt den Sicherungspunkt "Sicherung"
    If @error Then
    ConsoleWrite("Erstellen des Systemwiederherstellungspunktes nicht erfolgreich" & @CRLF & "Error: " & @error & @CRLF)
    Else
    ConsoleWrite("Erstellen des Systemwiederherstellungspunktes erfolgreich" & @CRLF)
    EndIf

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

    $aReturnSRP = _WinWMI_SystemRestore_GetSystemRestoreProperties("Description,CreationTime", "Sicherung") ;Gibt ein 2D Array mit Description und Creationtime von den Sicherungen namens "Sicherung" zurück
    For $iy = 0 To UBound($aReturnSRP) -1
    For $ix = 0 To UBound($aReturnSRP,2) -1
    ConsoleWrite($aReturnSRP[$iy][$ix] & @CRLF)
    Next
    ConsoleWrite("--" & @CRLF)
    Next

    [/autoit]

    Du solltest dir vielleicht auch die Links in den Funktionen anschauen ;)

    21 is only half the truth.

    Einmal editiert, zuletzt von Mahagon (27. Februar 2011 um 15:27)

  • Hallo, Mahagon,
    mein Gott, seid IHr schnell (und super). Der Hinweis mit den Links ist super, das hatte ich vorhin glatt übersehen. Und dank Deiner Hilfe verstehe ich jetzt auch "etwas" mehr von der Funktion und wollte die Frage otimistisch schon auf gelöst stellen, aber: der PC führt Script zwar fehlerfrei aus (beendet es zwar nicht, aber vllt. muss das so sein), doch erstellt nicht mal ansatzweise eine Sicherung. Folglich: Erstellen des Systemw.h.Punktes nicht erfolgreich & Error - 1...

    Was mache ich denn jetzt schon wieder falsch ;(

    Erneut lieben Dank im Voraus.
    LG
    WW.

  • Also bei mir klappt es einwandfrei.
    Eventuell fehlt ein #requireadmin, falls du nicht ausreichend Rechte hast.
    Ansonsten kannst du ja mal die wbemtest.exe aufrufen und dich einmal mit der WMI verbinden ( beim verbinden in den Namespace root/default wechseln!)
    Da kannst ja mal die Klassen aufzählen lassen. Dort müsstest du dann SYSTEMRESTORE finden :).

    21 is only half the truth.

  • da ich mich auch interessiere bei mir klappt es auch

    consolen ausgabe

    Erstellen des Systemwiederherstellungspunktes erfolgreich
    Sicherung
    20110227152028.500000-000
    --
    Sicherung
    20110227153157.468750-000

    ich denke mal die ausgabe ist jahr,monat ,tag

  • Hallo, mahagon, hallo sillyboy,

    erstmal danke wieder. Hier lernt man ja Sachen *gg*.... Habe die wbemtest.exe aufgerufen und mich nach Deiner Anleitung verbunden. Startet auch, aber dann kommt Fehlermeldung: Fehler Nummer: 0x80080005, Einrichtung: Windows, Beschreibung. Starten des Servers fehlgeschlagen....

    Also wird es wohl daran liegen. Danke Euch allen trotzdem.
    LG
    WillyWu.

  • Hallo, Mahagon,

    erneut Danke Dir. Wieder hochinterressante Seite, die Du da zitierst. Leider weigert sich mein eigener PC standhaft, irgendeinen Reparatur-Versuch davon zu akzeptiern, selbst die Diagnose stürzt ab (heul...). Ist aber nicht so extrem schlimm, da ich Dein Script heute auf mehrenen anderen PC`s getestet habe (für die ich das brauche) und dort läuft alles anstandslos. Weshalb ich meinen eigenen PC jetzt ignoriere und das Ganze auf gelöst stelle.

    Vielen Dank nochmals an Dich und all die vielen Helferlein.
    LG
    WillyWu