Windows Vista Forums
Vista Forums Home Join Vista Forums Webcasts Windows 7 Forum Vista Tutorials Tags

Welcome to Vista Forums we are your forum to discuss Windows Vista x64 and x86 systems. Whether you need help or just want to post an idea you have on Vista, this is the forum for you.
Register at Vista forums...the world biggest Windows Vista resource Join Vista Forums Now

Go Back   Vista Forums > Microsoft Technical Newsgroups > PowerShell

Delete based on date

Update your Vista Drivers Update Your Drivers Now!!
Closed Thread
 
Thread Tools Display Modes
Old 09-13-2006   #1 (permalink)
Woody UK
Guest


 

Delete based on date

Hi

I need a powershell script that can do the following :

Look at a folder including subfolders and delete any .ppt files that
are more then 7 days old. I need to delete the files plus the folders
(if empty). I have a vbscript at the moment but have got stuck on how
to only delete .ppt or delete the folder if empty. It works otherwise.

Can anyone help ?

Thanks


My System SpecsSystem Spec
Old 09-13-2006   #2 (permalink)
=?Utf-8?B?ZHJlZXNjaGtpbmQ=?=
Guest


 

RE: Delete based on date

I did not test it, because I don't collect .ppt files, but I think this
should do the trick.

Get-ChildItem -Recurse |
Where-Object { ( ($_.LastWriteTime.Date -le (Get-Date).Date.AddDays(-7))
-and ( ($_.name -like "*.ppt") -or ($_.PSisContainer -eq $true) ) )} |
Remove-Item -Confirm

You might also want to have a look at the official PoweShell blog:
http://blogs.msdn.com/powershell/arc...Functions.aspx

--
greetings
dreeschkind

"Woody UK" wrote:

> Hi
>
> I need a powershell script that can do the following :
>
> Look at a folder including subfolders and delete any .ppt files that
> are more then 7 days old. I need to delete the files plus the folders
> (if empty). I have a vbscript at the moment but have got stuck on how
> to only delete .ppt or delete the folder if empty. It works otherwise.
>
> Can anyone help ?
>
> Thanks
>
>

My System SpecsSystem Spec
Old 09-13-2006   #3 (permalink)
Woody UK
Guest


 

Re: Delete based on date

Hi

> Get-ChildItem -Recurse |
> Where-Object { ( ($_.LastWriteTime.Date -le (Get-Date).Date.AddDays(-7))
> -and ( ($_.name -like "*.ppt") -or ($_.PSisContainer -eq $true) ) )} |
> Remove-Item -Confirm


Thank you!, pleased you replied as I was no where near close to getting
this correct. :-)
I need to buy a book and do some reading on this one evening, just have
to get something working today. Is there a good book / PDF out there
which I can read to give me a total newbie guide?

Powershell looks like it kicks arse, was a bit batch file person until
seeing this.

Four questions :-)

a) I need modified date rather than LastWriteTime. Is there a
LastModified param?
b) I created the following structure to test

root
Folder1
myfile1.ppt
myfile2.ppt
myfile1.ppt
myfile2.ppt

I ran your script and it deleted all .ppt however it did not delete
folder1 even though it was empty. I do not want to delete the folder
if other files are in there, only if empty.

c) Is there a switch to stop it asking for confirmation on delete? When
I run it asks me to confirm.

d) What is the best way to create this as a shortcut? Copy your code to
a text file and create a new shortcut which opens that text file using
powershell ? It will not be a technical person - just want to create a
"cleanup" shortcut on the desktop.

e) Can I lock this script to only run in a specifaed path. ie c:\my
folder\ At the moment if I ran this on C:\ by accident it would cause
big problems :-)

Thank you for your help.

My System SpecsSystem Spec
Old 09-13-2006   #4 (permalink)
=?Utf-8?B?ZHJlZXNjaGtpbmQ=?=
Guest


 

Re: Delete based on date

"Woody UK" wrote:

> Hi
>
> > Get-ChildItem -Recurse |
> > Where-Object { ( ($_.LastWriteTime.Date -le (Get-Date).Date.AddDays(-7))
> > -and ( ($_.name -like "*.ppt") -or ($_.PSisContainer -eq $true) ) )} |
> > Remove-Item -Confirm

>
> Thank you!, pleased you replied as I was no where near close to getting
> this correct. :-)
> I need to buy a book and do some reading on this one evening, just have
> to get something working today. Is there a good book / PDF out there
> which I can read to give me a total newbie guide?


