サーバーのネットワーク共有上のファイルを開いたコンピューターを確認する

サーバーのネットワーク共有上のファイルを開いたコンピューターを確認する

Windows Server 2008 を使用しており、フォルダーを共有しています。多くのクライアントがそのフォルダーと継承ファイルにアクセスします。1 つのクライアントが 1 つの dll ファイルを rw モードで散発的に開くため、その後は他のクライアントがその dll をロードできなくなります。

今、どのクライアントがそれを実行するかを判断したいです。私が見つけたすべてのツール:

  • オープンファイル
  • ネット
  • シェアウォッチ
  • ネットシェアモニター

rw モードでファイルを開くネットワーク クライアントが表示されません。

ウイルス対策プログラムだと思いますが、どのクライアントがファイルを開いたのかを知る必要があります。

編集:

  • クライアントはWindowsマシンです
  • すべてのクライアントが同じユーザーを使用するため、ユーザー名でクライアントを特定することはできません

答え1

これはあなたにとって役に立つかもしれません:

ここに画像の説明を入力してください

サーバー版でも同じ場所かどうかはわかりませんが、Win+ X-> Computer Management-> System Tools-> Shared Folders->からアクセスしました。Open Files

これには、開いている各ファイル ハンドル、その「オープン モード」(読み取り/読み取り/書き込み)、およびユーザーが一覧表示されます。この場所からファイル ハンドルを閉じることもできます。

答え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

関連情報