PowerShell:检查文件夹是否有更改,如果有,则发送电子邮件

u1ehiz5o  于 2022-12-04  发布在  Shell
关注(0)|答案(1)|浏览(89)

我有一个同事,他有很多创意,但我对PowerShell没有天赋。他希望定期检查文件夹的更改。一旦有新文件添加到文件夹中,他希望通过邮件得到通知。所以,我想我需要一个PS脚本来实现这一点。
但我完全不知道该怎么做。
我找到了下面的代码-可以修改它来完成这项工作吗?

Param (
    [string]$Path = "C:\Test",
    [string]$SMTPServer = "SMTP IP",
    [string]$From = "MyMail@domain.com",
    [string]$To = "MyMail@domain.com",
    [string]$Subject = "New stuff!"
)

$SMTPMessage = @{
    To         = $To
    From       = $From
    Subject    = "$Subject at $Path"
    Smtpserver = $SMTPServer
}

$File = Get-ChildItem $Path | Where { $_.LastWriteTime -ge [datetime]::Now.AddMinutes(-1) }
If ($File) {
    $SMTPBody = "`nThe following files have recently been added/changed:`n`n"
    $File | ForEach { $SMTPBody += "$($_.FullName)`n" }
    Send-MailMessage @SMTPMessage -Body $SMTPBody
}

任何帮助都将不胜感激。

vltsax25

vltsax251#

要获得有关特定文件夹和/或其子项的更改的通知,可以使用.Net Frameworks FileSystemWatcher类。使用PowerShell示例化一个新的类,方法是:

$pattern = "*.*"
$watcherProperties = @{
    IncludeSubdirectories = $false;
    NotifyFilter = [IO.NotifyFilters]'FileName, LastWrite'
    }
$watcher = New-Object IO.FileSystemWatcher $Path, $pattern -Property @watcherProperties

然后,要获得有关更改的通知,请使用Register-ObjectEvent注册一个事件并添加您的邮件块:

Register-ObjectEvent $watcher Created -SourceIdentifier FileCreated -Action {
    $SMTPBody = "`nThe following file have recently been added/changed:`n`n$($Event.SourceEventArgs.Name)"
    Send-MailMessage @SMTPMessage -Body $SMTPBody}
}

虽然这是一个很好的自动通知解决方案,没有沉重的循环,它也有一些缺点。在这种配置下,你会得到一个邮件为文件改变。移动目录与文件束将导致-束邮件。
有关FileSystemWatcher s的更多信息,请访问:

相关问题