Automatisieren Sie das Löschen aller Dateien in einem Verzeichnis aus einer Liste von Windows-Computern

Automatisieren Sie das Löschen aller Dateien in einem Verzeichnis aus einer Liste von Windows-Computern

Ich habe Hunderte von Computern mit Speicherplatzproblemen und in letzter Zeit habe ich einfach auf jedem Computer in dieser Liste ein PSExec ausgeführt und auf jedem Rechner ein „del /s /qc:\DIRECTORY*“ ausgeführt, was einfach lächerlich ist.

Ich habe ein VB-Skript gefunden, das eine ComputerList.txt-Datei abfragt, die ich mit einer Liste aller Hostnamen aller in Frage kommenden Computer ändern könnte, und dann eine weitere FolderList.txt, in der ich alle zu leerenden Verzeichnisse auflisten könnte.

Außer, dass das Skript nicht funktioniert und trotzdem einen Ordner für ein Verzeichnis löscht. Dabei möchte ich natürlich alle Elemente in einem Ordner löschen. Nicht den Ordner selbst löschen.

Die Funktion, die ich mir wünsche, ist, dass das VBScript die Datei ComputerList.txt abfragt, die alle zu ändernden Hostnamen enthält. Dann löscht es alle Dateien in den Verzeichnissen, die in der Datei FoldersList.txt aufgelistet sind. Dabei werden alle Dateien übersprungen, die gerade verwendet werden, oder Hostnamen, die nicht durch meine Rechte verwaltet werden. Es wäre ideal, wenn eine Liste der Hostnamen, die aufgrund von Rechten oder Offline-Zugriff übersprungen wurden, in eine TXT-Datei exportiert würde, damit ich darauf zurückgreifen kann.

Wenn mir jemand dabei helfen könnte, wäre das großartig! Vielen Dank an alle. Hier ist das Skript, das ich habe:

Option Explicit
Const strFolderList = "C:\Scripts\FolderList.txt"
Const strComputers = "C:\Scripts\ComputerList.txt"
Dim objFSO, inFile, ComputerList, objDictionary, strFolderName, colfolders, intSize
Dim arrFolders(), objWMIService, intKey, Item, colSubfolders
intSize = 0

Set objFSO = CreateObject("scripting.filesystemobject")
Set inFile = objFSO.OpenTextFile(strFolderList,1)
Set ComputerList = objFSO.OpenTextFile(strComputers,1)
Set objDictionary = CreateObject("Scripting.Dictionary")
'---------Read folderlist into an Dictionary Array---------
intkey = 1
Do Until inFile.AtEndOfStream
    objDictionary.Add intKey, inFile.ReadLine
    intKey = intKey + 1
Loop
inFile.Close
'-----------------------------------
'----Read computerlist line by line and call FileDelete
Do Until ComputerList.AtEndOfStream
    Call FileDelete(computerlist.ReadLine)
    WScript.Echo "Done."
Loop
ComputerList.Close


'-----Uses the computer name above and connects to WMI 
Sub FileDelete(strComputer)
 Set objWMIService = GetObject("winmgmts:" _ 
  & "{impersonationLevel=impersonate,authenticationLevel=Pkt}!\\" _ 
  & strComputer & "\root\cimv2")
'---loop through the dictionary array and delete folders
    For Each Item In objDictionary.Items
        strFolderName = Item
        Set colSubfolders = objWMIService.ExecQuery _
        ("Associators of {Win32_Directory.Name='" & strFolderName & "'} " _
     & "Where AssocClass = Win32_Subdirectory " _
     & "ResultRole = PartComponent")

        ReDim Preserve arrFolders(intSize)
        arrFolders(intSize) = strFolderName
        intSize = intSize + 1
        On Error Resume Next 
        For Each objFolder in colSubfolders
            'Folder does not exist
            If Hex(Err.Number) = 80041002 Then 
                Err.Clear
             WScript.Echo strFolderName & " does not exist."
            Else
                'folder exists
                GetSubFolders strFolderName
            End If
        Next

        For i = Ubound(arrFolders) to 0 Step -1
            strFolder = arrFolders(i)
            strFolder = Replace(strFolder, "\", "\\")
            Set colFolders = objWMIService.ExecQuery _
             ("Select * from Win32_Directory where Name = '" & strFolder & "'")

            For Each objFolder in colFolders
             errResults = objFolder.Delete
            Next
        Next
    Next
End Sub

Sub GetSubFolders(strFolderName)
 Set colSubfolders2 = objWMIService.ExecQuery _
  ("Associators of {Win32_Directory.Name='" & strFolderName & "'} " _
  & "Where AssocClass = Win32_Subdirectory " _
  & "ResultRole = PartComponent")

 For Each objFolder2 in colSubfolders2
  strFolderName = objFolder2.Name
  ReDim Preserve arrFolders(intSize)
  arrFolders(intSize) = strFolderName
  intSize = intSize + 1
  GetSubFolders strFolderName
 Next
End Sub

verwandte Informationen