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 |
但它仍然无法正常工作,所以我自己运行
这消除了我每次测试时收到的所有额外电子邮件。
1 | Get-EventSubscriber -SourceIdentifier"<very long GUID>" | Unregister-Event |
然后我想发送给多个收件人,所以我发现了这个:Powershell send-mailmessage - email to multiple recipients
1 | $recipients ="<[email protected]>","<[email protected]>" |
您还可以使用电子邮件通讯组。