Até encontrar um WMI (por exemplo, baseado em algo como Win32_ServerConnection) ou uma solução de objeto .NET que me permite lidar com a lista de conexões como objetos de primeira classe, em vez de analisar a saída de texto, desenvolvi essa solução em torno do utilitário OpenFiles . Eu estou bastante preocupado com o fato de ser frágil e não tão óbvio modificar para necessidades diferentes, mas parece estar funcionando para o meu cenário limitado no momento. Eu mantive o regex com capturas nomeadas para as outras partes da saída como uma referência para se você precisar usar parâmetros diferentes para abrir / desconectar arquivos (/ A / ID / OP).
Note que o uso repetido de Select-String é algo que eu não entendo completamente, mas tem a ver com o fato de que isso é necessário para obter acesso às capturas nomeadas. Consulte esta postagem Grupos nomeados com RegEx com a sequência de caracteres de seleção para detalhes. Prazer em mudá-lo se alguém puder me dizer como!
$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 '"$_'"}