Если путь не существует, пропустите FOREACH

#powershell

Вопрос:

У меня есть вопрос, с которым, я надеюсь, один из вас сможет мне помочь. Следующий скрипт выполняет свою работу, он отправляет по электронной почте папки, возраст которых превышает 30 дней. Я хочу добавить еще 2 функции…

  • Если в OwnerEmail.txt нет ни там, ни там пустоты.. он не отправит электронное письмо.
  • Если нет папок старше 30 дней, он не отправит электронное письмо.

У меня просто возникли проблемы с использованием функции ПРОДОЛЖЕНИЯ, чтобы пропустить предварительный просмотр

 $ParentFolders = Get-ChildItem -Path "C:TestWRA" -Directory | 
    Select-Object -ExpandProperty FullName

foreach ($SubFolder in $ParentFolders) {
    $Contact = Get-Content -Path ($SubFolder   "OwnerEmail.txt")
    $emailTime = (Get-Date).ToString("MM/dd/yyyy")
    $WRAHTMLReport = Get-ChildItem -Path $SubFolder -Directory | 
    Where-Object {($_.LastWriteTime -lt (Get-Date).AddDays(-30))} |
    Select-Object Name, CreationTime |

    ConvertTo-Html -Head $Header -PreContent "
        <h2>Current Nuix Case(s)</h2> 
        <body>
            Report was sent on $emailTime
            <br></br>
            When you have a moment can you please confirm if any of these cases can be removed from Nuix:
        <body> 
        <br></br> " | 
    
    $WRAHTMLReport = $WRAHTMLReport -join ""
    Start-Sleep -s 2

Send-MailMessage -SmtpServer mail.company.com -to $Contact -from cubam1@company.com -Subject "Nuix Cases" -Body $WRAHTMLReport -BodyAsHtml

}
 

Комментарии:

1. ваш Where-Object фильтр может иметь несколько тестов … так что просто добавьте их туда. [ усмехается ]

2. Предварительный элемент помещается между открытием <body> и <table> тегами, поэтому вы не должны включать свои собственные <body></body> теги

3. Спасибо вам за всю вашу помощь!

Ответ №1:

Итак, это может выглядеть примерно так, обратите внимание, что я показываю только соответствующие части кода.

Я думаю, что в этом случае безопасно ставить $emailTime вне цикла, так как вы собираете дату только в MM/dd/yyyy формате, и я также добавил $folderLimitDate вне цикла.

Эта переменная содержит текст HTML $mailBody = ConvertTo-Html -InputObject $WRAHTMLReport... , поэтому не забудьте изменить значение -Body $mailBody вкл. Send-MailMessage

 $emailTime = (Get-Date).ToString("MM/dd/yyyy")
$folderLimitDate = (Get-Date).AddDays(-30)

foreach ($SubFolder in $ParentFolders)
{
    
    $path = Join-Path $SubFolder -ChildPath 'OwnerEmail.txt'
    
    # If OwnerEmail.txt doesn't exist on this path,
    # go to next loop iteration
    if(-not(Test-Path $path)){ continue }
    
    $Contact = Get-Content $path

    $WRAHTMLReport = Get-ChildItem -Path $SubFolder -Directory |
    Where-Object LastWriteTime -LT $folderLimitDate |
    Select-Object Name, CreationTime

    # If this variable is null, go to next loop iteration
    if(-not $WRAHTMLReport){ continue }

    [string]$mailBody = ConvertTo-Html -InputObject $WRAHTMLReport...
    ...
    ...
    ...
 

Комментарии:

1. Ты всегда спасаешь меня, Сантьяго!!, Большое тебе спасибо!, это сработало

2. @Мигель хе-хе, нет проблем! рад помочь! 🙂