[Powershell] Резервная копия на ftp c email уведомлением | NetConfig

[Powershell] Резервная копия на ftp c email уведомлением

Решил проделать этап резервного копирования “данных” на ftp сервер. Для этого был выбран метод решения с помощью – powershell.
Сделать бекап и отправить его на ftp не составило труда. Но контролировать данный процесс ежедневно (создался ли, выгрузился или произошла ошибка) нет возможности, да и не уследишь. Поэтому необходим ежедневный отчет, получился следующий скрипт, который уведомляет на почту про результат выполения.

С помощью try/catch удалось сделать следующий механизм. Выполняется try, если в нем возникает ошибка переходит в catch (Exception) и отправляется письмо с текстом ошибки.

Если ошибок не было, отправляется уведомление с успешным выполнением задачи.

 

try{
#Получаем текущую дату
$date = get-date
$foldername = $date.toshortdatestring()
#Делаем компрессию для zip
Add-Type -assembly ‘System.IO.Compression’
Add-Type -assembly ‘System.IO.Compression.FileSystem’
#СОЗДАЕМ АРХИВ ИЗ ДИРЕКТОРИИ D:\test\1c и складываем в директорию D:\Archive c текущей датой
$Zip=”D:\Archive\$foldername.zip”
[System.IO.Compression.ZipFile]::CreateFromDirectory(“D:\test\1c”,$Zip)
#Указываем локальную директорию и подключаемся к ftp
$localdir = “D:\Archive\”
$ftp = “ftp://ipaddr/dir/”
$user = “ftpuser_ftp”
$pass = “userpass”
$webclient = New-Object System.Net.WebClient
$webclient.Credentials = New-Object System.Net.NetworkCredential($user,$pass)
#Перебираем весь масив данных и загружаем его
foreach($item in (dir $localdir “*”)) {
    “Uploading $item…”
    $uri = New-Object System.Uri($ftp+$item.Name)
    $webclient.UploadFile($uri, $item.FullName)
}
#Адрес сервера SMTP для отправки
        $serverSmtp = “smtp.gmail.com”
#Порт сервера
        $port = 587
#От кого
        $From = “[email protected]
#Кому
        $To = “[email protected]
#Тема письма
        $subject = “Бекап успешно создан”
#Логин и пароль от ящики с которого отправляете [email protected]
        $user = ” [email protected]
        $pass = “infopass”
        $mes = New-Object System.Net.Mail.MailMessage
        #Формируем данные для отправки
        $mes.From = $from
        $mes.To.Add($to)
        $mes.Subject = $subject
        $mes.IsBodyHTML = $true
        $mes.Body = “Бекап создан и отправлен на ftp успешно”
#Создаем экземпляр класса подключения к SMTP серверу
        $smtp = New-Object Net.Mail.SmtpClient($serverSmtp, $port)
#Сервер использует SSL
        $smtp.EnableSSL = $true
#Создаем экземпляр класса для авторизации на сервере gmail
        $smtp.Credentials = New-Object System.Net.NetworkCredential($user, $pass);
#Отправляем письмо, освобождаем память
        $smtp.Send($mes)
#При успешной загрузке удаляем данные с сервера, созданный архив и выгруженный бекап с sql
Remove-Item D:\Archive\* -Recurse
Remove-Item D:\test\1c\* -Recurse
        exit 1
}
#Выполняется при ошибке в try
catch [Exception] {
#Адрес сервера SMTP для отправки
        $serverSmtp = “smtp.gmail.com”
        $port = 587
        $From = “[email protected]
        $To = ” [email protected]
        $subject = “Ошибка – бекапа”
#Логин и пароль от ящики с которого отправляете gmail
        $user = “[email protected]
        $pass = “infopass”
        $mes = New-Object System.Net.Mail.MailMessage
        $mes.From = $from
        $mes.To.Add($to)
        $mes.Subject = $subject
        $mes.IsBodyHTML = $true
        #Формируем данные об ошибке
        $mes.Body = “Exception Title: ” + $_.Exception.GetType().FullName + “`r`n`r`n” + “Exception Details:” + $_.Exception.Message
        $smtp = New-Object Net.Mail.SmtpClient($serverSmtp, $port)
        $smtp.EnableSSL = $true
        $smtp.Credentials = New-Object System.Net.NetworkCredential($user, $pass);
        $smtp.Send($mes)
        exit 1
  Remove-Item D:\Archive\* -Recurse
}
return 0
 



Fatal error: Uncaught Error: Call to undefined function wp_related_posts() in /home2/netconfi/public_html/wp-content/themes/theme/single.php:56 Stack trace: #0 /home2/netconfi/public_html/wp-includes/template-loader.php(106): include() #1 /home2/netconfi/public_html/wp-blog-header.php(19): require_once('/home2/netconfi...') #2 /home2/netconfi/public_html/index.php(17): require('/home2/netconfi...') #3 {main} thrown in /home2/netconfi/public_html/wp-content/themes/theme/single.php on line 56