关于windows:文件添加到文件夹时的电子邮件通知

Email Notification when file added to folder

我对脚本知之甚少,但我认为我想要的都是可能的。我只想在将文件添加到特定文件夹时收到电子邮件通知。我没有任何特定的软件,所以我猜它必须是一个批处理文件或 VBS?


您可以在启用了 powershell 的批处理文件中执行此操作:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
@echo off
setlocal EnableDelayedExpansion
set"[email protected]"
set"emailPassword=dummyPassword"
set"[email protected]"
set"subject=File Changed"
FOR %%G IN (*) DO attrib -A"%%G"
:loop
set"body="
FOR %%G IN (*) DO (
    attrib"%%G" | findstr /B /L A 1>nul
    if !errorlevel! equ 0 (
        echo"%%G"
        set"body=!body!^<br ^/^>%%G"
        attrib -A"%%G"
        )
    ) 2>nul
if not"%body%"=="" echo sending email
if not"%body%"=="" set"body=The following files have been changed:!body!"
if not"%body%"=="" powershell.exe -command"Send-MailMessage -From '!emailUserName!' -to '!target!' -Subject '!subject!' -Body '!body!' -BodyAsHtml -SmtpServer 'smtp.gmail.com' -port '587' -UseSsl -Credential (New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList ('!emailUserName!', (ConvertTo-SecureString -String '!emailPassword!' -AsPlainText -Force)))"
goto :loop

为此,您需要创建一个用于发送电子邮件的虚拟 gmail 帐户。这支持正文中的 HTML 标记,如示例所示。

请注意,这不适用于删除文件,仅适用于更改和新文件。


您有关于您的电子邮件服务器的信息吗?你有什么版本的 Windows 和 Powershell?

这个简短的 Powershell 脚本适用于我的环境:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
$folder ="D:"
$mailserver ="your.mailserver.your.company"
$recipient ="[email protected]"

$fsw = New-Object System.IO.FileSystemWatcher $folder -Property @{
   IncludeSubdirectories = $true
   NotifyFilter = [IO.NotifyFilters]'FileName'
}

$created = Register-ObjectEvent $fsw -EventName Created -Action {
   $item = Get-Item $eventArgs.FullPath
   $s = New-Object System.Security.SecureString
   $anon = New-Object System.Management.Automation.PSCredential ("NT AUTHORITY\\ANONYMOUS LOGON", $s)
   Send-MailMessage -To $recipient `
                    -From"[email protected]" `
                    -Subject"File Creation Event" `
                    -Body"A file was created: $($eventArgs.FullPath)" `
                    -SmtpServer $mailserver `
                    -Credential $anon
}

用这个停止警报:

1
Unregister-Event -SourceIdentifier Created -Force


我根据@xXhRQ8sD2L7Z 贡献的内容构建了我的解决方案。但是我在测试时收到了多封电子邮件,每次运行注册脚本时都会收到一封新电子邮件。取消注册行不工作:

1
    Unregister-Event -SourceIdentifier Created -Force

所以我发现:取消注册已注册的文件观察器事件不起作用

1
    Get-EventSubscriber -SourceIdentifier"filechanged" | Unregister-Event

但它仍然无法正常工作,所以我自己运行 Get-EventSubscriber 并获得了事件的订阅列表,并发现在我的情况下,-SourceIdentifier 是一个 GUID。有了这种理解,我抓住了每个单独的 GUID 并着手取消注册它们。 (我本可以遍历它们,但我可能只会使用一次。另外,在我意识到发生了什么之前,我只创建了 6 次订阅)

这消除了我每次测试时收到的所有额外电子邮件。

1
    Get-EventSubscriber -SourceIdentifier"<very long GUID>" | Unregister-Event

然后我想发送给多个收件人,所以我发现了这个:Powershell send-mailmessage - email to multiple recipients

1
    $recipients ="<[email protected]>","<[email protected]>"

您还可以使用电子邮件通讯组。