Как использовать Get-ChildItem для фильтрации заблокированных / используемых другими процессами файлов? - PullRequest
0 голосов
/ 20 июня 2019

Может ли Get-ChildItem отфильтровывать файлы, которые находятся в заблокированном состоянии?Например, файлы журналов, используемые в настоящее время приложением, и Get-ChildItem должны пропустить эти файлы в результатах.

Пример:

Get-ChildItem -Path C:\Logs\* # Maybe do pipelines condition here for filtering out locked files

1 Ответ

1 голос
/ 20 июня 2019

Я не думаю, что это можно сделать с помощью фильтра, и, конечно, вы должны иметь в виду, что файлы могут быть заблокированы / разблокированы в любое время, так что это всегда будет просто снимок, который может измениться почти мгновенно.
Это может быть способ сделать это:

Get-ChildItem -Path D:\Logs -File | ForEach-Object {
    try {
        $stream = $_.Open([System.IO.FileMode]::Open, [System.IO.FileAccess]::ReadWrite, [System.IO.FileShare]::None)
        if ($stream) { $stream.Close() }
        Write-Host "File $($_.FullName) is currently not locked" -ForegroundColor Green
    } 
    catch {
        Write-Host "File $($_.FullName) is currently locked" -ForegroundColor Red
        # emit the locked fileInfo object?
        $_
    }
}
...