Weryfikacja, czy plik jest używany lub zablokowany przez inny proces/użytkownika
W przypadku, gdy zachodzi potrzeba sprawdzenia czy dany plik jest wykorzystywany przez jakiś proces lub innego użytkownika można do tego celu wykorzystać następująca funkcję:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
function Test-FileLock { param ([parameter(Mandatory=$true)][string]$Path) $oFile = New-Object System.IO.FileInfo $Path if ((Test-Path -Path $Path) -eq $false) { return $false } try { $oStream = $oFile.Open([System.IO.FileMode]::Open, [System.IO.FileAccess]::ReadWrite, [System.IO.FileShare]::None) if ($oStream) { $oStream.Close() } $false } catch { # file is locked by a process. return $true } } |
Opublikowaną swego czasu przez Davida Brabanta
Całe testowanie prowadza się do wykonania polecenia:
1 |
Test-FileLock C:\Logs\Log1.log |
które zwraca odpowiedzi na zasadzie prawda/fałsz – proste szybkie i skuteczne.
Ku pamięci – żeby nie musieć w przyszłości jeszcze raz „odkrywać Ameryki na nowo”… 🙂