Delete Folders using WMI

Discussion in 'Scripting' started by Babu VT, Jun 29, 2009.

  1. Babu VT

    Babu VT Guest

    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
     
    Babu VT, Jun 29, 2009
    #1
    1. Advertisements

  2. 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
     
    Pegasus [MVP], Jun 29, 2009
    #2
    1. Advertisements

  3. 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
    
    --
     
    Mark D. MacLachlan, Jul 1, 2009
    #3
  4. 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
    
     
    Mark D. MacLachlan, Jul 1, 2009
    #4
  5. 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
    
     
    Mark D. MacLachlan, Jul 2, 2009
    #5
    1. Advertisements

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments (here). After that, you can post your question and our members will help you out.