Solved

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

Posted on 2014-01-16
10
758 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
ID: 39786548
$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
ID: 39787097
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
ID: 39787119
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
ID: 39787161
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
ID: 39787174
Much appreciated Wizard!!!

:)
0
DevOps Toolchain Recommendations

Read this Gartner Research Note and discover how your IT organization can automate and optimize DevOps processes using a toolchain architecture.

 
LVL 68

Expert Comment

by:Qlemo
ID: 39787183
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
ID: 39787190
LOL!!!
0
 
LVL 68

Expert Comment

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

Author Comment

by:paulpp
ID: 39788466
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
ID: 39788499
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

Optimizing Cloud Backup for Low Bandwidth

With cloud storage prices going down a growing number of SMBs start to use it for backup storage. Unfortunately, business data volume rarely fits the average Internet speed. This article provides an overview of main Internet speed challenges and reveals backup best practices.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Synchronize a new Active Directory domain with an existing Office 365 tenant
Create and license users in Office 365 in bulk based on a CSV file. A step-by-step guide with PowerShell script examples.
This Micro Tutorial will teach you how to censor certain areas of your screen. The example in this video will show a little boy's face being blurred. This will be demonstrated using Adobe Premiere Pro CS6.
Migrating to Microsoft Office 365 is becoming increasingly popular for organizations both large and small. If you have made the leap to Microsoft’s cloud platform, you know that you will need to create a corporate email signature for your Office 365…

863 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

23 Experts available now in Live!

Get 1:1 Help Now