Solved

PowerShell - Find Wild Card Directory With Hidden Attribute Within Past X Days

Posted on 2014-01-16
10
744 Views
Last Modified: 2014-01-27
- I need to create a PowerShell that will look for directories called "*.view".

- These directories have a Hidden attribute, so I only want to find those directories that are hidden.

- I'd like to look for directories that are older than X amount of days.

- For safety reasons, I'd like two options for output and I'll just comment out the one I don't need to use at any given time.

- First options is to create an output file to the desktop, so i can review it and make sure it's correct.

- The second option would be to actually remove the directories. Again, I'll just comment out the one I don't want to use when I first run the script.
0
Comment
Question by:paulpp
  • 4
  • 4
  • 2
10 Comments
 
LVL 18

Expert Comment

by:Raheman M. Abdul
Comment Utility
$Now = Get-Date
$Days = "7"
$TargetFolder = "C:\Temp\"
#----- define LastWriteTime parameter based on $Days ---#
$LastWrite = $Now.AddDays(-$Days)

$folders = Get-Childitem $TargetFolder -Include *.view -filter *. -Attributes h  -Recurse | Where {$_.LastWriteTime -le "$LastWrite"}

# above $_.Lastwritetime can be replaced with $_.creationtime  to actually look for old days based on lastwritetime or creationtime.

foreach ($folder in $folders)
          {
          if ($folder-ne $NULL)
              {

#              write-host "Deleting folder $folder" -ForegroundColor "DarkRed"

              "Deleting folder $folder" | add-content c:\result.txt

#              Remove-Item $folder.FullName | out-null
              }
          else
              {
#              Write-Host "No more folders to delete!" -foregroundcolor "Green"

            "No more folders to delete!" | add-content c:\result.txt
              }
          }
0
 
LVL 2

Author Comment

by:paulpp
Comment Utility
Hello Wizard,

I'm getting the following error message:

PS C:\Users\5sun5\Desktop> C:\Users\5sun5\Desktop\boo.ps1
Get-ChildItem : A parameter cannot be found that matches parameter name 'Attributes'.
At C:\Users\5sun5\Desktop\boo.ps1:7 char:78
+ $folders = Get-Childitem $TargetFolder -Include *.view -filter *. -Attributes <<<<  hidden  -Recurse | Where {$_.LastWriteTime -le "$LastWrite"}
    + CategoryInfo          : InvalidArgument: (:) [Get-ChildItem], ParameterBindingException
    + FullyQualifiedErrorId : NamedParameterNotFound,Microsoft.PowerShell.Commands.GetChildItemCommand

Open in new window

0
 
LVL 18

Accepted Solution

by:
Raheman M. Abdul earned 500 total points
Comment Utility
Use the following instead

$folders = Get-Childitem $TargetFolder -Include *.view -filter *. -Recurse | where { $_.attributes -match "hidden"} | Where {$_.LastWriteTime -le "$LastWrite"}
0
 
LVL 68

Expert Comment

by:Qlemo
Comment Utility
Almost. Hidden folders and files are not shown by Get-ChildItem. And we really should restrict the search to folders (the above will also find files).
Further, first parsing the complete tree, and then act on the result is usually ineffective, so I recommend to use a pipe:
$Test= $true
$old = (get-date).AddDays(-7)     # 7 days back
Get-ChildItem -recursive -Filter *.view -Force | 
  ? { $_.Mode -like 'd??h' } |
  ? { $_.LastWriteTime -le $old } |
  % {
    if ($Test)
    {
      Out-File C:\Results.txt "Deleting folder $($_.FullName)" 
    } else  {
        Write-Host write-host "Deleting folder $($_.FullName)" -ForegroundColor "DarkRed"
        Remove-Item -recursive -force $_
   }

Open in new window

I took the liberty to define "to the desktop" as C:\ ;-).
Change $Test to $false to delete the folders.
0
 
LVL 2

Author Closing Comment

by:paulpp
Comment Utility
Much appreciated Wizard!!!

:)
0
Highfive Gives IT Their Time Back

Highfive is so simple that setting up every meeting room takes just minutes and every employee will be able to start or join a call from any room with ease. Never be called into a meeting just to get it started again. This is how video conferencing should work!

 
LVL 68

Expert Comment

by:Qlemo
Comment Utility
Did you test that script? It doesn't work.
And, btw, "Wizard" is a rank, not a name. The name is visible at the right of "by: ", and hence is "Qlemo" (for me) and "Raheman Mohammed Abdul" for the other Expert ;-).
0
 
LVL 2

Author Comment

by:paulpp
Comment Utility
LOL!!!
0
 
LVL 68

Expert Comment

by:Qlemo
Comment Utility
I have to insist in knowing why you accepted a non-working suggestion.
0
 
LVL 2

Author Comment

by:paulpp
Comment Utility
Qlemo, it 100% works. Why would you question my integrity on a message board? I have nothing to gain and all to lose if I were being dishonest.
0
 
LVL 68

Expert Comment

by:Qlemo
Comment Utility
Because this does not show anything for me:
md x.view
attrib +h x.view
Get-Childitem -Include *.view -filter *. -Recurse 

Open in new window

0

Featured Post

Maximize Your Threat Intelligence Reporting

Reporting is one of the most important and least talked about aspects of a world-class threat intelligence program. Here’s how to do it right.

Join & Write a Comment

Are you one of those front-line IT Service Desk staff fielding calls, replying to emails, all-the-while working to resolve end-user technological nightmares? I am! That's why I have put together this brief overview of tools and techniques I use in o…
The article will show you how you can maintain a simple logfile of all Startup and Shutdown events on Windows servers and desktops with PowerShell. The script can be easily adapted into doing more like gracefully silencing/updating your monitoring s…
Here's a very brief overview of the methods PRTG Network Monitor (https://www.paessler.com/prtg) offers for monitoring bandwidth, to help you decide which methods you´d like to investigate in more detail.  The methods are covered in more detail in o…
When you create an app prototype with Adobe XD, you can insert system screens -- sharing or Control Center, for example -- with just a few clicks. This video shows you how. You can take the full course on Experts Exchange at http://bit.ly/XDcourse.

762 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

11 Experts available now in Live!

Get 1:1 Help Now