Задача
Универсальный скрипт, который рекурсивно вычищает старые файлы из определённых папок в пользовательской свалке
Решение
Написать 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
Получение списка элементов (файлов и папок) чьё время создания меньше, чем указанное условие с последующим удалением оных
}