Как удалить папки LRU, пока не освободится 5 ГБ свободного места?
Задается папка, скажем \localhostc$work
.
Я хотел бы запускать сценарий powershell каждые 15 минут, что гарантирует наличие 5 ГБ свободного пространства.
Если доступно 5 ГБ.
Мысли?
2 ответа:
Для планирования задачи можно использовать планировщик задач (пример здесь)
Для скрипта можно использовать
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++ } }
Ну, это все зависит от того, как ваши папки "используются". Если нет простых индикаторов, вы можете попробовать использовать класс .NET FileSystemWatcher для поиска изменений и запоминания их, а также временной метки в очереди, упорядоченной по времени доступа. Затем вы можете выбрать следующую папку для удаления из этой очереди. Но это, конечно, не очень красиво.