iT邦幫忙

2

user端查詢主機共用檔案是誰開啟?

各位大師好
因為常常有user反應別人開啟他的檔案,他就只能以唯讀方式開啟,不能修改,那我就只能連線到主機看共用檔案那邊是誰開的,看情況直接關掉或是跟user說她們自己處理。

請問有方法可以讓他們直接看到共用台的檔案是誰在開啟嗎?


感謝 michaelwan && 微和的風 的意見 我做了以下的小批次檔
先抓所有共用檔 然後再只抓某個資料夾的共用檔

@echo off
@echo 產生共用檔案使用表...
openfiles /Query /FO table > D:\123.txt
findstr "SWAP" "D:\123.txt" > D:\RD\DRV\TEMP\共用檔案使用表.txt
rem pause

後記:主管覺得我主機每分鐘執行一次對主機LOADONG太重,就不用這方式了。


後後記: 使用蟹老闆大大方式 感謝!! 不過user按一次要等1分多......應該會被嫌棄orz

看更多先前的討論...收起先前的討論...
yesongow iT邦大師 1 級 ‧ 2019-05-28 15:38:09 檢舉
你將管理員的密碼,給user自己去登入查詢...這樣簡單吧!
我們的做法是, 用PS定期輸出目前的開啟檔案清單給使用者自己查.
石頭 iT邦新手 2 級 ‧ 2019-05-28 15:42:47 檢舉
如果我將管理原的密碼交出去 隔天應該就不用來了 ....
石頭 iT邦新手 2 級 ‧ 2019-05-28 15:43:17 檢舉
定期輸出目前的檔案 這方法感覺可行 我來去試試看 感謝!
我們是在主機端自己寫一個常駐程式,使用者端能用client查詢檔案是誰開的,PS輸出全部共用清單要小心隱私問題,有些主管可能編輯一些私密檔案,被員工看到不好。
如果能看到正在編輯 某某員工解僱計畫 ,而某某又剛好是自己的時候. 應該會很HIGH.
石頭 iT邦新手 2 級 ‧ 2019-05-29 10:47:00 檢舉
那個有過濾掉啦 ... 反正都不採用了 ... 就不多說了 orz

2 個回答

1
蟹老闆
iT邦大師 1 級 ‧ 2019-05-31 03:32:15
最佳解答

這個操作負載太重?是伺服器效能太差?
好吧那就當使用者有需求時自行查詢吧!

批次檔分為伺服器端及使用者端
伺服器端

@Echo Off
Cls
Fsutil File Layout c:\windows\Explorer.exe>Nul 2>Nul||(Echo.&Echo.&Echo 注意!動作未完成,請用右鍵以系統管理員身分執行&Echo.&Echo.&Echo.&Echo.&Pause&Exit)
Mode Con Cols=30 Lines=20
Title 檔案開啟查詢程式
Color F6
::Log變數需輸入完整路徑及檔名
Set Log=D:\RD\DRV\TEMP\共用檔案使用表.txt
Echo.&Echo.&Echo.&Echo.&Echo 等待查詢中請勿關閉^!^!^!
:Loop
WaitFor QueryShareFile
Del /q "%Log%" 0 1 2>Nul
For /f "Tokens=*" %%i in ('openfiles /Query /FO table^|findstr SWAP') Do Echo %%i>>"%Log%"
If Not Exist "%Log%" Echo 沒有已開啟的檔案>>"%Log%"
Echo 最後查詢時間:%Time%
Goto :Loop

使用者端

@Echo Off
Cls
::Server變數輸入IP位置或主機名稱
Set Server=192.168.0.15
Set Wait=1
Set OutFile=\\共用主機\共用檔案使用表.txt
WaitFor /S %Server% /SI QueryShareFile
TimeOut /T %Wait%
If Exist "%OutFile%" (Cmd /C "Start Notepad "%OutFile%"") Else (mshta "vbscript:msgbox("檔案無法讀取,請與系統管理員連繫",0,"發生錯誤") & window.close")
Ping /n 1 /w 1000 9.9.9.9>Nul
Del /q "%OutFile%" 0 1 2>Nul

變數說明:
1.Log 查詢結果存檔,檔案位置需存於共用資料夾中
2.Server 主機IP或名稱
3.Wait 使用者若發生檔案開啟錯誤時增加此數字(供效能太差使用)
4.OutFile 與 Server 端 Log 變數相對應的共用位置

使用說明:
伺服器端請以系統管理者身份執行
Server 批次檔修改成正確存檔位置後執行該批次檔
Client 當有需要時執行該批次檔

