求助:PowerShell文件变更邮件通知脚本未触发邮件问题排查
小白也能懂的PowerShell邮件通知脚本排障
先搞懂这个脚本是干啥的
这个脚本就像个一分钟查一次岗的小保安:每次跑起来,就去你指定的文件夹瞅一眼,要是发现1分钟以内有新文件或者被改过的文件,就发邮件告诉你。但它默认只查一次就下班,不会一直盯着!
为啥没收到邮件?一步步找原因
1. 先让脚本“一直上班”
默认脚本只跑一次,可能你刚运行完,才加文件,它已经走了,没看到。
- 解决办法:给脚本加个“循环岗”,让它每60秒就查一次。在脚本最后加两行:
Start-Sleep -Seconds 60 & $MyInvocation.MyCommand.Path - 测试时要记住:先运行脚本,等一会儿再加文件,给它时间查到。
2. 检查邮箱和邮件服务器填对没
就像寄明信片要写对收件人地址和邮局地址:
- 把
smtp.domain.com换成你公司/邮箱服务商真正的邮件服务器(比如QQ邮箱是smtp.qq.com,163邮箱是smtp.163.com) email@domain.com换成你真实的发件邮箱和收件邮箱(比如zhangsan@company.com)- 很多邮箱需要密码/授权码才能发邮件!比如QQ、163邮箱,要在
Send-MailMessage那行加密码验证:
运行脚本时会弹出框让你输邮箱密码,输完就行。Send-MailMessage @SMTPMessage -Body $SMTPBody -Credential (Get-Credential)
3. 让脚本告诉你有没有找到文件
有时候脚本没找到文件,自然不会发邮件。咱们让它在黑框里喊一声:
- 在
If ($File)下面加一行:Write-Host "我找到这些文件啦:`n$($File.FullName)" - 要是黑框里没显示文件,说明时间设置太严了:默认只找1分钟内的文件,你可以把
AddMinutes(-1)改成AddMinutes(-5),让它找5分钟以内的,更容易测试。
4. 去垃圾箱看看!
有时候邮件会被当成垃圾邮件,收件箱找不到的话,去垃圾箱翻一翻~
给你改好的测试脚本
我把上面的修改都加上了,直接复制用就行:
Param ( [string]$Path = "C:\Users\ahmad.mahmoud\Desktop\test", [string]$SMTPServer = "smtp.domain.com", # 换成你的真实SMTP服务器 [string]$From = "你的发件邮箱@xxx.com", # 换成真实发件邮箱 [string]$To = "你的收件邮箱@xxx.com", # 换成真实收件邮箱 [string]$Subject = "新文件添加/修改通知" ) $SMTPMessage = @{ To = $To From = $From Subject = "$Subject 在 $Path" Smtpserver = $SMTPServer } # 查找5分钟内新增/修改的文件 $File = Get-ChildItem $Path | Where { $_.LastWriteTime -ge [datetime]::Now.AddMinutes(-5) } If ($File) { # 在黑色窗口显示找到的文件 Write-Host "我找到这些文件啦:`n$($File.FullName)" $SMTPBody = "`n以下文件最近被新增/修改:`n`n" $File | ForEach { $SMTPBody += "$($_.FullName)`n" } # 添加邮箱密码验证,运行时输入密码即可 Send-MailMessage @SMTPMessage -Body $SMTPBody -Credential (Get-Credential) } # 每60秒自动重新运行脚本,持续监控文件夹 Start-Sleep -Seconds 60 & $MyInvocation.MyCommand.Path
内容的提问来源于stack exchange,提问作者Ahmad Mahmoud
相关产品推荐
相关产品推荐

