2016-05-18 3 views
3

PowershellのFileWatcher.IOを使ってファイルシステムを監視するスクリプトがあります。 現在、それはしてファイルを作ったユーザー見つかっ:Powershellでファイルを作成したマシンを見つける

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

をそして、それは、ファイルがでで作られたコンピュータ検索します

$Computer = get-content env:computername 

をしかし、私はまた、どのようなマシン入手したいのですがファイルはから作成されました。たとえば、ユーザーがターミナルサーバーにログインしている場合、そのファイルがターミナルサーバー上に作成されていることがわかります。しかし、ターミナルサーバー上でファイルを作成したローカルマシンのホスト名を知りたい。

これは可能ですか?私はmsdn PSEventArgsクラスのページをあまり検索せずに検索してきました。

+0

あなたはすべてのサーバーでスクリプトを実行していますか?ローカルのディレクトリ/ディスクを監視していますか? '$ env:computername'はスクリプトが実行されているマシン名だけなので、リモートフォルダを見ている場合は助けになりません。(コンピュータの誰でもファイルを追加できます) –

+0

Frodeありがとうございます。それはそのように見えるでしょう。これは、すべてのユーザーが書き込みアクセス権を持っているバックエンドSANのためのものです。自分のマシンからその共有上にファイルを作成すると、オーナーはサーバーであり、元のホストではありません。 – Cryptie

+0

これを取得する簡単な方法はありません。それがSANの場合は、監査ログを調べます。操作を実行したホスト名/ IPをログに記録できる場合は、クライアント名があります。 client-nameがターミナルサーバーの場合は、user = Deviceに関する情報を見つけることができるRDPセッションを問い合わせることができます(たとえば、テキスト解析または基本Win32 APIを使用する 'qwinsta'を使用して)。しかし、これは素早く醜くなり、ユーザーがログオフする前にRDPセッションを取得するのに十分な時間があるので、ほとんどリアルタイムで実行する必要があります。 –

答えて

3

その情報はファイルまたはそのメタデータに格納されないため、直接取得する方法はありません。

ちなみに、$env:computernameをそのまま変数として使用できます。 Get-Contentを使用する必要はありません。

関連する問題