2014-01-08 3 views
0

Мне нужно запустить скрипт от автоматически созданных и очищенных файлов в каталоге.Создайте сценарий PowerShell для отправки электронной почты, если файлы старше 30 минут

я использовал скрипт здесь: http://www.experts-exchange.com/Programming/Languages/Scripting/Powershell/Q_26895555.html

Проблема с этим сценарием он отправляет письмо независимо от того, находит ли она какие-либо оскорбительные файлы или нет.

Также он обнаруживает старый файл и отправляет электронное письмо, но когда пришло время проверить его снова, он не сообщает файл снова.

Я хотел бы запустить это как запланированное задание (которое я знаю, как это сделать), но я хочу, чтобы он отправлял электронное письмо только в том случае, если он обнаруживает оскорбительные файлы, и я хочу, чтобы он сообщал нарушителям каждый раз, когда он проверяет.

Спасибо за любую помощь.

ответ

1

однострочный ответ будет выглядеть примерно так:

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 ... ... ... ...; }; 

В -EndScriptBlock из ForEach-Object командлета, можно вызвать команду Send-MailMessage, и передать в $FileList переменную, которая будет построена во время -ProcessScriptBlockForEach-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 ... ... ... ...; 
+0

Никогда не помните о первом вопросе, но делает это привал, если он не находит каких-либо файлов старше 30 минут или же она до сих пор отправить пустое письмо? – user3174554

+0

Он по-прежнему отправляет пустое электронное письмо. Я понимаю, что ваш вопрос задается конкретно для такого поведения, однако его можно легко изменить, чтобы остановиться. –

+0

Как я могу заставить его остановиться? Я все еще изучаю PowerShell – user3174554

Смежные вопросы