如何监视 Windows 11 中的特定目录以查看何时添加新文件?

如何监视 Windows 11 中的特定目录以查看何时添加新文件?

我公司有一个共享文件夹,经常会添加新版本。我的工作是对该文件夹中的版本进行 QA,但我已经厌倦了每天检查文件夹以查看是否有新版本。我想设置一个 Python 脚本、批处理文件、powershell 程序、Visual Basic 等,以便向我发送电子邮件或以某种方式提醒我其中有新文件。

我在 Windows 11 上。

我已经发现这个问题本质上问的是同样的问题,但没有好的答案,而且我发现的任何其他问题似乎都与 Windows Vista 或其他一些非常旧的 Windows 版本有关。

编辑:

@Gantendo 建议使用 FolderChangesView,我很喜欢它,并将使用它。我现在有一个文本文件,每当文件更改时它都会更新,但我的电子邮件部分无法正常工作

答案1

您可以使用 FileSystemWatcher 来完成这项任务,这就是它的目的。

https://devblogs.microsoft.com/powershell-community/a-reusable-file-system-event-watcher-for-powershell/

观察者的完整示例实现。 https://powershell.one/tricks/filesystem/filesystemwatcher

上面是一个 powershell 实现,它将引发一个事件,让您知道文件是否被添加、删除、修改等。当检测到事件时,您可以使用任何您喜欢的消息传递方法,您可以使用 Send-MailMessage,它仍然有效,但它即将过时,所以不知道它会持续多久。

https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.utility/send-mailmessage?view=powershell-7.3

因此,您可以中断并直接转到 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)
}

http://vcloud-lab.com/entries/powershell/send-email-using-powershell-with-net-object-system-net-mail-mailmessage

答案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 链接

我最终使用 FolderChangesView 并设置一个 powershell 命令,从主菜单中运行该命令,以弹出窗口提醒用户。与发送电子邮件不同,但无论哪种方式都可以。

使用的 Powershell 命令:PowerShell -Command "Add-Type -AssemblyName PresentationFramework;[System.Windows.MessageBox]::Show('Files have been edited in directory')"

相关内容