由於某些共享磁碟中的檔案經常莫名被鎖住,而負責處理的人員權限不足無法連線 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 -> 會因為出現"("或")"而出現錯誤
想請問這有解嗎?
另外,有沒有比較好的方式能讓沒有系統管理權限的使用者能自行解鎖?
如果,你的 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~ 我只是好奇心作祟而已~)