Eu tenho um arquivo \\server\share\myApp\app.exe
que um punhado de pessoas executa diretamente do compartilhamento. Eu preciso atualizar esse arquivo ocasionalmente, mas geralmente está bloqueado devido às sessões abertas do SMB.
Meu procedimento normal para arquivos bloqueados SMB semelhantes é fechar os arquivos e as sessões bloqueando-os como:
$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
Mas, ultimamente, tenho enfrentado problemas em que um cliente consegue se reconectar e bloquear um ou mais dos arquivos que estou atualizando nessa pequena janela. Eu posso testar tentando apenas renomear um arquivo por exemplo:
Rename-Item .\app.exe .\app.exe.bak
[Error] Rename-Item : The process cannot access the file because it is being used by another process.
Existe uma maneira de bloquear temporariamente os clientes de acessar esses arquivos?
Eu considerei desligar o compartilhamento temporariamente, mas teria que fazer isso depois do expediente. Também posso continuar executando-o novamente até que funcione, mas isso também não resolve necessariamente o problema. Que outras opções posso tentar?
Você pode tentar adicionar a entrada Negar a todos à ACL do compartilhamento:
Block-SmbShareAccess -Name AppShare -AccountName Everyone -Force
Em seguida, prossiga com a desconexão de usuários conectados como você faz em seu script.
Depois que o aplicativo for atualizado, remova a entrada Negar a todos da ACL:
Unblock-SmbShareAccess -Name AppShare -AccountName Everyone -Force