
Tenho centenas de computadores com problemas de espaço e, ultimamente, tenho executado PSExecing em cada computador desta lista e executado um "del /s /qc:\DIRECTORY*" em cada máquina, o que é simplesmente ridículo.
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, em seguida, outro FolderList.txt onde eu poderia listar todos os diretórios para esvaziar.
Exceto que o script não está funcionando e exclui uma pasta de um diretório de qualquer maneira. É claro que quero excluir todos os itens de uma pasta. Não exclua a pasta em si.
A funcionalidade que eu gostaria é que o VBScript consultasse o arquivo ComputerList.txt, que contém 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 que estão em uso ou nomes de host que meus direitos não administram. Seria ideal se uma lista de nomes de host que foram ignorados devido a direitos ou por estarem offline fosse exportada para um arquivo TXT para que eu pudesse consultá-los novamente.
Se alguém pudesse me ajudar com isso, seria incrível! Obrigado a todos. Aqui está o script que 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