Eu tenho um Windows Server 2008 e ele compartilha uma pasta. Muitos clientes acessam essa pasta e herdam os arquivos. Um cliente abre um arquivo dll esporadicamente com o modo rw, então depois disso nenhum outro cliente pode carregar a dll.
Agora quero determinar qual cliente faz isso. Todas as ferramentas que encontrei:
- abrir arquivo
- líquido
- compartilhar assistir
- Monitor NetShare
não me mostra o cliente de rede que abre o arquivo no modo rw.
Acho que é o programa antivírus, mas preciso saber qual cliente está com o arquivo aberto.
Editar:
- Os clientes são máquinas Windows
- Todos os clientes usam o mesmo usuário, então não consigo determinar o cliente com o nome de usuário
Responder1
Isso pode ser útil para você:
Não tenho certeza se é o mesmo local na edição Server, mas acessei através de Win+ X-> Computer Management
-> System Tools
-> Shared Folders
->Open Files
Isso lista cada identificador de arquivo aberto, seu "modo aberto" (leitura/leitura) e o usuário. Você também pode fechar o identificador de arquivo neste local.
Responder2
Há anos que queríamos fazer isso!
Hoje vimos este utilitário:
https://www.nirsoft.net/utils/network_opened_files.html
Fantástico!
Editar:
Você pode usar NetworkOpenedFiles da Nirsoft para determinar qual host tem um arquivo aberto em um compartilhamento de arquivos do Windows.
Responder3
Esta é uma questão antiga, mas mesmo assim:
se você tiver o PowerShell 4.0+ (que não vem com o Windows Server 2008, você teria que atualizar sua versão do PowerShell), você poderia usar isto:
Diretamente no servidor:
Get-SmbOpenFile | where-object { $_.Path -like 'C:\foo\bar\*' }
de uma RemoteMachine:
$cim = New-CimSession ServerName -Credential (get-credential)
Get-SmbOpenFile -CimSession $cim | where-object { $_.Path -like 'C:\foo\bar\*' }
Get-SmbOpenfile
retorna uma lista de todos os arquivos abertos no servidor, que filtramos para where-object
ver apenas aqueles que procuramos.
Isso retornará, entre outras coisas, ClientComputerName
qual é o IP do computador que abriu o arquivo.
Aqui está um exemplo de saída:
PS C:\WINDOWS\system32> get-smbopenfile -cimsession $cim | where-object { $_.Path -like 'D:\Daten\Transfer\*' }
FileId SessionId Path ShareRelativePath ClientComputerName ClientUserName PSComputerName
------ --------- ---- ----------------- ------------------ -------------- --------------
347355680805 348160786757 D:\Daten\TRANSFER\xy TRANSFER\xy 10.0.0.114 INTERNAL\xy Server
Se você quiser ver rapidamente qual é o nome do host do endereço IP retornado, use:
[Net.DNS]::GetHostByAddress("10.0.0.114") | select -expand HostName