2016-05-18 3 views
3

J'ai un script qui surveille le système de fichiers en utilisant FileWatcher.IO dans Powershell. Actuellement, il trouve l'utilisateur qui a fait le fichier avec:Powershell pour trouver la machine qui a créé un fichier

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

Et il trouve l'ordinateur que le fichier a été fait avec:

$Computer = get-content env:computername 

Mais je voudrais aussi obtenir quel appareil le fichier a été créé à partir de. Par exemple, si un utilisateur est connecté à un serveur Terminal Server, je peux voir que le fichier est créé sur le serveur Terminal Server. Mais je veux connaître le nom d'hôte de la machine locale qui a fait le fichier sur le serveur terminal.

Est-ce possible? J'ai recherché la page de classe de msdn PSEventArgs sans beaucoup de succès.

+0

Vous exécutez le script sur tous les serveurs, n'est-ce pas? Regarder un répertoire/disque local? Parce que '$ env: computername' est seulement le nom de machine sur lequel le script s'exécute, cela ne vous aidera pas si vous regardez un dossier distant (où n'importe qui depuis n'importe quel ordinateur peut ajouter des fichiers) –

+0

Merci Frode. Cela apparaîtrait comme tel. C'est pour un backend SAN dans lequel tous les utilisateurs ont un accès en écriture, donc c'est correct. Je me suis testé, si je crée un fichier sur ce partage à partir de ma machine, le propriétaire est toujours le serveur et non l'hôte d'origine. – Cryptie

+0

Il n'y a pas de moyen facile d'obtenir ceci. S'il s'agit d'un SAN, recherchez les journaux d'audit. S'il peut enregistrer le nom d'hôte/IP qui a exécuté l'opération, alors vous avez le nom du client. Si le nom du client est un serveur Terminal Server, vous pouvez l'interroger pour les sessions RDP où vous pouvez trouver des informations sur user = Device (en utilisant 'qwinsta' avec l'analyse de texte ou l'API Win32 sous-jacente). Mais cela peut devenir horriblement rapide et doit être exécuté presque en temps réel afin que vous ayez assez de temps pour obtenir la session RDP avant que l'utilisateur se déconnecte. –

Répondre

3

Cette information ne va pas être stockée dans le fichier ou ses métadonnées, donc il n'y a pas de moyen simple d'y accéder. Par ailleurs, vous pouvez simplement utiliser $env:computername directement en tant que variable; il n'y a pas besoin d'utiliser Get-Content.