2016-05-18 20 views
3

Ich habe ein Skript, das das Dateisystem mit FileWatcher.IO in Powershell überwacht. Derzeit findet es dem Benutzer, der die Datei mit gemacht:Powershell zu Maschine finden, die eine Datei erstellt

$owner = (Get-Acl $path).Owner 

Und es findet den Computer, der die Datei auf mit gemacht wurde:

$Computer = get-content env:computername 

Aber ich würde auch, welche Maschine zu erhalten, wie die Datei wurde erstellt von. Wenn beispielsweise ein Benutzer bei einem Terminalserver angemeldet ist, kann ich sehen, dass die Datei auf dem Terminalserver erstellt wurde. Aber ich möchte den Hostnamen des lokalen Rechners wissen, der die Datei auf dem Terminalserver erstellt hat.

Ist das möglich? Ich habe die MSDN PSEventArgs Class-Seite ohne viel Erfolg gesucht.

+0

Sie führen also das Skript auf jedem Server, oder? Ein lokales Verzeichnis/eine Festplatte ansehen? Da '$ env: Computername' nur der Computername ist, auf dem das Skript ausgeführt wird, hilft es Ihnen nicht, wenn Sie einen Remote-Ordner überwachen (wo jeder von jedem Computer Dateien hinzufügen kann) –

+0

Danke Frode. Es würde so aussehen. Dies ist für ein Back-End-SAN, in dem alle Benutzer Schreibzugriff haben, also ist das korrekt. Ich habe mich selbst getestet, wenn ich eine Datei auf dieser Freigabe von meinem Rechner erstelle, ist der Besitzer immer noch der Server und nicht der Ursprungshost. – Cryptie

+0

Es gibt keinen einfachen Weg, um das zu bekommen. Wenn es sich um ein SAN handelt, suchen Sie nach Prüfprotokollen. Wenn der Hostname/IP, der die Operation ausgeführt hat, protokolliert werden kann, haben Sie den Clientnamen. Wenn der Clientname ein Terminalserver ist, können Sie ihn nach den RDP-Sitzungen abfragen, in denen Sie Informationen zu user = Device finden (z. B. mit 'qwinsta' Mit Textparsing oder der zugrunde liegenden Win32-API). Dies kann jedoch schnell hässlich werden und muss fast in Echtzeit ausgeführt werden, damit Sie genügend Zeit haben, die RDP-Sitzung zu erhalten, bevor sich der Benutzer abmeldet. –

Antwort

3

Diese Informationen werden nicht in der Datei oder ihren Metadaten gespeichert, also gibt es keinen einfachen Weg, um daran zu kommen.

Übrigens können Sie einfach $env:computername direkt als Variable verwenden; Sie müssen Get-Content nicht verwenden.