Zautomatyzuj usuwanie wszystkich plików w katalogu z listy komputerów z systemem Windows


2

Mam setki komputerów z problemami z przestrzenią, a ostatnio właśnie PSExececing do każdego komputera na tej liście i wykonywanie „del / s / qc: \ DIRECTORY *” na każdym komputerze, co jest po prostu śmieszne.

Znalazłem skrypt VB, który wysyła zapytanie do pliku ComputerList.txt, który mógłbym zmodyfikować za pomocą listy wszystkich nazw hostów wszystkich komputerów, o których mowa, a następnie inny FolderList.txt, w którym mógłbym wymienić wszystkie katalogi do opróżnienia.

Tyle że skrypt nie działa i i tak usuwa folder dla katalogu. Które oczywiście chcę usunąć wszystkie elementy w folderze. Nie usuwaj samego folderu.

Chciałbym, aby VBScript sprawdził plik ComputerList.txt, który ma wszystkie nazwy hostów do zmodyfikowania. Następnie usuwa wszystkie pliki z katalogów wymienionych w pliku FoldersList.txt. Pomijanie wszystkich używanych plików lub nazw hostów, którymi moje prawa nie administrują. Byłoby idealnie, gdyby lista nazw hostów, które zostały pominięte ze względu na prawa lub znajdowały się w trybie offline, zostałaby wyeksportowana do pliku TXT, aby móc do nich wrócić.

Gdyby ktokolwiek mógł mi w tym pomóc, byłoby wspaniale! Dziękuję wszystkim. Oto skrypt, który mam:

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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.