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