iT邦幫忙

0

共享磁碟中的檔案經常莫名被鎖住,利用Get-SmbOpenFile 讀取檔案路徑解鎖問題

  • 分享至 

  • xImage

由於某些共享磁碟中的檔案經常莫名被鎖住,而負責處理的人員權限不足無法連線 File Server ,因此我們想在 File Server 裡放一個自動解鎖的排程。
由於目前找不出共享檔案莫名被鎖的原因,只能用這種方式先應急處理。

$LockedFile = Get-Content -path C:\temp\lockedfile.txt
Get-SmbOpenFile | Where-Object -Property ShareRelativePath -Match $LockedFile

但測試後發現,如果放入lockedfile.txt的檔案路徑帶有特殊字元時將會出現錯誤。
如以下所示:
D:\The Filepath##一月報表.docx -> 會因為出現"#"而出現錯誤
D:\The Filepath\一月財務(特殊)報表.xlsx -> 會因為出現"("或")"而出現錯誤

想請問這有解嗎?

另外,有沒有比較好的方式能讓沒有系統管理權限的使用者能自行解鎖?

ccutmis iT邦高手 2 級 ‧ 2023-03-12 15:09:05 檢舉
有試過把路徑用雙引號包住嗎 例如:
$LockedFile = Get-Content -path "D:\The Filepath\##一月報表.docx"
setsuna iT邦新手 2 級 ‧ 2023-03-12 22:17:53 檢舉
我有試過,但一樣會出現錯誤
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

1
re.Zero
iT邦研究生 5 級 ‧ 2023-03-12 20:24:13

如果,你的 C:\temp\lockedfile.txt 內容是 UNC 之類的路徑列表:

path\to\whatever\01
path\to\whatever\02
path\to\whatever\03

那你的不該使用 -Match 運算子,而該用 -In 運算子:

Get-SmbOpenFile | Where-Object -Property ShareRelativePath -In $LockedFile

建議閱覽 關於比較運算子 - PowerShell | Microsoft Learn 的內容。
(另,你可能須注意各運算子的支援版本。)


另外,有沒有比較好的方式能讓沒有系統管理權限的使用者能自行解鎖?

這部分我沒經驗,就看是否有別人能提供了。
所以 「不要」把我的建議性回答標記為最佳解答 ,以降低別人略過你的問題之機率。
(畢竟我不在乎 iT 邦 RPG~ 我只是好奇心作祟而已~)

setsuna iT邦新手 2 級 ‧ 2023-03-12 22:17:04 檢舉

感謝你的回覆,我明天試試。

setsuna iT邦新手 2 級 ‧ 2023-03-13 11:41:25 檢舉

感謝 re.Zero
剛剛測試,改用 -In 運算子 後可以正常運作了。

我要發表回答

立即登入回答