【问题标题】:Checking who edited my file检查谁编辑了我的文件
【发布时间】:2015-12-22 04:58:54
【问题描述】:

有一个名为 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"

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

【问题讨论】:

    标签: c# io filesystems filesystemwatcher user-management


    【解决方案1】:

    我认为有两种方法可以实现您的目标:

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

      1. 打开事件查看器 (eventvwr.msc) 并选择您想要收到通知的事件。
      2. 单击操作 → 将任务附加到此事件...
      3. 逐步完成向导并在操作部分中选择发送电子邮件。
      4. 填写详细信息并完成向导。

      更多信息请参见here。

    2. 设置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
      

    【讨论】:

    • 非常感谢您的 cmets。您提到的 C# 代码,您能告诉我如何运行它吗?我的意思是在我将实现的服务器上没有 C# 编译器。另外,上面的 power shell 代码会在事件查看器中生成一个事件吗?请提供您的 cmets。
    • @Lilly123 您需要将 C# 代码转换为 PowerShell(使用 Get-EventLog)。不,上面的代码不会生成事件日志条目。如果您启用审核(您需要执行此操作以获取修改文件的信息),这将创建事件日志记录。
    猜你喜欢
    • 2017-04-18
    • 2021-08-16
    • 2020-10-28
    • 2012-06-19
    • 1970-01-01
    • 1970-01-01
    • 2020-07-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多