如何在5GB可用空间可用之前删除LRU文件夹?

时间:2009-07-21 21:36:35

标签: powershell file-io directory lru delete-directory

给定一个文件夹,说\\localhost\c$\work\

我想每15分钟运行一次PowerShell脚本,确保有5GB的可用空间。

如果< 5GB可用,删除工作中最近最少使用的文件夹,直到> 5GB可用。

思想?

2 个答案:

答案 0 :(得分:2)

要安排任务,您可以使用任务计划程序(example here

对于脚本,您可以使用

param($WorkDirectory = 'c:\work'
    , $LogFile = 'c:\work\deletelog.txt' )

#Check to see if there is enough free space
if ( ( (Get-WmiObject -Query "SELECT FreeSpace FROM Win32_LogicalDisk WHERE DeviceID = 'C:'").FreeSpace / 1GB ) -lt 5)
{
    #Get a list of the folders in the work directory
    $FoldersInWorkDirectory = @(Get-ChildItem $WorkDirectory | Where-Object {$_ -is [System.IO.DirectoryInfo]} | Sort-Object -Property LastWriteTime -Descending)
    $FolderCount = 0

    while ( ( (Get-WmiObject -Query "SELECT FreeSpace FROM Win32_LogicalDisk WHERE DeviceID = 'C:'").FreeSpace / 1GB ) -lt 5)
    {
            #Remove the directory and attendant files and log the deletion
        Remove-Item -Path $FoldersInWorkDirectory[$FolderCount].FullName -Recurse
            "$(Get-Date) Deleted $($FoldersInWorkDirectory[$FolderCount].FullName)" | Out-File -Append $LogFile

            $FolderCount++
    } 
}

答案 1 :(得分:0)

嗯,这完全取决于你的文件夹是如何被“使用”的。如果没有简单的指示符,您可以尝试使用.NET FileSystemWatcher类来查找更改并记住它们以及队列中的时间戳,按访问时间排序。然后,您可以选择要从该队列中删除的下一个文件夹。但它肯定不漂亮。