Hi, I'm trying to clean "$NTUninstall..." folders from remote machines and found the below snippet useful.Unfortunately it isn't deleting any folders.Can someone point me where is the fault... I can't use FSO objects since I need to delete folders in multiple machines where C$ shares might not be available. strComputer ="." Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2") strQueryString1 = "Select * from Win32_Directory where Name = '" & OSRootDir & "'" Set colSubfolders = objWMIService.ExecQuery (strQueryString1) For Each objFolder in colSubfolders If Instr( UCase(objFolder.Name), "$NTUNINSTALL" ) > 0 then strReport = strReport & "Deleted :" & strcomputer & ":" & objFolder.Name & " uninstall folder" & vbCrLf objFolder.delete End If Next
You need to assign a value to OSRootDir, e.g. "c:\\Windows". Alternatively this Scripting Guy item might help: How Can I Delete a Folder and All Its Subfolders? http://www.microsoft.com/technet/scriptcenter/resources/qanda/apr05/hey0405.mspx
Rather than just deleting the uninstalls, I prefer to check the age of the folders just to be sure it is safe to remove them. That is why I wrote the following which will only delete the folders if they are more than 2 weeks old. Code: '======================================================================= === ' ' NAME: CleanHotfixUninstalls.vbs ' ' AUTHOR: Mark D. MacLachlan , The Spider's Parlor ' URL : http://www.thespidersparlor.com ' COPYRIGHT (c) 2008 All rights reserved ' DATE : 05/07/2008 ' ' COMMENT: ' ' This script will enumerate Uninstall folders under the Windows directory ' and delete them if they are more than two weeks old ' ' ' THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF ' ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO ' THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A ' PARTICULAR PURPOSE. ' ' IN NO EVENT SHALL THE SPIDER'S PARLOR AND/OR ITS RESPECTIVE SUPPLIERS ' BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY ' DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, ' WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ' ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE ' OF THIS CODE OR INFORMATION. '===================================== Dim fso, WshShell Dim oFolder, oSubFolder Set fso = CreateObject("Scripting.FileSystemObject") Set WshShell=CreateObject("WScript.Shell") WinDir = WshShell.ExpandEnvironmentStrings("%WinDir%") Path = WinDir Set oFolder = fso.GetFolder(Path) Set colSubfolders = oFolder.Subfolders For Each oSubfolder in colSubfolders If Left(oSubFolder.Name,1) = "$" Then If Right(oSubFolder.Name,1) = "$" Then 'If DateDiff("d", oSubFolder.DateCreated,Now) > 14 Then fso.DeleteFolder(oSubFolder) 'End If End If End If Next Set oSubFolder = Nothing Set oFolder = Nothing Set fso = Nothing --
Just realized the posted version had the two week check commented out. Code: '======================================================================= === ' ' NAME: CleanHotfixUninstalls.vbs ' ' AUTHOR: Mark D. MacLachlan , The Spider's Parlor ' URL : http://www.thespidersparlor.com ' COPYRIGHT (c) 2008 All rights reserved ' DATE : 05/07/2008 ' ' COMMENT: ' ' This script will enumerate Uninstall folders under the Windows directory ' and delete them if they are more than two weeks old ' ' ' THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF ' ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO ' THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A ' PARTICULAR PURPOSE. ' ' IN NO EVENT SHALL THE SPIDER'S PARLOR AND/OR ITS RESPECTIVE SUPPLIERS ' BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY ' DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, ' WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ' ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE ' OF THIS CODE OR INFORMATION. '===================================== Dim fso, WshShell Dim oFolder, oSubFolder Set fso = CreateObject("Scripting.FileSystemObject") Set WshShell=CreateObject("WScript.Shell") WinDir = WshShell.ExpandEnvironmentStrings("%WinDir%") Path = WinDir Set oFolder = fso.GetFolder(Path) Set colSubfolders = oFolder.Subfolders For Each oSubfolder in colSubfolders If Left(oSubFolder.Name,1) = "$" Then If Right(oSubFolder.Name,1) = "$" Then If DateDiff("d", oSubFolder.DateCreated,Now) > 14 Then fso.DeleteFolder(oSubFolder) End If End If End If Next Set oSubFolder = Nothing Set oFolder = Nothing Set fso = Nothing
Sorry for the repost, but I noticed I had the date checks commented out on the previously posted version. Code: '======================================================================= === ' ' NAME: CleanHotfixUninstalls.vbs ' ' AUTHOR: Mark D. MacLachlan , The Spider's Parlor ' URL : http://www.thespidersparlor.com ' COPYRIGHT (c) 2008 All rights reserved ' DATE : 05/07/2008 ' ' COMMENT: ' ' This script will enumerate Uninstall folders under the Windows directory ' and delete them if they are more than two weeks old ' ' ' THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF ' ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO ' THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A ' PARTICULAR PURPOSE. ' ' IN NO EVENT SHALL THE SPIDER'S PARLOR AND/OR ITS RESPECTIVE SUPPLIERS ' BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY ' DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, ' WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ' ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE ' OF THIS CODE OR INFORMATION. '===================================== Dim fso, WshShell Dim oFolder, oSubFolder Set fso = CreateObject("Scripting.FileSystemObject") Set WshShell=CreateObject("WScript.Shell") WinDir = WshShell.ExpandEnvironmentStrings("%WinDir%") Path = WinDir Set oFolder = fso.GetFolder(Path) Set colSubfolders = oFolder.Subfolders For Each oSubfolder in colSubfolders If Left(oSubFolder.Name,1) = "$" Then If Right(oSubFolder.Name,1) = "$" Then If DateDiff("d", oSubFolder.DateCreated,Now) > 14 Then fso.DeleteFolder(oSubFolder) End If End If End If Next Set oSubFolder = Nothing Set oFolder = Nothing Set fso = Nothing