Powershell脚本,用于在可用空间低于5gb时删除最旧的文件

时间:2015-12-11 15:59:03

标签: powershell-v3.0 diskspace

我正在尝试创建一个PowerShell 3脚本,该脚本将扫描D:\folder一堆子文件夹,以逐个文件删除最旧的文件,直到可用空间为5GB,然后停止。空文件夹应保持似乎应用程序创建这些文件和文件夹,需要那些空文件夹。

我创建了一个这样的脚本,但是我需要以某种方式循环和修改它,因为它想要删除子文件夹也有一些整个内容,但我需要在最旧文件的任何文件夹中按文件删除文件直到可用空间为5GB:

[WMI]$part = "Win32_LogicalDisk.DeviceID='D:'"

if (($part.FreeSpace / $part.Size * 100) -lt 50) {
    foreach ($root in 'D:') {
        Get-ChildItem $root -Recurse |
            Sort-Object CreationTime |
            Select-Object -First 1 |
            Remove-Item
    }
}

感谢您的关注!

1 个答案:

答案 0 :(得分:0)

添加-File(如果您使用的是PS 3.0),您不会以这种方式获取文件夹,只会获得文件。您还可以使用while循环而不是if:当可用空间低于50%时,它将继续并删除文件,一次一个。在这种情况下,在循环结束时,您需要刷新可用空间信息。

我不确定WMI调用是否必须在<{em> while循环中进行,以获得最新信息。

[WMI]$part = "Win32_LogicalDisk.DeviceID='D:'"
$percent = $part.FreeSpace / $part.Size * 100

while ($percent -lt 50) {
    Get-ChildItem "D:\" -Recurse -File |
        Sort-Object CreationTime |
        Select-Object -First 1 |
        Remove-Item
    $percent = $part.FreeSpace / $part.Size * 100
}

使用PS 2.0:

[WMI]$part = "Win32_LogicalDisk.DeviceID='D:'"
$percent = $part.FreeSpace / $part.Size * 100

while ($percent -lt 50) {
    Get-ChildItem "D:\" -Recurse |
        Where-Object { -not $_.PSisContainer } |
        Sort-Object CreationTime |
        Select-Object -First 1 |
        Remove-Item
    $percent = $part.FreeSpace / $part.Size * 100
}