检查谁编辑了我的文件

时间:2015-09-24 14:25:01

标签: c# io filesystems filesystemwatcher user-management

有一个名为status.html的文件,用作SharePoint服务器上WFE之间的负载均衡器。我的查询是我想要提供一个脚本或机制,一旦这个文件被某人编辑就会触发邮件。 有可能吗?

在我的研究中,我找到了这个脚本:

$ACL = new-object System.Security.AccessControl.DirectorySecurity
$AccessRule = new-object System.Security.AccessControl.FileSystemAuditRule("domain\seitconsult","Modify","success")
$ACL.SetAuditRule($AccessRule)
$ACL | Set-Acl "C:\windows\system32\cmd.exe"

但我不确定这是否有效。另外,如何使用此脚本触发电子邮件?

1 个答案:

答案 0 :(得分:0)

我看到了实现目标的两种方法:

  1. 将“发送电子邮件”任务附加到相关事件:

    1. 打开事件查看器(eventvwr.msc),然后选择要通知的事件。
    2. 点击操作→将任务附加到此活动...
    3. 单步执行向导,然后在操作部分中选择发送电子邮件
    4. 填写详细信息并完成向导。
    5. 有关详细信息,请参阅here

    6. 设置FileSystemWatcher

      $folder = 'C:\your\html\folder'
      $file   = 'status.html'
      
      $from    = 'monitor@example.com'
      $to      = 'you@example.com'
      $subject = "$file was modified"
      
      $monitor = New-Object IO.FileSystemWatcher $folder, $file -Property @{
        IncludeSubdirectories = $false
        NotifyFilter = [IO.NotifyFilters]'FileName, LastWrite'
      }
      
      Register-ObjectEvent $monitor Changed -SourceIdentifier FileChanged -Action {
        $name   = $Event.SourceEventArgs.FullPath
        $reader = New-Object System.IO.StreamReader($name)
        $msg    = $reader.ReadToEnd()
        Send-MailMessage -From $from -To $to -Subject $subject -Body $msg
        $reader.Close()
      }
      

      但是,由于NotifyFilters不包含用户名,因此需要从事件日志中的相应审核事件中提取here

      可以通过源标识符删除观察者:

      Unregister-Event -SourceIdentifier FileChanged