DJ Mogarych,
я вот так вот реализовывал через планировщик. Может немного криво, за то работает.
Очистка некой папки ( EXCHANGE ). Файлы старше 60 дней помещеються в папку !НА УДАЛЕНИЕ!, а файлы старше 70 дней удаляются из !НА УДАЛЕНИЕ!? формирование отчёта и отправка его на почту.
Код:
# переменная даты
$Date = Get-Date -Format yyyy-MM-dd
#Запускаем запись лога
Start-Transcript -path "D:\DATA\PUBLIC\DEPT\IT\LOGs\ClearFolderLog_$Date.txt"
# Переменные конечной папки
$TargetFolder = "D:\DATA\PUBLIC\( ExCHANGE )"
# переменная папки временного содержания
$ForDelete = "D:\DATA\PUBLIC\( ExCHANGE )\!НА УДАЛЕНИЕ!"
# переменная исключений
$exclude = @("*!!!*", "!НА УДАЛЕНИЕ!", "*.lnk")
# переменная, чтобы исключить обработку папок и файлов перечисленных в исключениях
# Переход в исходную папку
####cd "$TargetFolder"
$Target = Get-ChildItem -Path $TargetFolder -Exclude $exclude
#Переменные времени
$minus60 = (Get-Date).AddDays(-60)
$minus70 = (Get-Date).AddDays(-70)
Write-Host ""
Write-Host "====================== Перемещение в папку $ForDelete ==========================="
# Перемещение объектов из целевой папки старше 60 дней в папку временного содержания
$ListObjects = (Get-ChildItem -Path $Target -Recurse | `
Where-Object {(!$_.PSisContainer) -and ($_.lastwritetime -lt $minus60) -and ($_.CreationTime -lt $minus60)}).FullName
Foreach ($Objects in $ListObjects) {
Write-Host "Перемещение объекта $Objects в папку $ForDelete" -foregroundcolor "Yellow"; `
Move-Item -Path $Objects -Destination $ForDelete -Force
}
Write-Host ""
Write-Host "================= Удаление объектов из папки $ForDelete =========================="
# Удаление объектов из папки временного содержания старше 70 дней
$ListObjDel = (Get-ChildItem -Path $ForDelete -Recurse |`
Where-Object {($_.lastwritetime -lt $minus70) -and ($_.CreationTime -lt $minus70)}).FullName
ForEach ($ObjDel in $ListObjDel) {
Write-Host "Удаление обекта $ObjDel" -foregroundcolor "Green"; `
Remove-Item -Path $ObjDel -Recurse -Force
}
#останавливаем запись лога
Stop-Transcript
# ==================================================================================
# удаление пустых папок из целевой папки
Get-ChildItem -Path $TargetFolder -Exclude $exclude -Recurse | Where-Object {$_.psiscontainer -eq “true”} | `
ForEach {`
if (Get-Childitem $_.FullName) {} else {Remove-Item $_.FullName
}
}
# ============================ ОТПРАВКА ОТЧЕТА ПО пОЧТЕ ===========================
# Ищем файлы последние за сутки
$CurrentDate = Get-Date -UFormat "%Y-%m-%d"
# $CurrentDate
$ListFile = Get-ChildItem "D:\DATA\PUBLIC\DEPT\IT\LOGs\*" -include *.txt -recurse | Where-Object{ $_.LastWriteTime -gt $CurrentDate }
#$ListFile
# Создаем почтовое сообщение
$mail = New-Object System.Net.Mail.MailMessage
# Устанавливаем соединение
$mail.From = New-Object System.Net.Mail.MailAddress("noreply@domain.kz")
$mail.To.Add("support@domain.kz" )
# Устанавливаем тему сообщения
$mail.Subject = "Repport Clear ( ExCHANGE ) folder";
# Создаем тело сообщения из файла
$mail.Body = "Отчет об очистке папки \\domain.kz\Shared\PUBLIC\( ExCHANGE )\"
# Приаттачиваем файлы
foreach ($File in ($ListFile))
{
$Attachment = New-Object System.Net.Mail.Attachment ($File)
$mail.Attachments.Add($Attachment)
}
# Создаем почтовое сообщение
$smtp = New-Object System.Net.Mail.SmtpClient
# Указываем хост через который будем отправлять
$smtp.host = "mail.domain.kz"
# Задаем пользователя от имени которого будет происходить отправка
$Credentials = new-object System.Net.networkCredential
$Credentials.domain = "DOMAIN"
$Credentials.UserName = "noreply"
$Credentials.Password = "Service@cc0unt"
$smtp.Credentials = $Credentials
# Отправка
$smtp.Send($mail)
ЕСЛИ КТО УЛУЧШИТ СКРИПТ БУДУ БЛАГОДАРЕН.