我公司有一个共享文件夹,经常会添加新版本。我的工作是对该文件夹中的版本进行 QA,但我已经厌倦了每天检查文件夹以查看是否有新版本。我想设置一个 Python 脚本、批处理文件、powershell 程序、Visual Basic 等,以便向我发送电子邮件或以某种方式提醒我其中有新文件。
我在 Windows 11 上。
我已经发现这个问题本质上问的是同样的问题,但没有好的答案,而且我发现的任何其他问题似乎都与 Windows Vista 或其他一些非常旧的 Windows 版本有关。
编辑:
@Gantendo 建议使用 FolderChangesView,我很喜欢它,并将使用它。我现在有一个文本文件,每当文件更改时它都会更新,但我的电子邮件部分无法正常工作
答案1
您可以使用 FileSystemWatcher 来完成这项任务,这就是它的目的。
观察者的完整示例实现。 https://powershell.one/tricks/filesystem/filesystemwatcher
上面是一个 powershell 实现,它将引发一个事件,让您知道文件是否被添加、删除、修改等。当检测到事件时,您可以使用任何您喜欢的消息传递方法,您可以使用 Send-MailMessage,它仍然有效,但它即将过时,所以不知道它会持续多久。
因此,您可以中断并直接转到 System.Net.Mail,这应该是可以长期支持的。
https://learn.microsoft.com/en-us/dotnet/api/system.net.mail?view=net-7.0
例子:
Function Send-Email {
[CmdletBinding()]
param (
[String]$From,
[String[]]$To,
[String]$Subject,
[String]$SMTPServer,
[String]$Body,
[String[]]$Attachments
)
$email = New-Object System.Net.Mail.MailMessage $From, $To, $Subject, $Body
$email.To.Add($To)
$email.isBodyhtml = $true
$smtp = new-object Net.Mail.SmtpClient($SMTPServer)
$smtp.Port = 25
$emailAttachment = new-object Net.Mail.Attachment($Attachments)
$email.Attachments.Add($emailAttachment)
$smtp.Send($email)
}
答案2
我会考虑使用 CMail:https://www.inveigle.net/cmail
我之前曾使用它来向我发送通知 - 我不熟悉 FolderChangesView,但是如果您让它运行 powershell 命令,那么您应该能够让它运行批处理文件...
然后,您可以在批处理文件中使用 CMail 向自己发送通知。这是一个示例批处理文件,我从 Gmail 帐户发送,使用 STARTTLS 进行加密:
::E-mail Notification Script Using CMail
@ECHO OFF
ECHO Sending Mail with CMail.exe...
cmail.exe -host:[email protected]:[email protected]:587 -starttls -to:[email protected] -from:[email protected] "-subject:Notification!" "-body:A File on the company drive has been modified!"
ECHO Email Sent.
注意:FolderChangesView 的替代方案(如果对任何人有帮助)可能是 RealTimeSync,它是 FreeFileSync 包的一部分。请参阅这里
答案3
我最终使用 FolderChangesView 并设置一个 powershell 命令,从主菜单中运行该命令,以弹出窗口提醒用户。与发送电子邮件不同,但无论哪种方式都可以。
使用的 Powershell 命令:PowerShell -Command "Add-Type -AssemblyName PresentationFramework;[System.Windows.MessageBox]::Show('Files have been edited in directory')"