Powershell:检查文件是否被锁定

时间:2014-07-28 09:52:36

标签: file powershell locking

我在部署自动化方面遇到问题,在停止服务后,文件仍然存在锁定,我无法将其删除。我真的不想开始通过睡眠来制作一些通常可以工作的东西'。是否有一种很好的方法可以正确解决锁定文件的问题,也许某种“等到文件可以移除”':

Get-ChildItem:访问路径' D:\ MyDirectory \'被拒绝。

'测试的路径'在这种情况下是不够的,因为文件夹都存在,我可以访问它。

3 个答案:

答案 0 :(得分:24)

感谢David Brabant在最初的问题下发布了这个解决方案的链接。看来我可以通过以下功能开始这样做:

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
  }
}

然后添加'等到'超时功能。

感谢您的帮助!

答案 1 :(得分:17)

我用这个:

try { [IO.File]::OpenWrite($file).close();$true }
catch {$false}

答案 2 :(得分:2)

$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