Essa é uma pergunta antiga, mas, no entanto:
se você tiver o PowerShell 4.0+ (que não vem com o Windows Server 2008, você precisaria atualizar a versão do PowerShell), poderá usar isto:
Diretamente no servidor:
Get-SmbOpenFile | where-object { $_.Path -like 'C:\foo\bar\*' }
de um 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 com where-object
para ver apenas os que estamos procurando.
Isso retornará, entre outras coisas, o ClientComputerName
, que é o IP do computador que abriu o arquivo.
Veja 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