Profil auf Server erneuern

  • Hallo,

    ich habe eine Frage und hoffe hier vielleicht ein paar Tipps zu bekommen.

    Ziel:
    Profil auf dem Server erneuern

    Schritte:
    - per Hostname auf den Rechner übers Netzwerk zugreifen
    - Serverprofil des Benutzers liegt unter "Dokumente und EInstellungen"
    - Neuen Ordner erstellen mit den gleichen Profilnamen + _sic ( z.B. den Ordner Schmidt_sic ) und aus dem schon vorhanden Ordner alle Dateien in den neu angelegten Ordner ( Schmidt_sic ) kopieren.
    - Dateien aus dem alten Ordner löschen.

    Wichtig:
    Es sollte Abfragen geben
    - Ist der Rechner zu erreichen ?
    - Ist der Ordner Schmitd_sic erstellt worden ?
    - sind die Dateien vom alten Ordner in den neuen Ordner alle kopiert worden ?
    - Erst wenn die Dateien alle kopiert worden, dürfen diese aus dem alten Ordner gelöscht werden.

    Vorgehen:
    Es soll eine exe werden, wenn ich diese starte, soll nur eine eingabe kommen wo ich den Hostnamen eintragen muß. Sobald ich den Hostnamen eintrage, soll die Meldung kommen ob der Rechner zu erreichen ist, oder nicht.
    Wenn ja, möchte ich per Button die Profilerneuerung starten, entweder mit einem klick, wo dann nacheinander die schritte automatisch ausgeführt werden, oder mit mehreren Buttons, z.b.:
    Button "Ordner anlegen" -> Rückgabe "Ornder wurde angelegt"
    Button "Dateien Kopieren" -> Rückgabe "Dateien wurden in den neuen Ordner übertragen"
    Button "Dateien aus dem alten Ordner löschen" -> Rückgabe "Die Dateien wurden aus dem alten Ordner gelöscht"

    Hat da vielleicht eine Idee, oder könnte mit bei dem Script helfen, das würde uns die Arbeit sehr erleichtern.

    Vielen Dank
    Micha

    2 Mal editiert, zuletzt von michach (29. November 2010 um 09:49)

  • Sorry, da habe mich falsch ausgedrückt.

    mit "uns" meine ich meine Kollegen in der Firma. Programmiert wurde noch garnichts, ich bin alleine :(
    Habe damit noch nicht angefangen, bin allerdings auch noch anfänger in AutoIt.
    Ich Arbeite seit ca. 15 Jahren mit PHP und habe auch schon mit C++ etwas gearbeitet, somit sind mit Schleifen, Funktionen und Variablen nicht fremd, allerdings ist es doch etwas anders unter AutoIt :)

    Es soll mir auch keiner ein fertiges Scrippt machen, obwahl das auch nicht schlecht wäre *hehe
    Aber vielleicht etwas Hilfe im Ansatz oder paar Quellen wo ich mir das etwas zusammen suchen kann.

    Gruß
    micha

  • hi,

    hab hier mal einen ansatz für dich ....

    Spoiler anzeigen
    [autoit]


    #include <file.au3>

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

    ;-----------------
    If Not IsAdmin() Then
    ; Bis Version 3.2.10.0
    ;~ RRunAsSet("", @LogonDomain, "")
    ;~Run(@ScriptFullPath, @ScriptDir, @SW_HIDE)
    ;~ RunAsSet()
    ; AB Version 3.2.12.0
    RunAs("user", @LogonDomain, "pass", 0, @ScriptFullPath, @ScriptDir, @SW_HIDE)
    Exit
    EndIf

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

    If IsAdmin() Then
    ;MsgBox(0, "", "Admin-Rechte erkannt.",1)
    EndIf
    ;-----------------

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

    Dim $clients

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

    $file = @ScriptDir & "\clients.txt"

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

    If Not _FileReadToArray($file,$clients) Then
    MsgBox(4096,"Error", " Error reading log to Array error:" & @error)
    Exit
    EndIf
    For $x = 1 to $clients[0]
    ;Msgbox(0,'Record:' & $x, $clients[$x],1)

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

    $var = Ping($clients[$x],250)
    If $var = 1 Then; also possible: If @error = 0 Then ...
    ;Msgbox(0,"Status",$clients[$x] & " is Online",1)

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

    $quelle = "V:\test.exe"
    $quelle1 = "V:\test1.exe"
    $ziel = "\\" & $clients[$x] & "\c$\test\bin\"

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

    If Not FileExists($ziel) Then
    DirCreate ($ziel)
    _copy($quelle,$ziel)
    _copy($quelle1,$ziel)

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

    ;MsgBox(0,$clients[$x], "not exist, wird angelegt ...",1)
    Else
    If $ver1 > $ver2 Then
    _copy($quelle,$ziel)
    _copy($quelle1,$ziel)
    ;MsgBox(0,$clients[$x], "wird kopiert ...",1)
    _FileWriteLog(@ScriptDir & "\info.log",$clients[$x] & " -- erfolgreich" & @CRLF )

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

    Else
    ;MsgBox(0,$clients[$x], $clients[$x] & " aktuell ...",1)

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

    _FileWriteLog(@ScriptDir & "\info.log",$clients[$x] & " -- aktuell" & @CRlf )
    EndIf
    EndIf

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

    Else
    _FileWriteLog(@ScriptDir & "\info.log",$clients[$x] & " -- fehler" & @CRlf )
    ;Msgbox(0,"Status",$clients[$x] & " is Not Online",1)
    EndIf

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

    Next

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

    ;MsgBox (0,"","Abgeschlossen")

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

    ;öffnet log
    ShellExecute("info.log", "", @ScriptDir)

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

    Func _copy($fromFile, $tofile)
    Local $FOF_RESPOND_YES = 16
    Local $FOF_SIMPLEPROGRESS = 256
    $winShell = ObjCreate("shell.application")
    $winShell.namespace ($tofile).CopyHere ($fromFile, $FOF_RESPOND_YES)
    If @error Then
    MsgBox(0, "", "the previous line got an error.")
    EndIf
    EndFunc ;==>copy

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

    in der client.txt stehen die hostnamen der pc's
    Bsp:
    ---txt begin---
    client1
    client 2
    client 3
    client 4
    ---txt end-----

    zweites beispiel

    Spoiler anzeigen
    [autoit][/autoit] [autoit][/autoit] [autoit]

    #Include <File.au3>
    #Include <Array.au3>

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

    $FileList_001 =_FileListToArray("\\server\d$\Users\")
    If @Error=1 Then
    MsgBox (0,"","No Files\Folders Found.")
    Exit
    EndIf

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

    ;_ArrayDisplay($FileList_01,"$FileList")
    ;MsgBox(0,"",$FileList[0])
    ;---------------

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

    ;Prozentsatz 43.478 = 100 / (230 / 100)
    ;$prozent = 100 / ($FileList_01[0] /100)
    ;MsgBox(0,"",$prozent)
    ;$prozent = StringLeft ( $prozent, 2)
    ;MsgBox(0,"",$prozent)

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

    Global $w1,$V

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

    $w1 = ($FileList_001[0] /100) ;$w1 = 1% von $FileList_01[0]
    ;MsgBox(0,"",$FileList_01[0] & " /" & $w1)

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

    ProgressOn("Progress Meter - Profile (Server)", " ... lösche Dateien ...", "0 %")

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

    For $x = 1 to $FileList_001[0]
    ;Msgbox(0,'Record:' & $x, $FileList_01[$x],1)

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

    ;\FinePrint-Dateien\Forms

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

    $FileList_002 =_FileListToArray("\\server\d$\Users\" & $FileList_001[$x] & "\Eigene Dateien\", "*.txt",1)
    ;If @Error=1 Then
    ; MsgBox (0,"","No Files\Folders Found.",1)
    ;Exit
    ;EndIf

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

    ;_ArrayDisplay($FileList_002,"$FileList")
    ;If FileExists("\\server\d$\Users\" & $FileList_002[$x] & "\Eigene Dateien\") Then

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

    FileDelete("\\server\d$\Users\" & $FileList_001[$x] & "\Eigene Dateien\*.txt")
    ;MsgBox(0,"",$FileList_01[$x] & " gelöscht",1)
    ;Else
    ; MsgBox(0,"","Dir not Exist",1)
    ;EndIf
    $x1 = Round( $x / $w1, 0)
    ;MsgBox(0,"", $x1 & " %",1)

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

    sleep(200)
    ProgressSet( $x1, $x1 & " %")

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

    Next
    ProgressSet(100 , "Done", "Complete")
    sleep(500)
    ProgressOff()

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

    gruß gmmg


    Edit Oscar: Spoiler gesetzt.

    2 Mal editiert, zuletzt von Oscar (30. November 2010 um 10:38)

  • Hallo, vielen Dank für den Ansatz. Habe jetzt folgendes gemacht, das mit dem Admin habe ich erstmal raus genommen, arbeite eh als Domain Admin.
    Von der Quelle soll hier jetzt eine Sicherung des Profils "doduck" erfolgen. Bei dem Script bekomme cih allerdings die Fehlermeldung:

    AutoIt Error:
    Line 399 (test.exe)
    Error: Error in expression.

    Kann es vielleicht an der Quell Angabe liegen, entweder an "c$" oder an "Dokumente und Einstellungen", da dort Leerzeichen sind ?
    Wenn ja, wie sollte ich das besser lösen ?

    Spoiler anzeigen
    [autoit]


    #include <file.au3>
    Dim $client
    $client = InputBox("Hostname", "Gebe hier bitte den Hostnamen ein:")
    $var = Ping($client,250)
    If $var = 1 Then; also possible: If @error = 0 Then ...
    Msgbox(0,"Status",$client & " ist Online",1)
    ;Else
    ; Msgbox(0,"Status",$client & " ist nicht Online",1)
    ;EndIf
    $quelle = "\\"$client&"\c$\Dokumente und Einstellungen\doduck\*"
    ;$quelle1 = "D:\test1.exe"
    ;$ziel = "\\" & $client & "\c$\test\bin\"
    $ziel = "\\"$client&"\c$\Dokumente und Einstellungen\doduck.sic"

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

    If Not FileExists($ziel) Then
    DirCreate ($ziel)
    _copy($quelle,$ziel)
    ;_copy($quelle1,$ziel)
    ;MsgBox(0,$clients[$x], "not exist, wird angelegt ...",1)
    Else
    If $quelle > $ziel Then
    ;If $ver1 > $ver2 Then
    _copy($quelle,$ziel)
    ;_copy($quelle1,$ziel)
    MsgBox(0,$client, "wird kopiert ...",1)
    _FileWriteLog(@ScriptDir & "\info.log",$client & " -- erfolgreich" & @CRLF )
    Else
    MsgBox(0,$client, $client & " aktuell ...",1)
    _FileWriteLog(@ScriptDir & "\info.log",$client & " -- aktuell" & @CRlf )
    EndIf
    EndIf
    Else
    _FileWriteLog(@ScriptDir & "\info.log",$client & " -- fehler" & @CRlf )
    Msgbox(0,"Status",$client & " is Not Online",1)
    EndIf
    ;Next
    MsgBox (0,"","Abgeschlossen")
    ;öffnet log
    ShellExecute("info.log", "", @ScriptDir)
    Func _copy($fromFile, $tofile)
    Local $FOF_RESPOND_YES = 16
    Local $FOF_SIMPLEPROGRESS = 256
    $winShell = ObjCreate("shell.application")
    $winShell.namespace ($tofile).CopyHere ($fromFile, $FOF_RESPOND_YES)
    If @error Then
    MsgBox(0, "", "the previous line got an error.")
    EndIf
    EndFunc ;==>copy

    [/autoit]


    Edit Oscar: Spoiler gesetzt.

    Einmal editiert, zuletzt von Oscar (30. November 2010 um 10:39)

  • hallo,

    hab deinen fehler gleich gesehen :)

    [autoit]


    $quelle = "\\"$client & "\c$\Dokumente und Einstellungen\doduck\*"
    ;$quelle1 = "D:\test1.exe"
    ;$ziel = "\\" & $client & "\c$\test\bin\"
    $ziel = "\\"$client & "\c$\Dokumente und Einstellungen\doduck.sic"

    [/autoit]

    hier fehlt das vordere und síehe bsp:
    $quelle = "\\" & $client & "\c$\Dokumente und Einstellungen\doduck\*"

    mit folgendem script funktioniert es bei mir ...

    Spoiler anzeigen
    [autoit]


    #include <file.au3>
    Dim $client
    $client = InputBox("Hostname", "Gebe hier bitte den Hostnamen ein:")
    $var = Ping($client,250)
    If $var = 1 Then; also possible: If @error = 0 Then ...
    Msgbox(0,"Status",$client & " ist Online",1)
    ;Else
    ; Msgbox(0,"Status",$client & " ist nicht Online",1)
    ;EndIf
    $quelle = "\\"& $client&"\c$\Dokumente und Einstellungen\erfahf\*"
    ;$quelle1 = "D:\test1.exe"
    ;$ziel = "\\" & $client & "\c$\test\bin\"
    $ziel = "\\" & $client&"\c$\Dokumente und Einstellungen\doduck.sic"

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

    If Not FileExists($ziel) Then
    DirCreate ($ziel)
    _copy($quelle,$ziel)
    ;_copy($quelle1,$ziel)
    ;MsgBox(0,$clients[$x], "not exist, wird angelegt ...",1)
    Else
    If $quelle > $ziel Then
    ;If $ver1 > $ver2 Then
    _copy($quelle,$ziel)
    ;_copy($quelle1,$ziel)
    MsgBox(0,$client, "wird kopiert ...",1)
    _FileWriteLog(@ScriptDir & "\info.log",$client & " -- erfolgreich" & @CRLF )
    Else
    MsgBox(0,$client, $client & " aktuell ...",1)
    _FileWriteLog(@ScriptDir & "\info.log",$client & " -- aktuell" & @CRlf )
    EndIf
    EndIf
    Else
    _FileWriteLog(@ScriptDir & "\info.log",$client & " -- fehler" & @CRlf )
    Msgbox(0,"Status",$client & " is Not Online",1)
    EndIf
    ;Next
    MsgBox (0,"","Abgeschlossen")
    ;öffnet log
    ShellExecute("info.log", "", @ScriptDir)

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

    Func _copy($fromFile, $tofile)
    Local $FOF_RESPOND_YES = 16
    Local $FOF_SIMPLEPROGRESS = 256
    $winShell = ObjCreate("shell.application")
    $winShell.namespace ($tofile).CopyHere ($fromFile, $FOF_RESPOND_YES)
    If @error Then
    MsgBox(0, "", "the previous line got an error.")
    EndIf
    EndFunc ;==>copy

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

    gruß gmmg

  • Hallo,

    erstmal vielen Dank für eure Hilfe und Tipps, hat mir sehr geholfen. Mein Scrippt funktioniert soweit ganz gut, Ordner wird angelegt und Dateien werden vom Quell Ordner in den Ziel Ordner kopiert, allerdings klappt das mit dem löschen nicht ganz. Es werden zwar Dateien aus dem Quell Ordner ( im Scrippt ein andern Quell Ordner zum Test genommen ) gelöscht, aber nur ein paar, nicht alle. Ordner wie "Anwendungsdaten", "Cookis", "Eigene Dateien" und auch direkte Dateien wie "ntuser.pol" werden nicht gelöscht, normalerweise wäre beim löschen eine Abfrage gekommen wie "Wollen Sie diese Dateien wirklich löschen ?" wo man mit "Ja" bestätigen muß, die kommt aber nicht.

    Hier mein derzeitiges Scrippt:

    Spoiler anzeigen
    [autoit]


    #include <file.au3>
    Dim $client
    Dim $user
    $client = InputBox("Profil Server", "Gebe hier bitte den Server ein auf dem das Profil des Benutzers hinterlegt ist ( z.B.: HV-NT1 ):")
    $user = InputBox("Benutzer", "Gebe hier bitte den Benutzernamen ( Anmeldenamen ) des betreffenden Users an:")
    $quelle = "\\" & $client & "\config$\" & $user & "\Profil\*"
    $ziel = "\\" & $client & "\config$\" & $user & "\Profil.sic"
    If Not FileExists($quelle) Then
    MsgBox(0,$client, "Benutzer oder Server nicht bekannt!",5)

    Else
    If Not FileExists($ziel) Then
    MsgBox(0,$client, "Ordner Profil.sic wird jetzt erstellt ...",3)
    DirCreate ($ziel)

    sleep(1000)

    MsgBox(0,$client, "Ordner wurde erfolgreich erstellt, der Kopiervorgang begind in wenigen Sekunden.",5)

    ;sleep(1000)

    _copy($quelle,$ziel)
    _FileWriteLog(@ScriptDir & "\info.log",$client & " -- erfolgreich" & @CRLF )

    MsgBox (0,"","Kopiervorgang ist abgeschlossen, in wenigen Sekunden werden die Dateien aus dem Profil Ordner gelöscht.",5)
    Else
    _copy($quelle,$ziel)
    _FileWriteLog(@ScriptDir & "\info.log",$client & " -- erfolgreich" & @CRLF )

    MsgBox (0,"","Kopiervorgang ist abgeschlossen, in wenigen Sekunden werden die Dateien aus dem Profil Ordner gelöscht.",5)
    EndIf
    EndIf
    sleep(2000)
    If FileExists($ziel) Then
    FileDelete("\\" & $client & "\config$\" & $user & "\Profil.sicher")
    MsgBox(0,"","Dateien im Verzeichnis" & $quelle & " wurden gelöscht",5)
    Else
    MsgBox(0,"","Verzeichnis ist nicht vorhanden!",5)
    EndIf
    ;öffnet log
    ShellExecute("info.log", "", @ScriptDir)
    Func _copy($fromFile, $tofile)
    Local $FOF_RESPOND_YES = 16
    Local $FOF_SIMPLEPROGRESS = 256
    $winShell = ObjCreate("shell.application")
    $winShell.namespace ($tofile).CopyHere ($fromFile, $FOF_RESPOND_YES)
    If @error Then
    MsgBox(0, "", "the previous line got an error.")
    EndIf
    EndFunc ;==>copy

    [/autoit]


    Edit Oscar: Spoiler gesetzt.

    Einmal editiert, zuletzt von Oscar (30. November 2010 um 10:39)

  • hab in deinem script gesehen, dass du den ordner prifil.sicher löschen willst, erstelltst aber nur den profil.sic

    schau dir mal "DirRemove" aus der hilfe an!!!

    DirRemove ( "path" [, recurse] )
    Parameters
    path Path of the directory to remove.
    recurse [optional] Use this flag to specify if you want to delete sub-directories too.
    0 = (default) do not remove files and sub-directories
    1 = remove files and subdirectories (like the DOS DelTree command)

    gruß gmmg

  • Hi,

    ja, hatte ich oben auch so geschrieben in klammern :)
    Das ist absichtlich, nur zum testen erstmal, später soll auch dem Qell Ordner ( Profil Ordner ) gelöscht werden.

    Die Hilfe hatte ich auch benutzt, da steht:
    Achtung: Wenn der in FileDelete angegebene Pfad ("path") ein Ordner ist, werden alle im Ordner enthaltenen Dateien gelöscht, so als ob die *.*-Maske angegeben wurde.

    ich habe es auch mit *.* versucht, aber ohne Erfolg
    FileDelete("\\" & $client & "\config$\" & $user & "\Profil.sicher\*.*")

    Ist diese Aussage denn in der Hilfe falsch ?
    Wichtig ist das der Ordner "Profil.sicher" bestehen bleibt und nur in dem die Unterordner und Dateien gelsöcht werden. Wie ich in der Hilfe von DirRemove gelesen habe wird auch der Ordner gelöscht, das darf aber auf keinen Fall, sonst gehen die ganzen Berechtigungen des Benutzers verloren.

  • hallo michach,

    du sicherst doch das profil von user xyz http://translation.autoit.de/onlinehilfe/in…g_variables.htm nach profil.sic!
    danach willst du doch das profil von user xyz löschen!!!

    meine frage, warum willst du nicht den kompletten ordner von user xyz löschen?
    was habt ihr für eine systemumgebung? z.b. in einer windows 2003 domäne wird der profilordner automatisch wieder angelegt!

    alternativ müsstest du den inhalt von profil in ein array einlesen ...

    [autoit]


    #Include <File.au3>
    #Include <Array.au3>
    $FileList_01 =_FileListToArray("\\server\d$\Profiles\", "*",1) ;listet files
    ;If @Error=1 Then
    ;MsgBox (0,"","No Files\Folders Found.",1)
    ;Exit
    ;EndIf

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

    _ArrayDisplay($FileList_01,"$FileList")

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

    $FileList_02 =_FileListToArray("\\server\d$\Profiles\", "*",2) ;listet ordner
    ;If @Error=1 Then
    ;MsgBox (0,"","No Files\Folders Found.",1)
    ;Exit
    ;EndIf

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

    _ArrayDisplay($FileList_02,"$FileList")

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

    For $x = 1 to $FileList_01[0]
    Msgbox(0,'Record:' & $x, $FileList_01[$x],1)
    FileDelete("\\server\d$\Profiles\" & $FileList_01[$x])
    Next

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

    For $x = 1 to $FileList_02[0]
    Msgbox(0,'Record:' & $x, $FileList_02[$x],1)
    FileDelete("\\server\d$\Profiles\" & $FileList_02[$x])
    Next

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

    so ungefähr ... ungetestet ...

    gruß gmmg

  • Jeder Benutzer hat einen Profil Ordner auf dem Server. Wenn jetzt ein Problem besteht, erstellen wir einen neuen Profil Ordner z.Bsp. "Profil.sic" wo wir die Dateien aus dem Profil Ordner in den Profil.sic Ordner kopieren und dann die Daten aus dem Profil Ordner löschen.
    Wen der Benutzer sich neu Anmeldet, werden die Dateien in dem Profil Ordner neu erstellt. Wenn der Anwender sagt das dann soweit alles ok ist, dann kann auch der Ordner "Profil.sic" gelöscht werden, der ist nur zur sicherheit falls etwas schief gehen sollte bei der Profil erneuerung.
    Wenn wir den Ordner "Profil" löschen würden und neu anlegen, verliert der Benutzer die Berechtigung auf den Ordner, diese müssen dann wieder neu angepasst werden.

    ich versuche mal das mit dem Array, wobei ich immer noch nicht verstehe warum das mit dem FileDelete("\\" & $client & "\config$\" & $user & "\Profil.sicher\*.*") nichtz funktioniert, in der Hilfe steht ganz klar das alle Dateien in dem Ordner gelöscht werden :(

  • OK, ich habe das mal mit deinem Code versucht, so in dieser Form:

    Spoiler anzeigen
    [autoit]

    #include <file.au3>
    #Include <Array.au3>
    Dim $client
    Dim $user
    $client = InputBox("Profil Server", "Gebe hier bitte den Server ein auf dem das Profil des Benutzers hinterlegt ist ( z.B.: HV-NT1 ):")
    $user = InputBox("Benutzer", "Gebe hier bitte den Benutzernamen ( Anmeldenamen ) des betreffenden Users an:")
    $quelle = "\\" & $client & "\config$\" & $user & "\Profil\*"
    $ziel = "\\" & $client & "\config$\" & $user & "\Profil.sic"
    If Not FileExists($quelle) Then
    MsgBox(0,$client, "Benutzer oder Server nicht bekannt!",5)

    Else
    If Not FileExists($ziel) Then
    MsgBox(0,$client, "Ordner Profil.sic wird jetzt erstellt ...",3)
    DirCreate ($ziel)

    sleep(1000)

    MsgBox(0,$client, "Ordner wurde erfolgreich erstellt, der Kopiervorgang begind in wenigen Sekunden.",5)

    ;sleep(1000)

    _copy($quelle,$ziel)
    _FileWriteLog(@ScriptDir & "\info.log",$client & " -- erfolgreich" & @CRLF )

    MsgBox (0,"","Kopiervorgang ist abgeschlossen, in wenigen Sekunden werden die Dateien aus dem Profil Ordner gelöscht.",5)
    Else
    _copy($quelle,$ziel)
    _FileWriteLog(@ScriptDir & "\info.log",$client & " -- erfolgreich" & @CRLF )

    MsgBox (0,"","Kopiervorgang ist abgeschlossen, in wenigen Sekunden werden die Dateien aus dem Profil Ordner gelöscht.",5)
    EndIf
    EndIf
    sleep(2000)
    $FileList_01 =_FileListToArray("\\" & $client & "\config$\" & $user & "\Profil.sicher", "*",1) ;listet files
    ;If @Error=1 Then
    ;MsgBox (0,"","No Files\Folders Found.",1)
    ;Exit
    ;EndIf
    _ArrayDisplay($FileList_01,"$FileList")
    $FileList_02 =_FileListToArray("\\" & $client & "\config$\" & $user & "\Profil.sicher", "*",2) ;listet ordner
    ;If @Error=1 Then
    ;MsgBox (0,"","No Files\Folders Found.",1)
    ;Exit
    ;EndIf
    _ArrayDisplay($FileList_02,"$FileList")
    For $x = 1 to $FileList_01[0]
    Msgbox(0,'Record:' & $x, $FileList_01[$x],1)
    FileDelete("\\" & $client & "\config$\" & $user & "\Profil.sicher" & $FileList_01[$x])
    Next
    For $x = 1 to $FileList_02[0]
    Msgbox(0,'Record:' & $x, $FileList_02[$x],1)
    FileDelete("\\" & $client & "\config$\" & $user & "\Profil.sicher" & $FileList_02[$x])
    Next
    ;öffnet log
    ShellExecute("info.log", "", @ScriptDir)
    Func _copy($fromFile, $tofile)
    Local $FOF_RESPOND_YES = 16
    Local $FOF_SIMPLEPROGRESS = 256
    $winShell = ObjCreate("shell.application")
    $winShell.namespace ($tofile).CopyHere ($fromFile, $FOF_RESPOND_YES)
    If @error Then
    MsgBox(0, "", "the previous line got an error.")
    EndIf
    EndFunc ;==>copy

    [/autoit]


    Er listet mir zwar die zu löschenden Dateien auf, und starte auch wenn ich diese Auflistung beende, allerdings sind die Dateien immer noch in dem Ordner, ich glaube das geht irgendwie nicht :(
    Irgendwo ist noch ein Fehler, aber ich finde den nicht.

    Edit Oscar: Spoiler gesetzt.

    Einmal editiert, zuletzt von Oscar (30. November 2010 um 10:40)

  • in einer windows 2003 domänenumgebung wird auch dieser ordner automatisch mit den entsprechenden rechten für den user erstellt!
    dieser eintrag ist im Active Directory-Benutzer und -Computer unter profil --> benutzerprofil --> profilpfad angegeben!

    lösche doch den ordner komplatt uns lasse ihn über das script gleich wieder anlegen ...
    mit cacls.exe kannst du dann die rechte auf den ordner gleich setzen lassen z.b. so :

    [autoit]


    #include <Process.au3>
    ;----- rechte setzen -------------
    $sCommand00 = (@ScriptDir & "\pfad_zur_cacls_exe\cacls.exe C:\testorndner /T /E /C /G domänenname\Domänen-Benutzer:F")
    _RunDOS ( $sCommand00 )

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

    das kannst du ja solange machen, bis alle rechte vergeben sind

    gruß gmmg

  • bei den ordnern müsstest du "dirdelete" nehmen ...

    lass dir doch mal den inhalt von dem befehl filedelete in einer msgbox ausgeben und prüf mal, ob der pfad richtig ist!

    [autoit]


    msgbox(0,"","\\" & $client & "\config$\" & $user & "\Profil.sicher" & $FileList_01[$x])

    [/autoit]

    mir fällt gerade auf, dass ein "\" fehlt ... "\Profil.sicher\" & $FileList_01[$x])

    gruß
    gmmg

  • also die Dateien werden angezeigt und gefunden, auch an dem "\" hat es nicht gelegen :(
    Hm... muß wohl weiter forschen, vielen dank aber für die Mühe, hat mich schon sehr weit gebracht.

  • kein problem ... helfen doch alle gern :)

    der user mit dem du löschen willst, hat auch auf diesen ordner das recht zum löschen?
    geht ein händisches löschen des ordners übers netzwerk?

    gruß gmmg

  • jep, per hand geht es, es kommt einmal eine Abfrage ob ich wirklich löschen möchte, dann nochmal eine Meldung das ich bestätigen muß das die Systemdatei "ntuser.pol" gelöscht werden soll, wenn ich da auf "Ja, alle" klicke, dann läuft das ding komplett durch.

  • habe es jetzt nochmal versucht mit DirRemove, es werden alle gelöscht, nur noch die
    ntuser.pol bleibt übrig :(

    Wenn ich die noch gelöscht bekomme, ist der Fall dank eurer Hilfe gelöst :)

    Einmal editiert, zuletzt von michach (25. November 2010 um 14:44)