Lokale Benutzer löschen

  • Hallo liebe Community,

    wie der Titel schon sagt, muss ich mit AutoIt (da führt kein Weg dran vorbei!) fast alle Profilordner auf mehreren XP-Rechnern löschen.
    Mein Problem hierbei ist, dass sich das Script entweder komplett aufhängt oder es einfach irgendwann abbricht.
    Ich habe schon mehrere Alternativen versucht, aber komme einfach nicht zum Ziel.

    Könnt ihr mir da weiter helfen? Wenn ja, dann bitte auch die Antworten erklären. Ich muss sie meinem Vorgesetzten dann später auch erläutern können ;)

    HIer meine Funktion:

    [autoit]

    #RequireAdmin
    #include <Array.au3>
    #include <File.au3>

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

    $profil = _FileListToArray("C:\Dokumente und Einstellungen\")

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

    For $i = 1 To UBound($profil) - 1
    If $profil[$i] = "Administrator" Or $profil[$i] = "Default User" Or $profil[$i] = "All Users" Or $profil[$i] = "wsadm" Then
    Sleep (1)
    Else
    $isize = DirGetSize("C:\Dokumente und Einstellungen\" & $profil[$i])
    DirRemove ("C:\Dokumente und Einstellungen\" & $profil[$i], 1)
    ProgressOn ("Bitte warten", $profil[$i] & " wird gelöscht.")
    $inewsize = 1
    Do
    ProgressSet ($inewsize/$isize*100)
    $inewsize = DirGetSize("C:\Dokumente und Einstellungen\" & $profil[$i])
    Until $inewsize = 0 or @error
    ProgressOff ()
    EndIf
    Next

    [/autoit]
  • Hi,

    wieso sparste dir nicht das ganze Zeug nach dem "Else" und nimmst nur

    [autoit]

    DirRemove ("C:\Dokumente und Einstellungen\" & $profil[$i], 1)

    [/autoit]


    ?

    oder bau statt dem Dateigröße-Check ein

    [autoit]

    if FileExists() then

    [/autoit]


    ein.

    Könnte mir vorstellen, dass es verreckt, wenn der Ordner nicht mehr existiert und du die Größe abfragen willst.

    €dit: Richtige Vermutung:

    [autoit]

    Until $inewsize = -1 or @error

    [/autoit]

    Dann müssts laufen :)

    €dit2: Die Erklärung:

    [autoit]

    $size = DirGetSize(@ScriptDir & "\test_delete")

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

    MsgBox(0,"",$size)

    [/autoit]

    Wenn Ordner vorhanden kommt die entsprechende Zahl.
    Wenn Ordner nicht vorhanden kommt "-1".

    Gruß
    x0r

    Simon nörgelt, Simon nervt - aber Simon verbessert die Welt. Glaubt er.

    2 Mal editiert, zuletzt von x0r (7. Dezember 2012 um 10:43)

  • Die Registry wird im Script mit bereinigt ;)
    Das oben ist auch nur ein kleiner Ausschnitt aus dem kompletten Script.

    x0r: Ich werde es gleich mal ausprobieren. Danke

  • Hi,

    wieso sparste dir nicht das ganze Zeug nach dem "Else" und nimmst nur

    [autoit]

    DirRemove ("C:\Dokumente und Einstellungen\" & $profil[$i], 1)

    [/autoit]


    ?

    Weil ich dann Probleme hatte, dass das Script vozeitig beendet wurde und somit auch der Löschvorgang.

  • Mit dem Progress nicht, da er solange der Löschvogang läuft ja das Fenster mit dem fortschritt auf hat.
    So halte ich ihn in der Funktion fest, bis er Fertig ist ^^
    Wenn es dafür eine bessere Lösung gibt, sagt sie mir bitte :D

  • vielleicht eher nicht ganz optimal, wenn doch auch ziemlich interessant :)

    [autoit]

    dim $delbat = @ScriptDir & "\del.bat"
    dim $delordner = @ScriptDir & "\test_delete"

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

    FileWrite($delbat,"rmdir /s /q " & $delordner)

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

    ShellExecuteWait($delbat)
    MsgBox(0,"gelöscht",$delordner)

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

    FileDelete($delbat)
    MsgBox(0,"bat weg",$delbat)

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

    und jetz schlagt mich bitte nicht :D

    €dit die 300ste: klappt nur mit Batch -.-

    Simon nörgelt, Simon nervt - aber Simon verbessert die Welt. Glaubt er.

    Einmal editiert, zuletzt von x0r (7. Dezember 2012 um 11:18)

  • so funktionierts doch und ob du jetz ne batch anlegst und danach wieder löscht, ist doch wurscht.
    das script bleibt so lange stehen, bis die batch wieder geschlossen ist und eben der jeweilige löschvorgang beendet.

    also warum "versuch"?

    Simon nörgelt, Simon nervt - aber Simon verbessert die Welt. Glaubt er.

  • Ich habe deinen Beitrag wohl eher falsch gedeutet ;)
    Ich kann mal gucken ob man diese Lösung akzeptieren würde, denke aber eher nicht.

    Gibt es denn nicht noch eine Möglichkeit das gane "intern" von AutoIt zu machen?

  • kannst ja die datei-attribute der batch auf "versteckt" setzen, dann sieht man die nicht mehr xD

    spass beiseite.. schätze mal dein ansatz ist nicht schlecht, hast du denn die sache mit "= -1" statt "= 0" versucht?
    -> datei/ordner gelöscht = -1

    Simon nörgelt, Simon nervt - aber Simon verbessert die Welt. Glaubt er.

  • Muss ich gleich noch mal ein wenig rum laufen und testen aber ich habe es schon übernommen.
    Mal sehen ob das so was wird.