Automatize a exclusão de todos os arquivos em um diretório de uma lista de computadores Windows

2

Tenho centenas de computadores com problemas de espaço e, ultimamente, acabei de executar o PS em cada computador dessa lista e executar um "del / s / qc: \ DIRECTORY *" em cada máquina, o que é simplesmente ridículo .

Eu encontrei um script VB que consulta um arquivo ComputerList.txt que eu poderia modificar com uma lista de todos os nomes de host de todos os computadores em questão, e depois outro FolderList.txt onde eu poderia listar todos os diretórios para esvaziar. / p>

Exceto o script não está funcionando e exclui uma pasta para um diretório de qualquer maneira. Qual, claro, eu quero apagar todos os itens em uma pasta. Não elimine a pasta em si.

A funcionalidade que eu gostaria é que o VBScript consulte o arquivo ComputerList.txt, que tem todos os nomes de host para modificar. Em seguida, ele excluiria todos os arquivos nos diretórios listados no arquivo FoldersList.txt. Ignorando todos os arquivos em uso ou Hostnames que meus direitos não administram. Seria ideal se uma lista de Hostnames que foram ignorados devido a direitos ou estar offline fosse exportada para um arquivo TXT para que eu pudesse consultá-los.

Se alguém pudesse me ajudar com isso, seria incrível! Obrigado a todos. Aqui está o script que eu tenho:

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
    
por kriznak8 11.06.2016 / 01:15

0 respostas

Tags