2017年7月28日 星期五

管理 Windows Server 檔案伺服器中已開啟的檔案和資料夾

1. 使用 "系統管理工具 > 共用與存放管理" 的 “管理開啟的檔案”

在 Windows Server 2008 R2 要管理檔案伺服器中已經開啟的檔案和資料夾,可以使用 "系統管理工具 > 共用與存放管理" 的 “管理開啟的檔案” 功能。




Windows Server 2012 R2,"共用與存放管理" 被擺放到了 "遠端伺服器管理工具" 項目下 ("新增角色及功能精靈" 的: 功能 > 遠端伺服器管理工具 > 角色管理工具 > 檔案服務工具 > 共用與存放管理工具);代表 "共用與存放管理" 只能夠被用在 "遠端伺服器管理" 工作上,而無法提供本機 (Windows Server 2012 R2) 的 "共用與存放管理"。


執行 Windows Server 2012 R2 的 "共用與存放管理",出現該工具只能夠在 Windows 2008 或 2008 R2 中使用 (難怪放到遠端伺服器管理工具了),2012 以後的請使用伺服器管理員的提示。)



而 Windows 2012 R2 的 "伺服器管理員 > 檔案和存放服務 > 共用" 也沒有提供 “管理開啟的檔案” 的相關功能。




2. 使用 Microsoft 管理主控台的 "共用資料夾" (FSMGMT.MSC)

Microsoft 管理主控台的 "共用資料夾" 也提供了管理開啟檔案的功能。執行 "FSMGMT.MSC" (在命令提示字元或是 Windows圖示 + R),開啟 "共用資料夾" 管理主控台,可以較快地 (跟上述的 "共用與存放管理" 相比) 管理已經開啟的共用檔案,是最方便的圖形化共用資料夾管理工具。



在微軟的 TechNet,有人建議應該要使用  FSMGMT.MSC 來替代 "共用與存放管理",因為 FSMGMT.MSC 是一個較快速且具有時間彈性選擇 (A faster and more time resilient alternative):
https://technet.microsoft.com/en-us/library/cc725689(v=ws.11).aspx

3. 使用 OPENFILES 指令

除了上述的兩種方法之外,還可以使用 OPENFILES 指令來管理開啟的檔案,OPENFILES 指令有三個主要的功能,分別可以用來中斷一個或數個開啟檔案的連線、顯示本機或從共用資料夾開啟的檔案、以及啟用/停用顯示本機已開啟的檔案等 ( "啟用/停用顯示本機已開啟的檔案" 不在本文討論範圍)。
要查詢已經開啟的檔案,可以使用下列的指令:
OPENFILES /Query /FO CSV


其中,FO 為指定輸出的格式;在較大型的檔案伺服器上 "ID" 的長度可能會超過預設 Table 格式的長度 (8碼),所以建議指定輸出的格式為 CSV (Comma-Separated Values)。
為了方便查詢檔案的開啟狀態,可以將查詢指令寫到 batch script 中,方便查詢 (例如,可以將下列的程式碼另存成 "openfiles-q.bat",就可以快速查找相關開啟檔案的資訊)。
@echo off
set /p var=請輸入查詢關鍵字:
OPENFILES /Query /FO CSV | FINDSTR %var%
pause


如果要中斷已經開啟的檔案或是資料夾連線,可以使用下列的指令:
OPENFILES /Disconnect /ID 20 

為了方便中斷檔案的連線,可以將中斷連線指令寫到 batch script 中,方便使用 (例如,可以將下列的程式碼另存成 "openfiles-d.bat",就可以快速中斷相關開啟檔案的連線)。
@echo off
echo 1 以檔案名稱來中斷開啟的檔案
echo 2 以使用者名稱來中斷所有開啟的檔案
echo 3 以檔案識別碼來中斷開啟的檔案
set /p case=請輸入要中斷方式的代碼:
goto %case% 
:1
set /p file=請輸入檔案名稱:
OPENFILES /Disconnect /OP %file% /ID *
pause
goto :eof
:2
set /p userid=請輸入使用者名稱:
OPENFILES /Disconnect /A %userid%
pause
goto :eof
:3
set /p openid=請輸入開啟檔案的 ID:
OPENFILES /Disconnect /ID %openid%
pause
goto :eof