Windows 脚本-监视文件的更改并发送电子邮件通知
大家好,我是新来的脚本。我试图在文件更改时发送电子邮件通知 我尝试使用下面的脚本只是为了在文件发生更改时获得通知,但是每次文件更改时我该如何做。下面的脚本只工作一次,所以我将它放入一个无限循环中,以便在文件更改时注意到更改,但我知道这不是一种理想的方法。 我还需要发一封电子邮件。我该怎么做呢。感谢您的回复。多谢各位Windows 脚本-监视文件的更改并发送电子邮件通知,windows,powershell,cmd,scripting,file-watcher,Windows,Powershell,Cmd,Scripting,File Watcher,大家好,我是新来的脚本。我试图在文件更改时发送电子邮件通知 我尝试使用下面的脚本只是为了在文件发生更改时获得通知,但是每次文件更改时我该如何做。下面的脚本只工作一次,所以我将它放入一个无限循环中,以便在文件更改时注意到更改,但我知道这不是一种理想的方法。 我还需要发一封电子邮件。我该怎么做呢。感谢您的回复。多谢各位 while (1 -eq 1) {$File = "C:\Test\test.log" $Action = 'Write-Output "The watched file was c
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
}
脚本本身不必一直运行才能触发事件,它们在powershell主机中注册,并将一直监视您的文件,直到控制台关闭。因此,如果您打开一个powershell窗口并运行下面这样的操作(显然您需要定义变量等),然后只打开控制台(作为后台任务执行此操作会变得有点棘手),那么下面的内容实际上是可行的
$Watcher = New-Object IO.FileSystemWatcher $FilePath, $FileName -Property @{
IncludeSubdirectories = $false
EnableRaisingEvents = $true
}
Register-ObjectEvent $Watcher Changed -Action $Action