A good starting point is wikipedia, it lists some books that will be
released later this year. http://en.wikipedia.org/wiki/Windows_PowerShell
You can download some parts of the other books for free.
The MSH book by Andy Oakley is good to understand the basic concept of
PowerShell but many of the exampels are outdated since the book is based on
an older version of PowerShell.
Some Microsoft pages:
http://www.microsoft.com/technet/scr.../hubs/msh.mspx
http://www.microsoft.com/windowsserv...l/default.mspx
http://channel9.msdn.com/wiki/defaul...PowerShellWiki

I already mentioned the official PowerShell blog, there are many more good
blogs online:
http://mow001.blogspot.com/
http://monadblog.blogspot.com/
http://mshforfun.blogspot.com/

> Powershell looks like it kicks arse, was a bit batch file person until
> seeing this.
>
> Four questions :-)
>
> a) I need modified date rather than LastWriteTime. Is there a
> LastModified param?

Get-Item C:\myfile.txt or Get-ChildItem C:\
gives you objects which contain properties or members. One of those members
is LastWriteTime, which is an object itself. There is also a LastAccessTime
property which is also a datetime object. You can see all members (properties
and methods) of an object by piping it to Get-Member:

PS> Get-Item C:\myfile.txt | Get-Member
PS> Get-ChildItem C:\ | gm #gm is an alias for Get-Member

To get the only date of the LastWriteTime, you need to access the date
member of the datetime object:

PS> (Get-Item C:\myfile.txt).LastWriteTime.Date
PS> (Get-Item C:\myfile.txt).LastWriteTime.Day
PS> (Get-Item C:\myfile.txt).LastWriteTime.Year

To see all members, again, just pipe the datetime object to Get-Member

PS> (Get-Item C:\myfile.txt).LastWriteTime | gm
PS> Get-Date | Get-Member

> b) I created the following structure to test
>
> root
> Folder1
> myfile1.ppt
> myfile2.ppt
> myfile1.ppt
> myfile2.ppt
>
> I ran your script and it deleted all .ppt however it did not delete
> folder1 even though it was empty. I do not want to delete the folder
> if other files are in there, only if empty.


Oh I see, I think you will need to adjust the script.
You can test if a directory is empty by comparing the number of ChildItems
with zero.

PS> @(Get-ChildItem C:\windows).count -eq 0
False

(The @() syntax is used to force PowerShell to treat the result of
Get-ChildItem as an array, even if only one or no items are returned.)

> c) Is there a switch to stop it asking for confirmation on delete? When
> I run it asks me to confirm.


I added the "-confirm" parameter to the Remove-Item cmdlet to protect you
from your self ;-) If you are sure that you know what you're doing then
just remove it.

> d) What is the best way to create this as a shortcut? Copy your code to
> a text file and create a new shortcut which opens that text file using
> powershell ? It will not be a technical person - just want to create a
> "cleanup" shortcut on the desktop.


By default ps1 scripts are not connected with powershell.exe for security
reasons. You can do that manually. The easiest way may be to start your
script from inside an batch file by calling powershell.exe and providing the
script to launch as a parameter:

#############
runscript.bat
#############
C:\blabla\powershell.exe -command "C:\do-foo.ps1"
#############

Type powershell -? to see all available parameters.

> e) Can I lock this script to only run in a specifaed path. ie c:\my
> folder\ At the moment if I ran this on C:\ by accident it would cause
> big problems :-)


Have a look at the online help:
PS> Get-ChildItem -? | more
Many cmdlets have a -Path parameter which you can use to specify the
directory. By default this is usually the current directory "."

Get-ChildItem -Path C:\mydir -recurse

> Thank you for your help.
>


No problem.

--
greetings
dreeschkind
My System SpecsSystem Spec
Closed Thread

Thread Tools
Display Modes



Similar Threads
Thread Thread Starter Forum Replies Last Post
Copy files based upon Create Date AHartman PowerShell 2 07-23-2008 05:32 PM
Re: PS Script to automate checking date of file and delete if old Shay Levy [MVP] PowerShell 0 07-09-2008 06:19 PM
Delete by Date ND Campbell Vista mail 1 01-25-2008 11:37 PM
Delete files based on last accessed date? steveb PowerShell 3 07-23-2007 10:09 AM
Cannot delete out of date driver Laertes Vista account administration 5 06-19-2007 08:59 AM


Vistax64.com is an independent web site and has not been authorized,
sponsored, or otherwise approved by Microsoft Corporation.
"Windows Vista", the Start Orb, and related materials are trademarks of Microsoft Corp.
© Designer Media 2005-2008

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51