フォルダが与えられたとします \\localhost\c$\work\
。
5 GB の空き容量を確保するために、15 分ごとに PowerShell スクリプトを実行したいと考えています。
使用可能な容量が 5GB 未満の場合は、5GB を超える容量が使用可能になるまで、work 内で最も使用頻度の低いフォルダーを削除します。
考え?
フォルダが与えられたとします \\localhost\c$\work\
。
5 GB の空き容量を確保するために、15 分ごとに PowerShell スクリプトを実行したいと考えています。
使用可能な容量が 5GB 未満の場合は、5GB を超える容量が使用可能になるまで、work 内で最も使用頻度の低いフォルダーを削除します。
考え?
タスクをスケジュールするには、タスク スケジューラを使用できます (例はこちら) 。
使用できるスクリプトの場合
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クラスを使用して変更を探し、それらと、アクセス時間順に並べられたキュー内のタイムスタンプを記憶してみてください。次に、そのキューから削除する次のフォルダーを選択できます。しかし、それは確かにきれいではありません。