如何使用 PowerShell 断开访问 Windows 共享文件夹的用户

如何使用 PowerShell 断开访问 Windows 共享文件夹的用户

使用 PowerShell 确定访问共享文件夹的用户这个问题有一个很好的答案。继续这个问题,如何使用 powershell 脚本断开用户访问共享。

有一个名为开放文件但我更喜欢 PowerShell / WMI 解决方案。

答案1

在我找到一个 WMI(例如基于 Win32_ServerConnection 之类的东西)或 .NET 对象解决方案,让我能够将连接列表作为第一类对象处理,而不是解析文本输出之前,我想出了这个基于开放文件实用性。我相当担心它很脆弱,而且不太容易根据不同的需求进行修改,但目前它似乎适用于我的狭窄场景。我保留了带有命名捕获的正则表达式作为输出其他部分的参考,如果您需要对 openfiles /disconnect (/A /ID /OP) 使用不同的参数。

请注意,我并不完全理解为什么需要重复使用 Select-String,但这与访问命名捕获项所必需的事实有关。请参阅此使用选择字符串的 RegEx 命名组发帖了解详情。如果有人能告诉我怎么做,我很乐意更改它!

$computerName = 'ServerName'
$pattern = '^.+ (?<FileId>\d+) (?<User>[^ ]+).+ (?<OpenFile>C:.+\\SpecificFolder\\.*)$'
$openfiles = openfiles /query /s $computerName /v | Select-String -Pattern $pattern | ForEach-Object {[void]($_.Line -match $pattern); $matches['OpenFile']}
$openfiles | Sort-Object -Unique | ForEach-Object { openfiles /disconnect /s $computerName /a * /op `"$_`"}

答案2

Openfiles 对我来说很好用。虽然您不需要保存所有 openfiles /query,然后逐个断开它们,因为可以使用“*”通配符断开所有打开的会话,但您可以执行以下操作:

openfiles /Disconnect /ID *

这将终止所有打开的连接

相关内容