Windows ファイルサーバーで開いているファイルを管理および強制的に閉じる方法
ファイルサーバー上の開いているファイルの管理は、ユーザーがファイルを閉じ忘れたり、予期せず接続が切断されたりすると、かなり面倒になります。例えば、クライアントからファイルが変更できないという苦情があり、誰かがロックしているのではないかと疑っているとします。あるいは、何百ものファイルを開いているため、膨大なエントリを掘り下げることなく、それらを素早く解放する方法が必要な場合もあるでしょう。このガイドでは、厄介な開いているファイルを特定し、誰がロックしたかを確認し、必要に応じてセッションを強制的に閉じる方法について解説します。ただし、ファイルを強制的に閉じるにはリスクが伴います。ユーザーが保存していないデータを失う可能性があるため、これらのコマンドは慎重に使用してください。しかし、バックログをクリアしてシステムをスムーズに動作させるには、これが唯一の方法である場合もあります。—
Windows Serverで開いているファイルを検索して表示する方法
グラフィカルツールの使用 – クイック&ダーティメソッド
コマンド入力よりもクリック操作を好む場合は、コンピューターの管理 スナップインを使うのが最も簡単でしょう。「ファイル名を指定して実行」( Win + R) を押して、 と入力しますcompmgmt.msc。そこから、次の操作を行います。 – 「システムツール」 —> 「共有フォルダー」—> 「開いているファイル」に移動します 。 – 開いているファイルのリストが表示され、パス ( D:\files\report.xlsxなど)、接続中のユーザー、ロックの数、読み取りモードか書き込みモードかが表示されます。ヒント: 特に他のユーザーの共有にある場合は、開いているファイルをすべて表示するには管理者権限が必要になることがあります。設定によっては、リストが正しく表示されない場合、更新または再ログインすると問題が解決することがあります。Windows はこの情報の更新が不正確な場合があります。—
コマンドライン方式 – より高速かつより正確
CMDやPowerShellでの作業がお好きなら、このコマンドはopenfilesまさにうってつけです。コンソールを管理者として起動し、次のコマンドを入力するだけです。– openfiles /Query /fo csv セッション番号、ユーザー、ファイルなどを含むCSVリストが出力されます。– 注:初めて使用する場合は、最近開いたファイルを表示する前に、openfiles /Query /reloadを一度実行する必要があります。– 一部のシステムでは、ローカルセキュリティポリシーでオフラインファイルトラッキングを有効にしていないと、このコマンドを実行しても何も表示されない場合があります。または、PowerShellのGet-SmbOpenFileコマンドレット「powershell Get-SmbOpenFile | Select-Object ClientUserName, ClientComputerName, Path, SessionID」を使用すると、誰が何をどこから開いているか、そしてセッションIDが一覧表示されます。スクリプト作成や簡単なスナップショット取得に便利です。—
誰がファイルをロックしたかを確認する方法
「ドキュメントは編集のためにロックされています」のような警告メッセージが表示される場合、通常は他のユーザーがそのドキュメントを開いていることが原因です。さらに詳しく調べるには、次のコマンドを実行してください:powershell openfiles /query /s [server-name] /fo csv | find /i “filename.ext” ` を置き換えてください
Windows Serverで開いているファイルを強制的に閉じる方法
ファイルがロックされたままで、他に何も機能しない場合は、セッションを強制的に切断する必要があるかもしれません。コンピューターの管理からこれを行うことができます。 – 開いているファイルの一覧でセッションまたはファイルを見つける – 右クリックして「開いているファイルを閉じる」を選択する(GUIを使用している場合) コマンドラインから行う場合は、より高速です。まず、セッションIDを見つけます(たとえば、次のように類似性を調べます)。powershell openfiles /Query /fo csv | find /i “report2023.xlsx” 3489847304のようなIDが返された場合、そのセッションを切断できます。powershell openfiles /disconnect /ID 3489847304 成功メッセージが表示されますが、切断できない場合はエラーが表示されます。 特定のサーバー上の特定のユーザー(例えば「mjenny」)のすべてのセッションを切断するには、以下のコマンドを実行します。 powershell openfiles /disconnect /s lon-fs01 /u “corp\mjenny” /id * ここで、`/id *` は、そのユーザーのすべてのセッションを対象としています。注意:これらのコマンドは、ユーザーを突然切断するとデータ損失につながる可能性があるため、慎重に扱う必要があります。または、PowerShell の以下のコマンドを使用することもできますClose-SmbOpenFile。 powershell Close-SmbOpenFile -FileId 4123426323239 より大規模なセッションを切断するには、以下のコマンドを組み合わせて使用します。 powershell Get-SmbOpenFile | Where-Object {$_. Path -like “*annual2020.xlsx”} | Close-SmbOpenFile -Force 確認のプロンプトが表示される場合があります(Y キーを押します)。または、-Forceパラメータを追加して警告をスキップすることもできます。 —
リモートからファイルを切断する – PowerShell が助けに
これらをすべてリモートで実行したいですか?まずサーバーとのセッションを確立する必要があります:powershell $sessn = New-CIMSession -ComputerName lon-fs01 次に、パスを指定して特定のファイルを検索し、閉じます:powershell Get-SMBOpenFile -CIMSession $sessn | Where-Object {$_. Path -like “*pubs.docx”} | Close-SMBOpenFile -CIMSession $sessn これを実行する前に、サーバーでPowerShellリモート処理が有効になっていること、そして適切な権限を持っていることを確認してください。この方法は、プラグを抜くよりもシンプルで、煩わしさがありません。 —
まとめ
- コンピュータ管理 を使用して、すばやく目視確認し、手動で閉じることができます。
openfilesPowerShell などのコマンド ライン ツールをGet-SmbOpenFile使用すると、大量のアクションや自動化されたアクションがはるかに簡単になります。- ファイルを強制的に閉じる場合は注意してください。保存されていない編集内容が失われる可能性があります。
- リモート切断は PowerShell 経由で実行できますが、適切な設定と権限が必要です。
まとめ
Windows環境で開いているファイルの管理は、特に混雑したサーバーでは面倒な作業になることがあります。上記の方法は様々な環境で有効でしたが、場合によってはコマンドラインに頼らざるを得ないこともあります。この方法が、頑固にロックされたファイルの修復に取り組んでいる方の時間を少しでも短縮できれば幸いです。ただし、これらの機能は賢く使うことを忘れないでください。頑張ってください!