本文共 1905 字,大约阅读时间需要 6 分钟。
HI ,大家好。
当我们谈到利用PowerShell中找到旧文件
我们的第一反应就是其中涉及减去DateTime对象或使用比较操作符。
例如,如果我们要删除超过14天所有文件,我们可以试一下。
每个FileInfo对象LastWriteTime属性大于一个DateTime对象并且减去14天
1 2 3 4 | PS> $date = ( Get-Date ).AddDays(-14) PS> Get-ChildItem -Path D:\Temp -Recurse | Where-Object { -not $_ .PsIsContainer -and $_ .LastWriteTime -gt $date } | Remove-Item -WhatIf |
在上面的小例子中,我们在过去的某一天中初始化了$data(日期),当旧的文件被我们发现时候是基于lastwritetime属性,它是通过对象删除项的cmdlet
虽然这样,但是还不是我们想要得到的,因为上面的例子并没有准确的说明时间。我们可以创建一个列表,并且创建一个新的属性
请看下面这个例子
1 2 | PS> $age = @{Name= 'Age(Days)' ;Expression={(( Get-Date ) - $_ .LastWriteTime).Days}} PS> Get-ChildItem | Select-Object -Property Name,FullName, $age |
但是如果我们对于新的时间间隔对于文件系统对象,会得到上面执行后相同的结果吗?好,cantgis 带大家试一试。
1 2 3 4 5 6 7 8 9 10 11 12 | PS> Get-ChildItem -Path $env:WINDIR \system.ini | New-TimeSpan Days : 137 Hours : 4 Minutes : 34 Seconds : 54 Milliseconds : 274 Ticks : 118532942742544 TotalDays : 137.190905952019 TotalHours : 3292.58174284844 TotalMinutes : 197554.904570907 TotalSeconds : 11853294.2742544 TotalMilliseconds : 11853294274.2544 |
1 2 3 4 5 6 7 8 | 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 |
1 2 | PS> $age = @{Name= 'Age(Days)' ;Expression={( $_ | New-TimeSpan ).Days}} PS> Get-ChildItem | Select-Object -Property Name,FullName, $age |
本文转自cantgis 51CTO博客,原文链接:http://blog.51cto.com/cantgis/1228301,如需转载请自行联系原作者