Automatizar la eliminación de todos los archivos en un directorio de una lista de computadoras con Windows

Automatizar la eliminación de todos los archivos en un directorio de una lista de computadoras con Windows

Tengo cientos de computadoras con problemas de espacio y, últimamente, he estado ejecutando PSExec en cada computadora en esta lista y realizando un "del /s /qc:\DIRECTORY*" en cada máquina, lo cual es simplemente ridículo.

Encontré un script VB que consulta un archivo ComputerList.txt que podía modificar con una lista de todos los nombres de host de todas las computadoras en cuestión, y luego otro FolderList.txt donde podía enumerar todos los directorios para vaciar.

Excepto que el script no funciona y de todos modos elimina una carpeta de un directorio. Lo cual, por supuesto, quiero eliminar todos los elementos de una carpeta. No eliminar la carpeta en sí.

La funcionalidad que me gustaría es que VBScript consulte el archivo ComputerList.txt, que tiene todos los nombres de host para modificar. Luego eliminaría todos los archivos en los directorios enumerados en el archivo FoldersList.txt. Saltar todos los archivos que están en uso o nombres de host que mis derechos no administran. Sería ideal si una lista de nombres de host que se omitieron debido a derechos o por estar fuera de línea se exportara a un archivo TXT para poder consultarlos.

Si alguien pudiera ayudarme con esto, ¡sería fantástico! Gracias a todos. Aquí está el guión que tengo:

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

información relacionada