Powershell: Check if a file is locked
With thanks to David Brabant who posted a link to this solution under the initial question. It appears I can do this by starting off with the following function:
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() } return $false } catch { # file is locked by a process. return $true }}
Then add a 'wait until' function with a timeout.
Thanks for your help!
$fileName = "C:\000\Doc1.docx"$file = New-Object -TypeName System.IO.FileInfo -ArgumentList $fileName$ErrorActionPreference = "SilentlyContinue"[System.IO.FileStream] $fs = $file.OpenWrite(); if (!$?) { $msg = "Can't open for write!"}else { $fs.Dispose() $msg = "Accessible for write!"}$msg