Como desconectar usuários acessando uma pasta compartilhada do Windows usando o PowerShell

7

O Determinar usuários acessando uma pasta compartilhada usando o PowerShell pergunta tem uma boa resposta. Continuando a partir disso Como você desconecta os usuários que acessam o compartilhamento usando um script PowerShell.

Existe um utilitário de linha de comando do Windows chamado OpenFiles , mas eu prefiro um PowerShell / Solução WMI.

    
por Martin Hollingsworth 10.06.2010 / 02:03

2 respostas

5

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 '"$_'"}
    
por 11.06.2010 / 00:40
0

Openfiles funciona bem para mim. Embora você não precise fazer todo esse salvamento de openfiles / query e, em seguida, desconectá-los um a um, como o curinga "*" pode ser usado para desconectar todas as sessões abertas, você pode fazer algo como:

openfiles /Disconnect /ID *

Que terminará todas as conexões abertas

    
por 13.08.2018 / 15:21