Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  

Показать сообщение отдельно

Пользователь


Сообщения: 112
Благодарности: 20

Профиль | Отправить PM | Цитировать


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)
ЕСЛИ КТО УЛУЧШИТ СКРИПТ БУДУ БЛАГОДАРЕН.
Это сообщение посчитали полезным следующие участники:

Отправлено: 15:50, 06-06-2014 | #3