Удаление файлов, старше месяца

Задача

Универсальный скрипт, который рекурсивно вычищает старые файлы из определённых папок в пользовательской свалке

Решение

Написать PowerShell скрипт, который работает с такими параметрами, как:

  • Имя папка для очистки
  • Глубина обхода
  • Стартовый каталог

Реализация

Листинг скрипта

Param
(
$sPath,
$sName,
$sDepth
)

if ($sPath -eq $null -or $sName -eq $null -or $sDepth -eq $null)
{
Write-Host “Не указаны один или несколько параметров запуска” -ForegroundColor Red
break
}

$dirs = Get-ChildItem -Path $sPath -Recurse -Depth $sDepth -Directory -Filter $sName
$g_date = (Get-Date).AddMonths(-1)

foreach ($dir in $dirs)
{
Get-ChildItem -path $dir.FullName -Recurse | where {$_.CreationTime -lt $g_date} | Remove-Item
}

Разбор скрипта

Param

(

    $sPath,

    $sName,

    $sDepth

)

Начальные параметры для запуска

    $sPath, – стартовая папка для поиска

    $sName, – имя папки

    $sDepth – глубина поиска

if ($sPath -eq $null -or $sName -eq $null -or $sDepth -eq $null)

{

    Write-Host “Не указаны один или несколько параметров запуска” -ForegroundColor Red

    break

}

Проверка наличия параметров и останов, если одного или нескольких параметров нет

$dirs = Get-ChildItem -Path $sPath -Recurse -Depth $sDepth -Directory -Filter $sName

Получение списка папок по указанным параметрам

$g_date = (Get-Date).AddMonths(-1)

Формирование условия даты

foreach ($dir in $dirs)

Цикл по полученному списку папок

{

    Get-ChildItem -path $dir.FullName -Recurse | where {$_.CreationTime -lt $g_date} | Remove-Item

Получение списка элементов (файлов и папок) чьё время создания меньше, чем указанное условие с последующим удалением оных

}