2016-12-20 5 views
1

Привет Все Я новичок в написании сценариев. Я пытаюсь отправить уведомление по электронной почте, когда файл будет изменен.Scripting - следить за изменениями для файла и отправлять уведомления по электронной почте

Я попытался использовать приведенный ниже сценарий, чтобы получить уведомление, если файл был изменен, но как это сделать каждый раз, когда файл изменяется. Ниже сценария работает только один раз, поэтому я поставил его в бесконечный цикл, чтобы заметить изменения, когда когда-либо был изменен файл, но я знаю, что это не идеальный способ сделать это. Мне также нужно отправить электронное письмо. Как мне это сделать. Цените свои ответы. Спасибо.

while (1 -eq 1) 
{$File = "C:\Test\test.log" 
$Action = 'Write-Output "The watched file was changed"' 
$global:FileChanged = $false 

function Wait-FileChange { 
    param(
     [string]$File, 
     [string]$Action 
    ) 
    $FilePath = Split-Path $File -Parent 
    $FileName = Split-Path $File -Leaf 
    $ScriptBlock = [scriptblock]::Create($Action) 


    $Watcher = New-Object IO.FileSystemWatcher $FilePath, $FileName -Property @{ 
     IncludeSubdirectories = $false 
     EnableRaisingEvents = $true 
    } 
    $onChange = Register-ObjectEvent $Watcher Changed -Action {$global:FileChanged = $true} 

    while ($global:FileChanged -eq $false){ 
     Start-Sleep -Milliseconds 100 
    } 

    & $ScriptBlock 
    Unregister-Event -SubscriptionId $onChange.Id 
} 

Wait-FileChange -File $File -Action $Action 
} 

ответ

1

сам скрипт не должен держать в порядке стереосистеме и обновите для событий, чтобы быть вызваны, они регистрируются в Powershell хозяина и будет продолжать смотреть ваши файлы, пока что консоль не будет закрыта. так что нижеследующее будет работать, если вы откроете окно powershell и запустите что-то вроде ниже (очевидно, вам нужно определить свои переменные и все такое), а затем просто оставил консоль открытой (выполнение этого как фоновая задача становится немного сложнее)

$Watcher = New-Object IO.FileSystemWatcher $FilePath, $FileName -Property @{ 
    IncludeSubdirectories = $false 
    EnableRaisingEvents = $true 
} 
Register-ObjectEvent $Watcher Changed -Action $Action 

 Смежные вопросы

  • Нет связанных вопросов^_^