【 Get-SmbOpenFile 】コマンドレット――SMBサーバ上で開かれているファイルに関する情報を取得するWindows PowerShell基本Tips(75)

本連載は、PowerShellコマンドレットについて、基本書式からオプション、具体的な実行例までを紹介していきます。今回は「Get-SmbOpenFile」コマンドレットを解説します。

» 2023年07月07日 05時00分 公開
[後藤諭史@IT]

この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。

「Windows PowerShell基本Tips」のインデックス

連載目次

 本連載では、Windows PowerShellの基本的なコマンドレットについて、基本的な書式からオプション、具体的な実行例までを分かりやすく紹介していきます。今回は、SMBサーバ上で開かれているファイルの情報を取得する「Get-SmbOpenFile」コマンドレットです。

Get-SmbOpenFileコマンドレットとは?

 Windowsのファイル共有は、「SMB(Server Message Block)」プロトコルを使用したネットワークファイルシステムです。その歴史は古く、「Microsoft One Drive」や「Microsoft Teams」といったファイルを共有できるクラウドサービス出現以前から、企業ITシステムを支えてきました。

 One Driveでは「ファイルを同時に複数人で開いて、同時に編集する」という共同作業が当たり前にできますが、Windowsの共有フォルダでは1人がファイルを開くとファイルが「ロック」され、他の人はそのファイルを編集することができません(画面1)。

ALT 画面1 Windowsの共有フォルダでは、同時にファイルを開くと一方には「使用中のファイル」と表示されて編集できない

 ファイルを編集するには、編集可能な状態でファイルを開いている人に、いったんファイルを閉じてもらうしかありません。

 こうした状況で必要なのは、「誰が」「どこから」ファイルを開いているかを確認する手段であり、それを可能にするのがGet-SmbOpenFileコマンドレットです。

 Get-SmbOpenFileコマンドレットでは、現在SMBサーバ上で開かれているファイルや、「誰が」「どこからアクセスしてきているか」などの詳細情報を取得することが可能です。

 コマンドプロンプトであれば「net」コマンドの「file」オプションを付与しての実行になりますが、Get-SmbOpenFileコマンドレットであればより細かい情報を取得できます。

Get-SmbOpenFileコマンドレットの書式

Get-SmbOpenFile [オプション]


Get-SmbOpenFileコマンドレットの主なオプション

オプション 意味
-SessionId 情報を取得したいオープンファイルのセッションIDを指定する。省略可能
-ClientComputerName 情報を取得したいオープンファイルの使用者IPアドレスを指定する。省略可能
-ClientUserName 情報を取得したいオープンファイルの使用者ユーザー名を指定する。省略可能


開かれているファイルの情報を取得する

 オプションを指定せずにGet-SmbOpenFileコマンドレットを実行すると、基本的なセッション情報を取得できます(画面2)。取得可能な情報は、「ファイルID」「セッションID」「ファイルパス」「相対パス」です。なお、Get-SmbOpenFileコマンドレットは、管理者権限で実行する必要があります。

コマンドレット実行例

Get-SmbOpenFile

ALT 画面2 Get-SmbOpenFileコマンドレットをオプションなしで実行した結果


Format-Listを使用して詳細情報を取得する

 「Format-List」(「FL」と省略可能)を併用すると、オープンファイルの詳細情報を取得できます。FLを併用する場合は、コマンドレット実行例のようにパイプ(|)でつないで実行します。Format-Listに対してオプションを付与せずに実行すると、代表的なプロパティが取得できます(画面3)。

コマンドレット実行例

Get-SmbOpenFile | fl

ALT 画面3 Get-SmbOpenFileとFormat-Listの短縮形をパイプ(|)でつないで併用した

 Format-Listに「*」オプションを付与して実行すると、取得可能なプロパティを全て表示できます(画面4)。

コマンドレット実行例

Get-SmbOpenFile | fl *

ALT 画面4 「*」オプションを付与して実行すると、取得可能なプロパティを全て表示できる

 なお、Format-Listで詳細情報を出力すると情報過多になるため、必要な情報のみを出力したい場合は、以下のようなコマンドレットを実行します(画面5)。

コマンドレット実行例

Get-SmbOpenFile | FT FileId,Path,ClientComputerName,ClientUserName

ALT 画面5 必要な情報のみをFormat-Tableで加工して出力した

 画面5のような状態で出力すれば、誰がどこからどのファイルを開いているかをひと目で把握できます。



Get-SmbSessionコマンドレットを併用し、ファイルを開いてからの経過時間を知る

 Get-SmbOpenFileコマンドレットで出力される「Session ID」は、本連載第74回で紹介した「Get-SmbSession」コマンドレットで取得できるSession IDと共通(ファイルを開いているSMBセッションを表している)です。

 したがって、このファイルが「いつから開かれていたのか」(開いてからどのくらいの秒数が経過しているか)を確認することも可能です(画面6)。

コマンドレット実行例

Get-SmbSession -SessionId (Get-SmbOpenFile -FileId "739002810973").SessionId | FT SecondsExists,SecondsIdle

ALT 画面6 「Get-SmbSession」コマンドレットを併用すると、ファイルを開いてからの経過時間とアイドル時間を取得できる

筆者紹介

後藤 諭史(ごとう さとし)

Microsoft MVP for Cloud and Datacenter Management(2012-2023)。現業の傍ら、コミュニティーイベントでの登壇や著作にてMicrosoftテクノロジーに関する技術情報の発信、共有を続けている。ネットワークやハードウェアといった物理層に近いところが大好きな、昔ながらのインフラ屋さん。得意技はケーブル整線。近著は『詳解! Windows Server仮想ネットワーク』(日経BP社)。


Copyright © ITmedia, Inc. All Rights Reserved.

スポンサーからのお知らせPR

注目のテーマ

Microsoft & Windows最前線2025
AI for エンジニアリング
ローコード/ノーコード セントラル by @IT - ITエンジニアがビジネスの中心で活躍する組織へ
Cloud Native Central by @IT - スケーラブルな能力を組織に
システム開発ノウハウ 【発注ナビ】PR
あなたにおすすめの記事PR

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。