断开网络驱动器用户连接、强制关闭占用文件的命令咨询
SMB共享文件强制关闭无效的解决方案
先排查命令执行的权限问题
- 你通过
PSSession连接服务器时,必须用本地管理员组或域管理员权限的账号启动PSSession,普通权限账号执行Close-SmbSession、Close-SmbFile会静默失败,无报错但实际不生效。 - 执行命令前必须添加
-Force参数,默认不带该参数时系统会弹出确认提示,非交互式执行场景下会直接跳过操作,参考命令如下:
关闭指定打开的文件:Close-SmbOpenFile -Path "D:\共享目录\目标文件.docx" -Force
批量关闭指定共享下所有打开的文件:Get-SmbOpenFile -ScopeName "你的共享名称" | Close-SmbOpenFile -Force
断开指定用户的所有SMB连接:Get-SmbSession -ClientUserName "域名\用户名" | Close-SmbSession -Force
上述命令仍无效时的替代方案
- 用Windows原生
net file命令强制关闭,该命令兼容性更强,低版本Windows Server也可正常使用:
首先执行net file查看所有打开的共享文件,记录对应文件的ID后,执行net file <文件ID> /close即可强制关闭。
批量关闭指定路径下所有文件的PowerShell实现:net file | Select-String -Pattern "^\s*(\d+)\s+(.+?)\s+" | ForEach-Object { $fileId = $_.Matches.Groups[1].Value $filePath = $_.Matches.Groups[2].Value if ($filePath -like "D:\共享目录\*") { net file $fileId /close } } - 如果是系统级进程占用文件(比如杀毒软件正在扫描、备份软件正在读取),可以用微软官方Sysinternals套件的
handle.exe定位占用进程后强制结束:
定位占用进程命令:handle64.exe "目标文件完整路径" /accepteula,拿到进程PID后执行Stop-Process -Id <PID> -Force即可解除占用。
注意事项
- 强制关闭文件会导致用户未保存的修改全部丢失,执行操作前建议先通过
Get-SmbSession获取客户端IP和用户名,提前通知后再执行断开操作。 - 部分办公软件会自动重连打开文件,你可以在执行关闭操作后暂时将共享权限设置为只读,更新完文件再恢复权限,避免用户重复打开占用。
内容的提问来源于stack exchange,提问作者Jan
相关产品推荐
相关产品推荐

