Как удалить папки LRU, пока не освободится 5 ГБ свободного места? - PullRequest
2 голосов
/ 22 июля 2009

Для данной папки произнесите \\localhost\c$\work\.

Я бы хотел запускать скрипт powershell каждые 15 минут, чтобы обеспечить доступность 5 ГБ свободного места.

Если доступно <5 ГБ, удаляйте наименее использованную папку в рабочей среде, пока не станет доступно> 5 ГБ.

Мысли

Ответы [ 2 ]

2 голосов
/ 22 июля 2009

Чтобы запланировать задачу, вы можете использовать планировщик задач ( пример здесь )

Для скрипта вы можете использовать

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++
    } 
}
0 голосов
/ 22 июля 2009

Ну, все зависит от того, как ваши папки «используются». Если нет простых индикаторов, вы можете попробовать использовать класс .NET FileSystemWatcher , чтобы найти изменения и запомнить их, а также метку времени в очереди, упорядоченную по времени доступа. Затем вы можете выбрать следующую папку для удаления из этой очереди. Но это, конечно, не красиво.

...