Windows Server 2012 R2 Essentials の共有ファイルおよびユーザを特定、切断する方法~Get-SmbOpenFileやNET FILE

オンプレミス サーバ上で稼働しているファイル サーバですが、Windows UpdateやアプリケーションのインストールによりOSを再起動する機会は稀にあります。
今回は、Windows Server 2012 R2 Essentialsのファイル サービスを利用し、 「誰」が「どの共有ファイル」を使用しているかを確認する方法をメモ。
PowerShell、および、昔ながらの確認方法を説明します。

3行で分かる、この記事の内容!

  • 共有フォルダや共有ファイルは、複数ユーザが利用しているため日中は簡単にサーバを再起動できない!
  • とはいえ、再起動しなければならない時が来る!
  • 被害を最小限にするためにも、接続中のユーザを把握し適切に切断する方法を理解する!

PowerShellから確認する/切断する

Windows 8 / Windows Server 2012 + Windows PowerShell 4.0から、SmbShare モジュールのxxx-SmbOpenFile 関数を利用する事ができます。
利用する事で、共有ファイルを使用しているIPアドレス、ユーザ名、ファイル名等が分かります。
注意点は、PowerShellは管理者権限で実行してください。
  • 使用中のファイル情報を取得したい:
    Get-SmbOpenFile 関数を使います。
    image
  • コンピュータ名でフィルタリングする場合は、-ClientComputerName パラメータ、ユーザでフィルタリングは-ClientUserName パラメータを使います。 ユーザ名は、ドメイン名\ユーザ名になります。image
  • 使用中のファイルを強制切断したい:
    Close-SmbOpenFile 関数を使います。
    -Force パラメータを使う事で強制切断する事が出来ます。
    image
Windows 8 / 2012以外でPowerShellから接続中の共有ファイルを確認したい!場合は、AndrewMorganさんの「Get-OpenFiles」関数が便利だと思います。
Viewing open files on a file server from powershell.

コマンドプロンプトから確認する

コマンド プロンプトは、管理者として実行してください。
  • NET SHARE コマンド
    共有フォルダの一覧が確認できます
    image
  • NET SESSION コマンド
    共有フォルダに接続中のセッション情報が確認できます。
    セッションを切断する場合は、/DELETE オプションを付け実行します。
    image
  • NET FILE コマンド
    現在開かれているファイル情報が確認できます。
    ファイルを閉じる場合は、IDを指定し、/CLOSE オプションを付け実行します。
    image
  • OPENFILES.EXE
    出力結果は、NET FILE コマンドに似ていますが若干異なります。
    image
    ファイルを閉じる場合は、/Disconnect パラメータ+αを付け実行します。
    詳しくは、>openfiles.exe /Disconnect /?でヘルプを確認してください。

GUIから確認する

  1. [Win]+[R]→[compmgmt.msc]を実行
  2. [システム ツール]→[共有フォルダー]をクリック
    • [共有]は、NET SHARE コマンドの結果と同じ
    • [セッション]は、NET SESSION コマンドの結果と同じ
    • [開いているファイル]は、NET FILE コマンドの結果と同じ
image

NET xxx コマンドを実行するとエラーになる場合

コマンド プロンプト、または、PowerShellから前述のNET xxxx コマンドを実行した場合
システム エラー 5 が発生しました。
アクセスが拒否されました。
のエラー メッセージが表示される事があります。
その場合は、コマンド プロンプト、または、PowerShellを管理者として実行してください。
スポンサーリンク

スポンサーリンク