![监视某个文件夹/文件,并在其超过一定大小时发送通知](https://linux22.com/image/1591208/%E7%9B%91%E8%A7%86%E6%9F%90%E4%B8%AA%E6%96%87%E4%BB%B6%E5%A4%B9%2F%E6%96%87%E4%BB%B6%EF%BC%8C%E5%B9%B6%E5%9C%A8%E5%85%B6%E8%B6%85%E8%BF%87%E4%B8%80%E5%AE%9A%E5%A4%A7%E5%B0%8F%E6%97%B6%E5%8F%91%E9%80%81%E9%80%9A%E7%9F%A5.png)
首先介绍一下我的问题的背景:
有时我们使用的应用程序会在日志中陷入循环,从而导致日志文件非常大(每秒增加 30 MB)。由于我们无法访问应用程序的完整源代码,因此我们无法自行修复此问题。我们必须手动关闭应用程序服务以删除日志文件,然后重新启动应用程序。
什么能真正帮助我们:
由于我们不想每隔几个小时就检查日志文件的大小,所以我们考虑使用一种自动化机制来为我们完成这项工作。这就是我提出这个问题的原因:
是否有可能创建一个执行文件(由任务计划程序每小时执行一次或全天候扫描文件/文件夹),文件夹或文件的大小,并在文件夹/文件超过一定大小(例如 200 MB)时发送任何类型的通知(例如电子邮件/其他任何内容)。
我对 PowerShell 和批处理文件完全是新手,因此我非常感谢任何形式的咨询,如果可能的话,还能得到完整提供和描述的解决方案。
答案1
根据评论部分中 Seth 的建议,我使用列出的方法创建了脚本 - 对我来说效果很好:
$startFolder = "C:\softwarename\data\logs";
$totalSize = 0;
$colItems = Get-ChildItem $startFolder
foreach ($i in $colItems)
{
$subFolderItems = Get-ChildItem $i.FullName -recurse -force | Where-Object {$_.PSIsContainer -eq $false} | Measure-Object -property Length -sum | Select-Object Sum
$totalSize = $totalSize + $subFolderItems.sum / 1MB
}
$startFolder + " | " + "{0:N2}" -f ($totalSize) + " MB"
if($totalSize -gt 1000){
Send-MailMessage -to "[email protected]" -from "PowerShell <[email protected]>" -Subject "Test" -body "Message Message Message" -Credential "MailUser"
}
一旦文件夹大于 1000 MB(-gt 1000),它就会发送一封电子邮件。