Herausfinden, welcher PC Dateien auf "Server" geöffnet hat

Holgip

Lt. Commander
Registriert
Dez. 2012
Beiträge
1.758
Hallo,

ich habe ein Netzwerk, in dem 7 PCs (alle Win8.1 oder 10) angeschlossen sind. Darunter ist auch ein -ich nenn es mal "Server", der meine Festplatten mit Filmen verwaltet und auf den jeder PC zugriff hat. Jetzt würde mich interessieren, welcher PC den Film "XYZ" geöffnet hat. Im Moment mache ich das mit PSFile oder NetFile, aber da steht als User immer nur "Guest".
Gibt es ein Tool oder eine Möglichkeit über Batchprogrammierung die IP-Adresse oder den Namen des zugreifenden PCs anstatt "Guest" anzeigen zu lassen? Oder gibt das Windows nicht her?
Bei G habe ich nichts gefunden, oder mit den falschen Wörtern gesucht.

Achja, vergessen: Alle PCs im Netzwerk haben feste IP-Adressen.

Habe gerade in der Computerverwaltung unter "Freigegebene Ordner/Sitzungen" gesehen, dass dort der Computername steht, ich würde das aber gerne zusammen auswerten.Unter "Geöffnete Dateien" ist leider nur der Benutzer aufgeführt, und der ist in allen Fällen "Guest".
 
Zuletzt bearbeitet:
Die Computerverwaltung zeigt das doch an.
 
Ja, aber nur getrennt, also den Computernamen in "Sitzungen" und die geöffneten Dateien nur mit dem Benutzernamen.
Der Benutzername müsste mit dem Computernamen gleich sein.
 
Probiers mal mit PowerShell.

Code:
Get-SmbOpenFile | ft * -AutoSize -Wrap

Die PS-Konsole musst aber als Admin starten.
 
Zuletzt bearbeitet:
Danke für deinen Tipp, aber der Befehl bringt mir auch nur die Ausgabe "Server-PC\Guest" und auch keine Verknüpfung zu der geöffneten Datei.
Es geht wohl nur dann, wenn ich für jeden meiner "Clients" auf dem "Server" einen Benutzer einrichte. Allerdings müsste ich dann mein ganzes Netzwerk umstricken, weil ich z.Zt. das kennwortgeschützte Freigeben ausgeschaltet habe und die Freigaben über "Jeder" laufen lasse.
Ich weiß, dass das unsicher ist, aber ich habe jetzt einen Tag versucht, das in die Tat umzusetzen und jedes Mal bringt mir die Verbindung eines neuen Netzwerklaufwerks auf den Clients entweder einen "Netzwerpfad nicht gefunden" oder einen Kennwortfehler.
Außerdem: sobald ich einen kennwortgeschützten Benutzer am "Server" einrichte, komme ich von den Clients schon nicht mehr auf den Server, da dafür dann auch ein Login verlangt wird. Dabei habe ich für den Server kein Kennwort vergeben.
Lösche ich den neuen Benutzer, funktioniert auch der Zugriff auf den "Server" wieder.
Irgendwie ist das alles Mist und ich lasse es so, wie es die ganze Zeit schon läuft.

Danke für eure Antworten.
 
Holgip schrieb:
Gibt es ein Tool oder eine Möglichkeit über Batchprogrammierung die IP-Adresse oder den Namen des zugreifenden PCs anstatt "Guest" anzeigen zu lassen?
Ich dachte dir würde auch der Computername bzw. IP-Adresse reichen.

Habs nun mal getestet mit:
Code:
Get-SmbOpenFile | select @{ n = 'Computername' ; e = {(Resolve-DnsName $_.ClientComputerName).NameHost } } , Path | ? {(Get-Item $_.Path -ErrorAction Ignore) -is [System.IO.FileInfo] }
Damit bekomm ich den Computernamen und die geöffneten Dateien.
 
Danke.
Es funktioniert bei mir allerdings nur teilweise. Den Computernamen bekomme ich nicht angezeigt, aber unter "Path" steht die geöffnete Datei. Das sieht sehr vielversprechend aus (vor allem, wenn ich die PS mit einem Batch öffnen kann).
Kann es sein, dass der Computername nicht angezeigt wird weil er z.B. so heißt: "Buezi-PC"?

Edit: habe jetzt mal mit einen zweiten PC eine Datei auf dem "Server" geöffnet, es wird mir allerdings nur die geöffnete Datei vom Ersten angezeigt. Im "Sitzungen"-Fenster sind beide PCs zu sehen.
Sorry, ich verstehe nicht soviel von PS, ich müsste mich da erstmal einlesen. Deshalb ist es für mich schwierig, hier den Fehler zu finden.

Nochmal Edit: Die Datei, die der erste PC geöffnet hat, war eine Word-Datei, die mit "Lesen und Schreiben" geöffnet war. Die vom Zweiten eine JPEG, die nur zum Lesen geöffnet war. Schließe ich die Word Datei auf dem Ersten und öffne dort auch eine JPEG, wird in PS nichts mehr angezeigt.
Anscheinend zeigt der Befehl nur Dateien, die zum Schreiben geöffnet sind. Das ist natürlich bei Filmen, die nur zum Lesen geöffnet werden nicht das, was ich wollte.
 
