Мне нужно удалить журналы с расширением *.log.*
выходит в подпапку с именем SessLogs
, WorkflowLogs
в корневом каталоге d:\software\Bil
Точно так же у меня есть папки SessLogs
, WorkflowLogs
во многих подкаталогах с разными именами, например Bil
, как этого добиться. У меня есть образец сценария, созданный, как показано ниже, но для него требуется некоторое обновление.
Структура каталогов, например
Программное обеспечение -> Wel -> "SessLogs" и "WorkflowLogs"
Программное обеспечение -> Gim -> "SessLogs" и "WorkflowLogs"
Программное обеспечение -> Ren -> "SessLogs" и "WorkflowLogs"
$Path = "D:\software"
$Daysback = "-30"
$CurrentDate = Get-Date
$DatetoDelete = $CurrentDate.AddDays($Daysback)
get-childitem "D:\software*" -include "*.*" -force -recurse |where-object { (-not $_.PSIsContainer) -and ($_.creationtime -lt $DatetoDelete) } |remove-item -whatif
Я не уверен, правильно ли я понимаю ваше требование, но если да, то оно у вас уже было. Что я изменил:
Get-Childitem
с участием recurse
вам не нужно добавлять звездочку (*) в конце пути поиска.(-not $_.PSIsContainer)
если вы знаете, что ни одна из ваших папок не содержит строки «.log». - но вы можете оставить его себе на всякий случай.Таким образом, это должно сделать следующее: получить все элементы из D: \ Software и всех его подпапок, которые содержат строку «.log». в имени, которые не являются каталогами, и которые были созданы 30 дней назад или ранее - затем удалите их.
$Path = "D:\software"
$Daysback = "-30"
$CurrentDate = Get-Date
$DatetoDelete = $CurrentDate.AddDays($Daysback)
get-childitem "D:\software" -include "*.log.*" -force -recurse |where-object { (-not $_.PSIsContainer) -and ($_.creationtime -lt $DatetoDelete) } |remove-item -whatif