指定されたディレクトリ内でロックされているファイルを検索し、ファイルをロックしたアプリケーション/プロセスを返す PowerShell スクリプトを作成したいと考えています。
ディレクトリを通過するスクリプトを見つけました。ロックされたファイルが見つかると停止し、ファイルがロックされていると報告します。
Function Test-Lock{
param(
[parameter(ValueFromPipeline=$true)]
$Path
)
Process {
if($Path.Attributes -ne 'Directory'){
$oFile = New-Object System.IO.FileInfo $Path.FullName
$locked=$false
try{
$oStream = $oFile.Open([System.IO.FileMode]::Open, [System.IO.FileAccess]::ReadWrite, [System.IO.FileShare]::None)
$oStream.Close()
}
catch{
write-host $Error[0]
$locked=$true
New-Object PSObject -Property @{'Path'=$Path.FullName;'Locked?'=$locked} | Select Path,Locked?
}
}
}
}
$lockedfiles=(gci C:\temp | Test-Lock)
$lockedfiles | Format-Table -auto
これは以下を返します:
Path Locked?
---- -------
C:\temp\ReportReq.doc True
このファイルがロックされているアプリケーションまたはプロセスを見つける方法がわかりません。