僅在本機電腦測試,請先自行驗證可行性

看更多先前的回應...收起先前的回應...
石頭 iT邦新手 2 級 ‧ 2019-05-31 08:40:08 檢舉

您好,
Fsutil File Layout c:\windows\Explorer.exe
他說是無效的指令 Fsutil File 下面沒有Layout ,請問這是要額外下載套件?

石頭 iT邦新手 2 級 ‧ 2019-05-31 08:46:50 檢舉

那行應該只是判斷是不是用管理員權限開啟嗎? 我拿行先REM掉就都正常了! 非常感謝您!

石頭 iT邦新手 2 級 ‧ 2019-05-31 08:48:59 檢舉

題外話: 主機一年前買的 也都很穩定 我執行那個批次時也都很正常 我也不知為啥主管叫我拿掉= =

蟹老闆 iT邦大師 1 級 ‧ 2019-05-31 08:58:15 檢舉

Fsutil 執行檔必須是10.0.1734.1 Windows 10可透過系統更新取得,或是改用以下命令

@Echo Off
Cls
Md "%Hosts%\MdTest" 2>nul&&Rd "%Hosts%\MdTest" >nul 2>nul||(Echo.&Echo 注意:指令不成功!!&Echo 注意!動作未完成,請用右鍵以系統管理員身分執行&Echo.&Echo.&Echo.&Echo.&Pause&Exit)
Mode Con Cols=30 Lines=20
Title 檔案開啟查詢程式
Color F6
::Log變數需輸入完整路徑及檔名
Set Log=D:\RD\DRV\TEMP\共用檔案使用表.txt
Echo.&Echo.&Echo.&Echo.&Echo 等待查詢中請勿關閉^!^!^!
:Loop
WaitFor QueryShareFile
Del /q "%Log%" 0 1 2>Nul
For /f "Tokens=*" %%i in ('openfiles /Query /FO table^|findstr SWAP') Do Echo %%i>>"%Log%"
If Not Exist "%Log%" Echo 沒有已開啟的檔案>>"%Log%"
Echo 最後查詢時間:%Time%
Goto :Loop
蟹老闆 iT邦大師 1 級 ‧ 2019-05-31 09:09:47 檢舉

我猜主管可能沒有真的去了解,執行你的批次檔耗用多少資源才會這麼說.

石頭 iT邦新手 2 級 ‧ 2019-05-31 09:33:40 檢舉

另外請問一下 要等大概70秒是正常的嗎?

蟹老闆 iT邦大師 1 級 ‧ 2019-05-31 11:05:15 檢舉

應該不用這麼久,那個等待1是指1秒.
會這麼久有可能是與伺服器等待連接的時間,本機測試時立即反應
另外如果伺服器的等待視窗有用滑鼠點到命令列(會有一小塊反白)時批次檔會暫停執行,除非按下enter鍵才會繼續

石頭 iT邦新手 2 級 ‧ 2019-05-31 11:53:46 檢舉

了解! 謝謝

蟹老闆 iT邦大師 1 級 ‧ 2019-06-03 12:38:50 檢舉

使用蟹老闆大大方式 感謝!! 不過user按一次要等1分多......應該會被嫌棄orz

若要等這麼久不被嫌棄很難/images/emoticon/emoticon03.gif

蟹老闆 iT邦大師 1 級 ‧ 2019-06-03 12:40:36 檢舉

對了,將使用者端第七行改成

WaitFor /SI QueryShareFile

試試,此方法僅適用同網段。

石頭 iT邦新手 2 級 ‧ 2019-06-03 15:31:12 檢舉

改成那樣的確快很多,不過我是不同網段的...悲劇。

0
納貝
iT邦新手 3 級 ‧ 2019-05-29 14:58:59

Share Point的檔案共享是你的好朋友

石頭 iT邦新手 2 級 ‧ 2019-05-29 16:10:41 檢舉

我只是想要看到目前是誰在使用這個檔案 應該不用這個高大上的...
我目前是在WINDOWS SERVER 2012 r2 上面分享資料夾的 ...

納貝 iT邦新手 3 級 ‧ 2019-05-29 17:21:02 檢舉

你可以做一個內部網頁,後面用vbscript跑指令去call powershell或直接call wmi service.

石頭 iT邦新手 2 級 ‧ 2019-05-31 08:48:14 檢舉

沒玩過製作網頁 ..雖然資訊朋友提供簡單網頁製作方式給我 不過我還沒空玩... 等哪天有空我在研究 先用蟹老闆的方式,感謝!

我要發表回答

立即登入回答