Pergunta

Dada uma pasta, digamos \\localhost\c$\work\.

Eu gostaria de executar um script PowerShell a cada 15 minutos que garante 5GB de espaço livre está disponível.

Se <5GB está disponível, remova a pasta menos utilizados recentemente dentro da obra até> 5 GB está disponível.

Os pensamentos?

Foi útil?

Solução

Para agendar a tarefa, você pode usar o agendador de tarefas ( exemplo aqui )

Para um script que você pode usar

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

Outras dicas

Bem, isso tudo depende de como as pastas são "usadas". Se não houver indicadores simples que você pode tentar usar o .NET FileSystemWatcher classe para olhar para as mudanças e recordá-los, bem como um timestamp em uma fila, ordenados por tempo de acesso. Então você pode escolher o próximo pasta para excluir essa fila. Mas certamente não é bonito.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top