Comment puis-je supprimer des dossiers jusqu'à ce que MRU 5 Go d'espace libre est disponible?
-
18-09-2019 - |
Question
Étant donné un dossier, par exemple \\localhost\c$\work\
.
Je voudrais lancer un script Powershell toutes les 15 minutes qui assure 5 Go d'espace libre est disponible.
Si <5GB est disponible, supprimez le dossier le moins récemment utilisé dans le travail jusqu'à ce que> 5GB est disponible.
Pensées
La solution
Pour planifier la tâche, vous pouvez utiliser le planificateur de tâches ( exemple )
Pour un script, vous pouvez utiliser
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++
}
}
Autres conseils
Eh bien, que tout dépend de la façon dont vos dossiers sont « utilisés ». S'il n'y a pas d'indicateurs simples que vous pouvez essayer d'utiliser le .NET FileSystemWatcher classe à rechercher des changements et mémorisez ainsi qu'un horodatage dans une file d'attente, commandé par le temps d'accès. Ensuite, vous pouvez choisir le dossier suivant à supprimer de la file d'attente. Mais il est certainement pas assez.