Windows

暫時防止 SMB 文件在使用中被鎖定 - Windows

  • March 25, 2022

我有一個文件\\server\share\myApp\app.exe,少數人直接從共享中執行。我需要偶爾更新該文件,但由於 SMB 會話打開,它通常被鎖定。

對於類似的 SMB 鎖定文件,我的正常程序是關閉鎖定它們的文件和會話,例如:

$openAppFiles = Get-SmbOpenFile | Where Path -like 'D:\Shares\myApp\*' 
$appSessions  = $openAppFiles | Select SessionID -Unique

Close-SmbOpenFile -FileID $openAppFiles.FileID -Force
Close-SmbSession -SessionID $appSessions.SessionID -Force

Extract-Archive $newZip -Destination 'D:\Shares\myApp\' -Force

但最近,我遇到了客戶端能夠重新連接並鎖定我在那個小視窗內更新的一個或多個文件的問題。我可以測試嘗試重命名文件,例如:

Rename-Item .\app.exe .\app.exe.bak

[Error] Rename-Item : The process cannot access the file because it is being used by another process.

有沒有辦法讓我暫時阻止客戶訪問這些文件?

我考慮過暫時關閉共享,但我必須在下班後這樣做。我也可以繼續重新執行它直到它工作,但這也不一定能解決問題。我可以嘗試哪些其他選擇?

您可以嘗試將拒絕所有人條目添加到共享的 ACL:

Block-SmbShareAccess -Name AppShare -AccountName Everyone -Force

接下來,像在腳本中那樣繼續斷開連接的使用者。

應用更新後,從 ACL中刪除拒絕所有人條目:

Unblock-SmbShareAccess -Name AppShare -AccountName Everyone -Force

引用自:https://serverfault.com/questions/1096964