Dateibesitzer ermitteln und diese Dateien dann löschen

  • VBScript

Es gibt 2 Antworten in diesem Thema. Der letzte Beitrag () ist von p41n.

    Dateibesitzer ermitteln und diese Dateien dann löschen

    Hallo Zusammen,

    Nun habe ich noch ein weiteres kleines Problem. Ich denke, das dürfte für euch kein Problem darstellen. Aber ich komme absolut nicht mehr weiter. ?(

    Es geht darum die Dateien eines Ordner nach Besitzern zu analysieren und sämtliche Dateien des ermittelten Besitzers zu löschen.
    Beispielsweise enthält ein Ordner mit 100 Dateien 10 Dateien des Besitzers MaxMustermann in der Domäne contoso.com.
    Diese 10 Dateien möchte ich löschen und die anderen Dateien sollen unberührt bleiben.

    Bisher habe ich folgenden Code geschrieben:

    Visual Basic-Quellcode

    1. DIM objDatei
    2. strOrdner = "D:\Test\"
    3. set shell = CreateObject("Shell.Application")
    4. ' auf Papierkorb zugreifen
    5. Set FSO = CreateObject("Scripting.FileSystemObject")
    6. Set objOrdner = FSO.GetFolder(strOrdner)
    7. set folder = shell.NameSpace(strOrdner)
    8. set folderitems = folder.items
    9. fmtid = "{9B174B34-40FF-11D2-A27E-00C04FC30871}"
    10. intZahl = 0
    11. If folderitems.Count > 0 then
    12. For Each folderitem in folderitems
    13. besitzer = (folderitem.ExtendedProperty(fmtid & ",4"))
    14. For Each objDatei in objOrdner.Files
    15. If besitzer = "MusterPC\musterma" Then
    16. objDatei.Delete
    17. list = list & folderitem.name & _
    18. ": Besitzer ist " & besitzer & vbCr
    19. intZahl = intZahl + 1
    20. End If
    21. Next
    22. Next
    23. End If
    24. If intZahl = "0" Then
    25. MsgBox "Es wurden keine Dateien gelöscht"
    26. Else
    27. MsgBox "Es wurden " & intZahl & " Dateien gelöscht" & vbCrLf _
    28. & "Gelöscht wurden:" & vbCrLf & list, vbInformation
    29. End If


    Das Problem hierbei ist, dass das Script mir sämtliche Dateien löscht. Auch die, die dem angegebenen Benutzer gar nicht gehören.
    Im Prinzip löscht er also sämtliche Dateien in dem Ordner, obwohl nur eine Datei dem angegeben Anwender gehört.

    Kann mir wer helfen?


    Viele Grüße
    p41n
    Erstmal Danke für den Tipp. Er hat mich auf die richtige Spur gebracht. :thumbup:
    Dennoch hat es etwas gedauert. Habs aber letztendlich hinbekommen.

    Und hier nun der Code für die, die ein ähnliches Problem haben sollten:


    Visual Basic-Quellcode

    1. 'InputBox als Abfrage, um den Besitzer zu erfragen, dessen Dateien gelöscht werden sollen
    2. Owner = InputBox("Bitte geben Sie den Besitzer ein, dessen Dateien gelöscht werden sollen:")
    3. 'Flags für den BrowsforFolder Dialog
    4. Const BIF_returnonlyfsdirs = &H0001
    5. Const BIF_dontgobelowdomain = &H0002
    6. Const BIF_statustext = &H0004
    7. Const BIF_returnfsancestors = &H0008
    8. Const BIF_editbox = &H0010
    9. Const BIF_validate = &H0020
    10. Const BIF_browseforcomputer = &H1000
    11. Const BIF_browseforprinter = &H2000
    12. Const BIF_browseincludefiles = &H4000
    13. 'Deklaration des FileSystemObject und der Shell.Applikation
    14. Set objDlg = WScript.CreateObject("Shell.Application")
    15. Set fso = CreateObject("Scripting.FileSystemObject")
    16. 'Ermitteln des Quellordners über die BrowseForFolder-Methode
    17. Set objStartFolder = objDlg.BrowseForFolder (&H0, _
    18. "Bitte wählen Sie den Ordner:", BIF_editbox + BIF_returnonlyfsdirs)
    19. 'Definition des Quellordners (sourceFolder), der vorher über die BrowseForFolder-Methode ermittelt wurde
    20. If InStr(1, TypeName(objStartFolder), "Folder") > 0 Then
    21. sourceFolder = objStartFolder.ParentFolder.ParseName(objStartFolder.Title).Path
    22. Else
    23. MsgBox "Ein Fehler trat auf: Der Zielordner kann nicht gelesen werden!"
    24. WScript.Quit
    25. End if
    26. 'Initialisierung des Zählers
    27. intZahl = "0"
    28. 'Deklaration des "GetObject"
    29. Set objWMI = GetObject("winmgmts://./root/cimv2")
    30. 'Start der For..Next Schleife, in der jede File des gewählten Ordners überprüft wird
    31. For Each File In fso.GetFolder(sourceFolder).Files
    32. 'Ermitteln des Sicherheitsobjektes über WMI
    33. objWMI.Get("Win32_LogicalFileSecuritySetting='" & File & "'").GetSecurityDescriptor objSD
    34. 'If..Schleife für die Löschung der gewünschten Dateien
    35. 'objSD.Owner.Name = Dateibesitzer
    36. 'objSD.Owner.Domain = Domäne des Besitzers
    37. If objSD.Owner.Name = Owner Then
    38. 'MsgBox mit einer Ja/Nein-Abfrage, ob die Datei gelöscht werden soll
    39. strMbox = MsgBox("Möchten Sie die Datei " & "'" & File.Name & "'" & " löschen?",4)
    40. 'Wenn Ja, Datei wird gelöscht und die Variable "ListFileOwner" mit Daten gefüllt
    41. If strMbox = 6 Then
    42. ListFileOwner = ListFileOwner & vbCrLf & File.Name
    43. File.Delete
    44. intZahl = intZahl + 1
    45. End If
    46. End If
    47. Next
    48. Const ForReading = 1, ForWriting = 2, ForAppending = 8
    49. 'Abschließend wird eine Textdatei mit dem Ergebnis der Löschung erstellt
    50. 'Die Datei hat die Erweiterung ".txt" und wird nach dem Besitzer der Dateien benannt
    51. 'Gespeichert wird die Datei in dem Ordner, der zuvor durchsucht wurde
    52. If intZahl = "0" Then
    53. Set oFile = fso.OpenTextFile(sourceFolder & "\" & Owner & ".txt",8,true)
    54. oFile.WriteLine "===================================================================="
    55. oFile.WriteLine "Am " & Day(Now) & "." & Month(Now) & "." & Year(Now) & " um " & Hour(Now) & ":" & Minute(Now) & ":" & Second(Now) _
    56. & " wurden keine Dateien von " & "'" & objSD.Owner.Name & "'" & " gelöscht!"
    57. oFile.WriteLine ""
    58. oFile.WriteLine "===================================================================="
    59. oFile.close
    60. Else
    61. If intZahl > 1 Then
    62. Set oFile = fso.OpenTextFile(sourceFolder & "\" & Owner & ".txt",8,true)
    63. oFile.WriteLine "===================================================================="
    64. oFile.WriteLine "Am " & Day(Now) & "." & Month(Now) & "." & Year(Now) & " um " & Hour(Now) & ":" & Minute(Now) & ":" & Second(Now) _
    65. & " wurden " & intZahl & " Dateien von " & "'" & objSD.Owner.Name & "'" & " gelöscht!"
    66. oFile.WriteLine ""
    67. oFile.WriteLine "Folgende Dateien wurden gelöscht:"
    68. oFile.WriteLine ListFileOwner
    69. oFile.WriteLine "===================================================================="
    70. oFile.close
    71. Else
    72. Set oFile = fso.OpenTextFile(sourceFolder & "\" & Owner & ".txt",8,true)
    73. oFile.WriteLine "===================================================================="
    74. oFile.WriteLine "Am " & Day(Now) & "." & Month(Now) & "." & Year(Now) & " um " & Hour(Now) & ":" & Minute(Now) & ":" & Second(Now) _
    75. & " wurde " & intZahl & " Datei von " & "'" & objSD.Owner.Name & "'" & " gelöscht!"
    76. oFile.WriteLine ""
    77. oFile.WriteLine "Folgende Datei wurde gelöscht:"
    78. oFile.WriteLine ListFileOwner
    79. oFile.WriteLine "===================================================================="
    80. oFile.close
    81. End If
    82. End If
    83. 'Scriptende
    84. WScript.Quit



    Viele Grüße
    p41n