Yerel bilgisayarda açık dosyaların listesini değişik şekillerde alınabiliyor. Resource Monitor, Process Monitor veya komut satırından handles.exe ile bunu yapmak mümkün. Ama uzak bilgisayardaki açık dosyalar için aynı şeyi yapmak zor. Her seferinde uzak masaüstünden bağlanıp bunu yapmak da istemiyorum. Önce psexec ile handles'i uzak bilgisayarda çalıştırmayı düşündüm ama hem çok yavaş sonuç döndü, hem de dönen sonuçlarda görmeyi istediğim açılan dosya ile bu dosyayı açan proses aynı satırda yer almadığı için find.exe veys findstr.exe ile süzmek mümkün olmadı.
Sonra bugün öğrendiğim başka bir araç buldum: openfiles.exe
Bugüne kadar kullanmamış olmama şaşırmakla birlikte aynı anda şu adreste gösterilen şekilde powershell ile birlikte kullanmak çok hoşuma gitti.
PS> openfiles /Query /S SERVER01 /FO CSV /V | ConvertFrom-Csv | Out-GridView
Bu şekilde gelen grid nesnesinin içinde kelime araması yapmak da mümkün.
Bunu bir powershell fonksiyonu yaparak sadece bilgisayar adını değiştirerek çağırmak da güzel oldu:
function Get-OpenFiles
{
[CmdletBinding()]
param(
[string]$Computername=$env:COMPUTERNAME,
[string]$Output
)
if ($Output -eq "table")
{
openfiles /Query /S $Computername /FO TABLE /V
}
elseif ($Output -eq "csv")
{
openfiles /Query /S $Computername /FO CSV /V
}
elseif ($Output -eq "list")
{
openfiles /Query /S $Computername /FO LIST /V
}
else
{
openfiles /Query /S $Computername /FO CSV /V | ConvertFrom-Csv | Out-GridView
}
}
Bu şekilde hiçbir Output parametresi verilmezse grid yeni bir pencerede grid nesnesinde görüntülenecek. Diğer seçeneklerde de console host içinde tablo, liste ve csv formatında çıktı almak mümkün.
Ek 2022-11-04: Sadece SMB paylaşımında kullanımda olan dosyaları görmek için kullanıyorsak SmbShare modülü ile birlikte gelen Get-SmbOpenFile cmdlet'i de kullanılabilir.