Как я могу удалить папки LRU до тех пор, пока не освободится 5 ГБ свободного места?
-
18-09-2019 - |
Вопрос
Получив папку, скажем \\localhost\c$\work\
.
Я бы хотел запускать скрипт powershell каждые 15 минут, который гарантирует наличие 5 ГБ свободного места.
Если < Доступно 5 ГБ, удалите наименее недавно использованную папку в work, пока не будет доступно > 5 ГБ.
Мысли?
Решение
Чтобы запланировать выполнение задачи, вы можете использовать планировщик задач (пример здесь)
Для сценария, который вы могли бы использовать
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 Просмотр файловой системы класс для поиска изменений и запоминания их, а также временная метка в очереди, упорядоченная по времени доступа.Затем вы можете выбрать следующую папку для удаления из этой очереди.Но это, конечно, некрасиво.