如何使用Get-ChildItem过滤掉另一个进程文件已锁定/正在使用的文件?

时间:2019-06-20 08:59:30

标签: powershell get-childitem locked-files

Get-ChildItem能够过滤出处于锁定状态的文件吗?例如应用程序当前正在使用的日志文件,Get-ChildItem应该在结果中跳过这些文件。

示例:

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

1 个答案:

答案 0 :(得分:1)

我不认为可以使用过滤器来做到这一点,当然您应该记住文件可以随时被锁定/解锁,因此这始终只是快照,几乎可以立即更改。
这可能是一种方法:

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?
        $_
    }
}