gpt4 book ai didi

powershell - PowerShell:检查文件夹中的更改,如果更改,则发送电子邮件

转载 作者:行者123 更新时间:2023-12-02 23:39:02 25 4
gpt4 key购买 nike

我有一个充满创意的同事,但是我没有使用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
}

任何帮助,将不胜感激。

最佳答案

要获得有关特定文件夹和/或其子项目的更改的通知,可以使用.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的更多信息:
  • Script Center: PowerShell FileSystemWatcher - Script by Bigteddy
  • Tracking Changes to a Folder Using PowerShell - Blog article by Boe Prox
  • 关于powershell - PowerShell:检查文件夹中的更改,如果更改,则发送电子邮件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47408453/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com