Powershell - удаление файлов старше x дней и отправка только электронной почты после удаления файлов - PullRequest
0 голосов
/ 31 января 2020

как удалить файлы старше x дней и отправить только уведомление по электронной почте, если файлы удалены по сценарию. Вот мой скрипт. Файлы удаляются скриптом, но уведомление по электронной почте не работает. Если я удаляю предложения if (if (! $ MessageBody)), тогда уведомление по электронной почте работает, но я получаю электронную почту, когда файлы также не удаляются.




Get-ChildItem temp*.zip  -Path "c:\tempfiles" |
  Where-Object { -not $_.PSIsContainer -and $_.LastWriteTime -lt (Get-Date).AddDays(-0) }|
    ForEach-Object {

        $_ | Remove-Item -force 
    -join  $([datetime]::Now) + "     " + $_.Name| Out-File -FilePath "c:\tempfiles\logs\dellogs.txt" -Append



    $OF = "`r`n"
    $messageBody = $_.Name  + $OF  + $messageBody


    }

     $date = ( get-date )

    if(!$messageBody){


          $smtpServer = ""
          $smtpFrom = ""
          $smtpTo = ""
          $server = ""

      $messageSubject  = "Subject $server - $date"
      $body= "files"
      $smtp = New-Object Net.Mail.SmtpClient($smtpServer)
      $smtp.Send($smtpFrom,$smtpTo,$messagesubject,$messagebody)


     $messageBody=" "
}

1 Ответ

0 голосов
/ 31 января 2020

Вы можете сделать следующее, чтобы найти temp*.zip файлы, удалить их, записать удаленные файлы в файл журнала, а затем отправить список удаленных файлов по электронной почте. Это предполагает, что ваши удаления успешны. Вам нужно будет удалить параметр -WhatIf для удаления.

Get-ChildItem -Filter temp*.zip -Path "c:\tempfiles" -File -OutVariable files | Foreach-Object {
    $_ | Remove-Item -Force -WhatIf
    "{0}     {1}" -f (Get-Date),$_.Name |
        Out-File -FilePath "c:\tempfiles\logs\dellogs.txt" -Append
}
if ($files) {
    $MailParams = @{ 'To' = 'to@domain.com'
                     'From' = 'from@domain.com'
                     'Subject' = "Subject server $(Get-Date)"
                     'Body' = $files.Name | Out-String
                     'SmtpServer' = 'smtpservername'
    }
    Send-MailMessage @MailParams
}

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

$files = [Collections.Generic.List[String]]@()
Get-ChildItem -Filter temp*.zip -Path "c:\tempfiles" -File | Foreach-Object {
    $_ | Remove-Item -Force -WhatIf
    if ($?) {
        "{0}     {1}" -f (Get-Date),$_.Name |
            Out-File -FilePath "c:\tempfiles\logs\dellogs.txt" -Append
        $files.Add($_.Name)
    }
}
if ($files) {
    $MailParams = @{ 'To' = 'to@domain.com'
                     'From' = 'from@domain.com'
                     'Subject' = "Subject server $(Get-Date)"
                     'Body' = $files.Name | Out-String
                     'SmtpServer' = 'smtpservername'
    }
    Send-MailMessage @MailParams
}

$? возвращает true, если последняя команда выполнена успешно. См. About_Automatic_Variables .

Синтаксис @MailParams называется Splatting . Он просто используется здесь для удобства чтения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...