Сценарии - смотрите изменения для файла и отправьте уведомление по электронной почте

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

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

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
Другие вопросы по тегам