Pregunta

Dada una carpeta, por ejemplo \\localhost\c$\work\.

Me gustaría ejecutar un script de PowerShell cada 15 minutos que asegura 5GB de espacio libre disponible.

Si <5 GB está disponible, quite la carpeta menos usado recientemente en el trabajo hasta> 5 GB está disponible.

Los pensamientos?

¿Fue útil?

Solución

Para programar la tarea, puede utilizar el programador de tareas ( ejemplo aquí )

Para una secuencia de comandos que puede utilizar

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++
    } 
}

Otros consejos

Bueno, todo depende de cómo sus carpetas se "utilizan". Si no existen indicadores sencillos que puede tratar de usar el .NET FileSystemWatcher clase para buscar los cambios y ellos, así como una marca de tiempo en una cola ordenada por tiempo de acceso recordar. A continuación, se puede recoger la siguiente carpeta para eliminar de esa cola. Pero ciertamente no es bastante.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top