Zuletzt bearbeitet:
Auf dem Host-Server sind Benutzer pro zugreifendem PC anzulegen. Wenn du es richtig machen willst, geht es wie folgt weiter: Erstelle eine Benutzergruppe und packe diese Benutzer in die Gruppe. Der Gruppe gibst du dann Zugriff auf den/die Ordner, die du freigeben willst. Aber nicht unter "Freigabe" sondern unter "Sicherheit", also auf Dateisystemebene. Anschließend gibst du den Ordner in deinem Netzwerk frei für alle. Die Zugriffsbeschränkung hast du ja bereits im Dateisystem und brauchst dies so nicht nochmal erledigen.
Client-PCs greifen dann per \\Server\Freigabenamen zu und geben bei der Anmeldung Server\Benutzername an, dann solltest du auch sehen können, wer darauf zugreift, ob es wirklich funktioniert > teste es aus.

Oooder hör halt auf Consumer- bzw Client-Betriebssysteme zu so etwas zu missbrauchen^^ und besorg dir eine legale und gültige Windows Server Lizenz oder nutze ein Linux deiner Wahl oder openmediavault wenn dir ein komplett selbst zu administrierendes Linux zu viel ist oder wenn du deinen Speicherbedarf gut vorausplanen kannst ggf noch freenas aber dafür solltest auch ECC RAM haben und im besten Fall ein oder zwei SSDs fürs Caching.
 
Holgip schrieb:
Danke.
Es funktioniert bei mir allerdings nur teilweise. Den Computernamen bekomme ich nicht angezeigt, aber unter "Path" steht die geöffnete Datei.
Das kann daran liegen, dass du feste IPs nutzt. Dadurch werden die Hostnames in Heimnetzwerken ohne Domäne und DNS-Server in der Regel nicht registriert.

Hab das Script mal ein bisschen optimiert. Unter anderem mit der Möglichkeit im OpenGridView (das öffnende Fenster) die geöffneten Files zu schließen. Dadurch endet dann das Video auf dem jeweiligen Computer.
Es werden IP-Addressen angezeigt und zudem werden nun alle geöffneten Objekte angezeigt (auch Ordner). Kannst du aber an der zweiten Spalte (isFile) dann sehen.

Code:
$Select = @(
	'Path' 
	@{ n = 'IsFile' ; e = {(Get-Item $_.Path -ErrorAction Ignore) -is [System.IO.FileInfo] } } 
	@{ n = 'Computer' ; e = { $HostEntry = [System.Net.Dns]::gethostentry($_.ClientComputerName) 
			$IPAddressString = $HostEntry.AddressList | % { "`tIP-Address:   $($_.IPAddressToString)" } 
			"$($HostEntry.Hostname)`n$(($IPAddressString | sort) -join "`n")" } } 
	@{n = 'Username'; e={$_.ClientUserName}}
    @{ n = 'SessionId' ; e = {[string] $_.SessionId } } 
    @{ n = 'FileId' ; e = {[string] $_.FileId } } 
) 

Do { 
	$CloseFile = Get-SmbOpenFile | select $Select | Sort Path | ogv -PassThru -Title 'Close opened Files' 
	
	If ($CloseFile -eq $null) { Return } 
	$CloseFile | Close-SmbOpenFile
} Until (1 -eq 2)
Kannst ja mal testen.

Und wie snaxilian schon ansprach ist es nicht möglich in deiner Konstellation die Usernames in Erfahrung zu bringen. Dazu müsste der Gäste- und Anonymous-Zugriff eingeschränkt werden und dein PC in der Lage sein, die Usernames in Erfahrung zu bringen.
 
Zuletzt bearbeitet:
@DPXone: Ich danke dir herzlich für deine Mühe. Leider bin ich das ganze WE unterwegs und kann das Script nicht gleich ausprobieren, aber am Montag werde ich es testen und berichten.
Das mit den festen IPs verstehe ich, aber warum sehe ich dann den Computernamen in der Sessionanzeige?

@snaxilian: Das mit dem Benutzerkonto auf dem Hostserver anlegen habe ich schon versucht und dabei die Schwierigkeiten gehabt, die in #6 stehen (gut, ich habe die Benutzer jetzt nicht in eine Gruppe verfrachtet, aber ich denke, da werde ich die gleichen Probleme haben). Aber wenn ich Zeit habe teste ich das auch noch mal. Ist es eigentlich zwingend notwendig, dass die Benutzer ein Kennwort haben müssen, oder geht der Zugriff auch ohne?

Ich wollte jetzt nicht alles umstricken (Windows Server/Linux etc.). Ich dachte halt nur, wenn die Informationen, die ich gerne hätte, in der Computerverwaltung in zwei verschiedenen Fenstern angezeigt werden, sollte es doch auch möglich sein, sie zusammenzufassen und evtl. in eine einzige Datei zu schreiben, die ich mir dann anschauen und weiterverwerten kann.

Ich wünsche euch ein schönes WE. Bis Montag.

Endlich komme ich dazu, das Script zu testen. Es funktioniert super. Danke dir!
 
Zuletzt bearbeitet:
Zurück
Oben