随着时间的增长,系统中的可用空间会越来越少。系统管理员需要清理磁盘,前提是了解系统磁盘空间,为此需要追踪一段时间内的磁盘空间的使用情况。创建名为“QueryOldFiles.ps1”的脚本连接到特定文件夹,并为其中所有超过30天未访问过的文件生成列表,在获得过期文件后可以根据实际情况处理。该脚本的代码如下:
function FunWithLine ($strIN)
{
$num = $strIN.length
for($i=1 ; $i -le $num ; $i++)
{ $funline = $funline + "=" }
Write-Host -ForegroundColor yellow $strIN
Write-Host -ForegroundColor darkYellow $funline
}
$folder = "c:\Windows"
$date = Get-Date
$limit = 30
Get-ChildItem -Path $folder -force |
foreach-object `
{
$newDate=($_.LastAccessTime).adddays($limit)
$limitDate = New-TimeSpan -start $date -end $newDate
if ($limitDate -le 0)
{
$xfiles += @{ $_.name = $_.lastAccessTime }
}
}
Write-Host "There are $($xfiles.count) files from $folder greater than $limit days old."
FunWithLine("The expired files are listed below:")
$xfiles
其中首先定义了FunWithLine函数获得传递给函数的字符串的长度,并使用Write-Host cmdlet创建用黄色显示带下画线的字符。然后初始化3个变量,其中是$folder保存要检查过期文件的文件夹的路径;$data保存当前日期的datetime(日期时间)对象。当前日期可以通过Get-Date cmdlet获取,$limit变量值用于判断允许文件存在的最长寿命,可以据此决定是否需要将其报告为过期文件。
在初始化3个变量之后使用Get-Children cmdlet获得要检查的文件列表,将$folder变量中包括的字符串提供给Get-Children cmdlet的-path参数。然后使用-force参数返回隐藏文件,并将生成的fileinfo对象采用管道传递给ForEach-Object cmdlet。
在ForEach-Object代码块中创建了新的datetime对象并将其保存在$newDate变量中,为了在文件现有最后访问时间点的基础上增加天数$limit,使用了addDays()方法。datetime对象通过查询管道中当前fileinfo对象的LastAccessTime属性获得。
使用New-TimeSpan cmdlet创建代表文件的有效存活时间段,其中该对象为当前时间$date变量提供-start参数。将$newDate变量提供给-end参数,表示文件最后访问日期要求的过期时间$limit,最后在$limitdate变量中保存获得的timespan对象。当$limitdate值小于等于0时,则将当前对象输出给$xfiles变量,表示文件的最后访问日期已经超过了$limit变量中指定的过期时间。图1所示即此脚本在Windows文件夹中的执行结果,需要提示的是执行此脚本会因为Windows文件夹中文件的过期时间不同而显示不同的结果,但其原理一致。
图1 执行结果
作者: 付海军
版权:本文版权归作者所有
转载:欢迎转载,为了保存作者的创作热情,请按要求【转载】,谢谢
要求:未经作者同意,必须保留此段声明;必须在文章中给出原文连接;否则必究法律责任
个人网站: http://txj.shell.tor.hu/