代码改变世界

PowerShell2.0之桌面计算机维护(一)监控磁盘空间

2011-01-07 03:19 by @天行健中国元素, ... 阅读, ... 评论, 收藏, 编辑

随着时间的增长,系统中的可用空间会越来越少。系统管理员需要清理磁盘,前提是了解系统磁盘空间,为此需要追踪一段时间内的磁盘空间的使用情况。创建名为“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文件夹中文件的过期时间不同而显示不同的结果,但其原理一致。

image

图1 执行结果

作者: 付海军
出处:http://fuhj02.cnblogs.com
版权:本文版权归作者和博客园共有
转载:欢迎转载,为了保存作者的创作热情,请按要求【转载】,谢谢
要求:未经作者同意,必须保留此段声明;必须在文章中给出原文连接;否则必究法律责任
个人网站: http://txj.shell.tor.hu/