我有一个文件\\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