Выражаю свою большую благодарность
ival за помощь и корректировку направления моих мыслей

Ранее, в процессе решения данного вопроса, на просторах сети наткнулся на очень любопытную статью:
«Автоматическое удаление старых файлов [скрипт PowerShell]»https://www.mytechnote.ru/article/avtomaticheskoe-udalenie-staryh-faylov-skript-powershellТам автор еще более изящно чистит файлы и папки,
учитывая их возраст (дату создания).
Может кому-то в будущем будет в самый раз, например, для чистки определённых папок на терминальном сервере.
С позволения уважаемой администрации форума приведу содержимое всего PS-скрипта и пояснения автора тут (вдруг исчезнет та статься) с уже внесенной моей поправкой на пути к папкам, которые будем чистить -
"C:\Windows\Temp\" и
"C:\Users\имя_текущего_пользователя\Appdata\Local\Temp" (в скрипте это выглядит как
"$env:temp\")
В этом блоке указываем количество дней (в данном случае это -
7 дней), файлы старше которых должны быть удалены, задаем путь до очищаемой папки/папок (пути к нужным папкам пишутся в кавычках и разделяются между собой запятой + пробел) и желаемые расширения файлов.
Если вам нужно удалять определенные типы файлов, например можно задать "*.js" - тогда будут удалены все старые JavaScript файлы.$Days = "7"
$TargetFolder = "C:\Windows\Temp\", "$env:temp\"
$Extension = "*"
В следующем участке мы находим все файлы, которые подходят под наши критерии. А также сортируем список, что бы всё шло от большего пути к меньшему. Это нужно, если у вас будут вложенные папки, что бы скрипт всегда сперва удалял файлы, а потом уже пытался удалить папку, где расположены эти папки.
$LastWrite = $Now.AddDays(-$Days)
$Files = Get-Childitem $TargetFolder -Include $Extension -Recurse | Where{$_.CreationTime -le "$LastWrite" -and $_.LastWriteTime -le "$LastWrite"} | Sort-Object -Descending {$_.FullName.Split('\').Count},FullName
Собственно, удаляем файл.
foreach ($File in $Files)
{
if ($File -ne $NULL -and !$File.PSIsContainer)
{
write-host "Deleting File $File" -ForegroundColor "Magenta"
Remove-Item $File.FullName -Force | out-null
}
Тут мы удаляем папку, но перед ее удалением, проверяем, что бы она была пустая.
elseif ($File -ne $NULL -and $File.PSIsContainer)
{
$FolderInfo = get-Childitem $File.FullName | Measure-Object
if ($folderInfo.count -eq 0)
{
write-host "Deleting directory - $File" -foregroundcolor "green"
Remove-Item $File.FullName -Force | out-null
}
}
По сути, это повторение уже проделанной операции. Но тут мы проходимся по всем папкам, ищем пустые папки и удаляем их.
$folderInfo=""
$Folders = Get-Childitem $TargetFolder -Recurse | Where{$_.PSIsContainer} | Sort-Object -Descending {$_.FullName.Split('\').Count},FullName
foreach ($Folder in $Folders)
{
if ($Folder -ne $null)
{
$FolderInfo = get-Childitem $Folder.FullName | Measure-Object
if ($folderInfo.count -eq 0)
{
write-host "Deleting directory - $Folder" -foregroundcolor "yellow"
Remove-Item $Folder.FullName -force | out-null
}
}
}
Работоспособность указанного скрипта проверено лично мной. Со своей задачей он справляется без проблем.
Также в архиве
«delete-old-files.zip», прикрепленном к этому сообщению, находится уже модифицированный PS-скрипт для чистки указанных выше папок:
"C:\Windows\Temp\" и
"C:\Users\имя_текущего_пользователя\Appdata\Local\Temp".
Если кому-то нужно чистить другие папки - просто замените пути на свои в
"$TargetFolder =".