Удалить файлы, которые не заблокированы (используются)

Я пытаюсь удалить все файлы (не папки) в %TEMP% которые старше 30 дней. Проблема в том, что некоторые файлы используются программой, поэтому их нельзя удалить. Я попытался решить проблему следующим образом:

   function IsFileLocked($filePath){
        #write-host $filePath

        Rename-Item $filePath $filePath -ErrorVariable errs -ErrorAction SilentlyContinue
        $errs.Count
        if ($errs.Count -ne 0)
        {
            return $true #File is locked
        }
        else 
        {
            return $false #File is not locked  
        }
    }

 $Path= "$env:temp"
    if ((Test-Path -Path $Path) -ieq $true) 
    {
    $Daysback =  '-30'
    $CurrentDate = Get-Date
    $DatetoDelete = $CurrentDate.AddDays($Daysback) 

    get-childitem $Path -recurse  | Where-Object {$_.LastWriteTime  -lt $DatetoDelete } | 
    Where-Object {$_.PSIsContainer -eq $False }| Where-Object {(IsFileLocked -filePath "($_)") -eq $false }# | remove-item   -force #-WhatIf
    }

Проблема в том, что (IsFileLocked -filePath "($_)") -eq $false не возвращает ни одного элемента.

Возможно ли, что get-childitem блокирует файлы, чтобы все они были заблокированы при запуске get-childitem?

Любые другие идеи, как решить эту проблему?

1 ответ

Решение

Как насчет удаления файлов старше 30 дней и игнорирования ошибок:

$old = (Get-Date).AddDays(-30)

Get-ChildItem $env:TEMP -Recurse | 
Where-Object {!$_.PSIsContainer -and $_.LastWriteTime -lt $old } | 
Remove-Item -Force -ErrorAction SilentlyContinue
Другие вопросы по тегам