首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >创建PowerShell脚本,以便在文件时间超过30分钟时发送电子邮件

创建PowerShell脚本,以便在文件时间超过30分钟时发送电子邮件
EN

Stack Overflow用户
提问于 2014-01-09 02:19:09
回答 1查看 2K关注 0票数 0

我需要对目录中自动创建和清除的文件运行脚本。

我在这里使用了脚本:http://www.experts-exchange.com/Programming/Languages/Scripting/Powershell/Q_26895555.html

此脚本的问题在于,无论是否找到任何违规文件,它都会发送电子邮件。

此外,它会检测旧文件并发送电子邮件,但当需要再次检查时,它不会再次报告该文件。

我想运行这作为一个计划的任务(我知道如何做),但我希望它只发送电子邮件,如果它发现违规文件,我希望它报告的违规者每次检查。

谢谢你的帮助。

EN

回答 1

Stack Overflow用户

发布于 2014-01-09 02:28:45

单行答案如下所示:

代码语言:javascript
复制
Get-ChildItem -Path c:\test | Where-Object -FilterScript { ([DateTime]::Now - $_.LastWriteTime).TotalMinutes -ge 30; } | ForEach-Object -Begin { $FileList = @(); } -Process { $FileList += $_.Name; } -End { Send-MailMessage -Body $FileList ... ... ... ...; };

ForEach-Object cmdlet的-End ScriptBlock中,可以调用Send-MailMessage命令,并传入$FileList变量,该变量是在-Process ScriptBlock of ForEach-Object期间生成的。总体而言,这将变成一个相当冗长的单行命令,因此我们可以将其分解,使其更易于理解,并为电子邮件定义一个更好、更美观的消息体。

这里有一个更长的答案,它把它分成了几个部分:

代码语言:javascript
复制
$FileNameList = @();
$FileList = Get-ChildItem -Path c:\test;

foreach ($File in $FileList) {
   if (([DateTime]::UtcNow - $File.LastWriteTimeUtc).TotalMinutes -ge 30) {
        $FileNameList += $File.Name;
    }
}

$MessageBody = @"
The following files were older than 30 minutes:

{0}
"@ -f ($FileNameList -join "`n");

Send-MailMessage -Body $MessageBody ... ... ... ...;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21003518

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档