2015-09-24 4 views
0

Существует файл с именем status.html, который используется как loadbalancer между WFE на серверах SharePoint. Мой запрос: я хочу придумать скрипт или механизм, который будет запускать почту, как только этот файл будет отредактирован кем-то. Возможно ли это?Проверка, кто редактировал мой файл

В моем исследовании я нашел этот сценарий:

$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" 

Но я не уверен, что будет работать. Кроме того, как можно инициировать электронную почту, используя этот скрипт?

ответ

0

Я вижу два пути для достижения своей цели:

  1. Приложить «отправить по электронной почте» задачу к событию в вопросе:

    1. Откройте окно просмотра событий (eventvwr.msc) и выберите событие, о котором вы хотите получить уведомление.
    2. Нажмите Действие → Приложите задачу к этому событию & hellip;
    3. Пройдите через мастер и выберите Отправьте электронное письмо в Действие раздел.
    4. Заполните детали и завершите работу мастера.

    Для получения дополнительной информации см. here.

  2. Настройка FileSystemWatcher:

    $folder = 'C:\your\html\folder' 
    $file = 'status.html' 
    
    $from = '[email protected]' 
    $to  = '[email protected]' 
    $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 
    
+0

Большое спасибо за ваши комментарии. Код C#, на который вы ссылались, может, пожалуйста, сообщить мне, как я могу запустить его? Я имею в виду на серверах, где я буду реализовывать, у которых нет компилятора C#. Кроме того, будет ли приведенный выше код оболочки оболочки генерировать событие в средстве просмотра событий? Просьба представить ваши комментарии. – Lilly123

+0

@ Lilly123 Вам нужно будет перевести код C# в PowerShell (используйте 'Get-EventLog'). И нет, приведенный выше код не будет генерировать записи журнала событий. Если вы включите аудит (который вам нужно будет сделать, чтобы получить информацию, которая изменила файл), которые уже будут создавать записи журнала событий. –