@hardwellZero

Как удалить нужные файлы/папки?

Здравствуйте, знатоки PowerShell.
Возник вопрос об удалении файлов на удаленной машине.
Подключение к ней уже реализовано на Python, сейчас хочу дописать запуск PowerShell и выполнение команды для удаления.
Нужно помощь в составлении команды.
Критерии:
  • Удаление всех файлов в определенной директории. Например (D://Example/)
  • Исключение на папку с определенным именем. Например (folder)
  • Удаление только тех файлов, у которых "время жизни" больше определенного кол-ва часов. "Время жизни" = (Текущее дата/время) - (Дата/время создания файлика)


В качестве примера нашел вот такое:
$DT=New-Object DateTime
Get-ChildItem E:\Backup_Folder | Where {[DateTime]::TryParse($_,[ref]$DT)} | Where {[DateTime]::ParseExact($_,'yyyy-MM-dd',$null) -lt (Get-Date).AddDays(-60)}| Del -recurse -WhatIf

Здесь по словам автора удаление только папок с именами вида 2009-11-21, 2010-03-05 и которым больше 40 дней.

С PowerShell столкнулся впервые, помогите составить команду. Спасибо.
  • Вопрос задан
  • 3084 просмотра
Пригласить эксперта
Ответы на вопрос 3
maaGames
@maaGames
Погроммирую программы
Автор скромно лжёт.)
Данный скрипт лишь напишет о том, что он удалит файлы, старее 60 дней от текущего дня.
А вот если убрать из скрипта "-WhatIf", вот тогда уже удалит... Если есть права на запуск не подписанных скриптов и хватит прав, чтобы удалить файлы из заданной папки.
Ответ написан
@TomosBlack
Написал простенькую универсальную функцию.

Function Del-Old{
    Param(
        #target path. Enter one string
        $TargetPath,
        #Enter one or many (array) exclude files (just names, not full address)
        $ExcludePath = @(),
        #Enter number of life time hours objects. Oldest objects will delete
        [int]$TimeLifeHours
    )
    
    $TimeLimit = (Get-Date).AddHours(-$TimeLifeHours)
    
    $ObjectsForDel = dir -Path $TargetPath -Exclude $ExcludePat | ?{$_.CreationTime -lt $TimeLimit}
    
    foreach ($obj in $ObjectsForDel){
        del -Path $obj.FullName -Recurse
    }
}
Ответ написан
Комментировать
RusMikle
@RusMikle
Программист
с Вашей задачей легко справится программа DelT
Пример:
delt e:\Example /PT /OF *.doc /NOD /RW /DTS 19.02.2019 /DTE 19.02.2019 /NOF *\folder\*
Удалить все созданные/изменённые 19.02.2019 файлы с маской *.doc без переноса в корзину предварительно перезаписав их содержимое по стандарту 5220.22-M, в папках и подпапках, сами папки не удалять. Не удалять все файлы в папках folder.
Ключ /RW в вашем случае скорее всего не нужен (перезапись перед удалением).
Если хотите сначала посмотреть что будет удаляться без самого удаления используйте ключ /T
Ну и если хотите с количеством часов и временем жизни смотрите ключ /ТМ
Успехов.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы