Windows Server 2008 を使用しており、フォルダーを共有しています。多くのクライアントがそのフォルダーと継承ファイルにアクセスします。1 つのクライアントが 1 つの dll ファイルを rw モードで散発的に開くため、その後は他のクライアントがその dll をロードできなくなります。
今、どのクライアントがそれを実行するかを判断したいです。私が見つけたすべてのツール:
- オープンファイル
- ネット
- シェアウォッチ
- ネットシェアモニター
rw モードでファイルを開くネットワーク クライアントが表示されません。
ウイルス対策プログラムだと思いますが、どのクライアントがファイルを開いたのかを知る必要があります。
編集:
- クライアントはWindowsマシンです
- すべてのクライアントが同じユーザーを使用するため、ユーザー名でクライアントを特定することはできません
答え1
答え2
私たちは何年もこれをやりたいと思っていました!
今日、私たちはこのユーティリティを発見しました:
https://www.nirsoft.net/utils/network_opened_files.html
素晴らしい!
編集:
Nirsoft の NetworkOpenedFiles を使用すると、Windows ファイル共有上で開いているファイルがあるホストを特定できます。
答え3
これは古い質問ですが、それでも:
PowerShell 4.0 以降 (Windows Server 2008 には付属していないため、PowerShell バージョンを更新する必要があります) をお持ちの場合は、以下を使用できます。
サーバー上で直接:
Get-SmbOpenFile | where-object { $_.Path -like 'C:\foo\bar\*' }
リモートマシンから:
$cim = New-CimSession ServerName -Credential (get-credential)
Get-SmbOpenFile -CimSession $cim | where-object { $_.Path -like 'C:\foo\bar\*' }
Get-SmbOpenfile
サーバー上で開いているすべてのファイルのリストを返します。これを使用してフィルタリングし、where-object
探しているファイルのみを表示します。
ClientComputerName
これにより、ファイルを開いたコンピューターの IPなどが返されます。
出力例を次に示します。
PS C:\WINDOWS\system32> get-smbopenfile -cimsession $cim | where-object { $_.Path -like 'D:\Daten\Transfer\*' }
FileId SessionId Path ShareRelativePath ClientComputerName ClientUserName PSComputerName
------ --------- ---- ----------------- ------------------ -------------- --------------
347355680805 348160786757 D:\Daten\TRANSFER\xy TRANSFER\xy 10.0.0.114 INTERNAL\xy Server
返された IP アドレスのホスト名をすぐに確認したい場合は、次のコマンドを使用します。
[Net.DNS]::GetHostByAddress("10.0.0.114") | select -expand HostName