#PSTip Get old files based on LastWriteTime
Note: This tip requires PowerShell 2.0 and above
There are many ways to get the age of a file. The most common way is to subtract the file’s LastWriteTime from the current time:
PS> $now = Get-Date PS> $prof = Get-ChildItem $PROFILE PS> ($now - $prof.LastWriteTime).Days 280
Or by using the Subtract method:
PS> $now.Subtract($prof.LastWriteTime).Days 280
There is another way to get the information using a less known method of piping a file system object to the New-TimeSpan cmdlet:
PS> ($prof | New-TimeSpan).Days 280
The Start parameter of the New-TimeSpan cmdlet has a LastWriteTime parameter Alias which automatically bind the value of the incoming file system object
PS> (Get-Command New-TimeSpan).Parameters.Start
Name : Start
ParameterType : System.DateTime
ParameterSets : {[Date, System.Management.Automation.ParameterSetMetadata]}
IsDynamic : False
Aliases : {LastWriteTime}
Attributes : {System.Management.Automation.AliasAttribute, Date}
SwitchParameter : False
Here’s an example of all DLL file’s age in PowerShell’s installation directory
PS> $age = @{Name='Age(Days)'; Expression={($_ | New-TimeSpan ).Days }}
PS> Get-ChildItem $PSHOME -Filter *.dll | Select-Object Name,$age
Name Age(Days)
---- ---------
PSEvents.dll 68
pspluginwkr-v3.dll 68
pspluginwkr.dll 121
pwrshmsg.dll 68
pwrshsip.dll 68
Share on: