我需要对目录中自动创建和清除的文件运行脚本。
我在这里使用了脚本:http://www.experts-exchange.com/Programming/Languages/Scripting/Powershell/Q_26895555.html
此脚本的问题在于,无论是否找到任何违规文件,它都会发送电子邮件。
此外,它会检测旧文件并发送电子邮件,但当需要再次检查时,它不会再次报告该文件。
我想运行这作为一个计划的任务(我知道如何做),但我希望它只发送电子邮件,如果它发现违规文件,我希望它报告的违规者每次检查。
谢谢你的帮助。
发布于 2014-01-09 02:28:45
单行答案如下所示:
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期间生成的。总体而言,这将变成一个相当冗长的单行命令,因此我们可以将其分解,使其更易于理解,并为电子邮件定义一个更好、更美观的消息体。
这里有一个更长的答案,它把它分成了几个部分:
$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 ... ... ... ...;https://stackoverflow.com/questions/21003518
复制相似问题