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



我正在尝试创建一个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
    }
}

感谢您的关注!

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

我不确定WMI调用是否也必须在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
}

最新更新