Группа-объект папка за папкой для удаления - PullRequest
0 голосов
/ 02 июля 2019

У меня есть сценарий, который копирует файлы QVD из структуры QlikView, что было хорошо для одной среды, теперь во второй структура файла намного сложнее, и я не могу использовать тот же групповой код для группировки файлов перед удалениемих.

Ниже вы увидите код для варианта 1, который работает.

Я пробовал несколько версий с -Include, -Exclude, -Recurse, -Properties basename, каталогом,и т.д. без какого-либо прогресса.

$global:currenttime = Set-PSBreakpoint -Variable currenttime -Mode Read -Action { $global:currenttime= Get-Date }
$a = Get-Date
$a.ToUniversalTime()
$date = Get-Date -f yyyy-MM-dd
$LocalPath = "d:\QlikView Storage\PrivateData\"

Get-ChildItem *.qvd -Path "D:\QlikView Storage\PrivateData\" -File -Recurse |
    Where-Object { $_.LastWriteTime -ge (Get-Date).AddDays(-1) } |
    Select-Object Name, @{Name="KBytes";Expression={"{0:N0}" -f ($_.Length / 1KB)}} |
    Export-Csv C:\temp\size\$date.qvdsize1.csv

"Kopiering av folders startad $global:currenttime" | Out-File F:\Log\$date.log.txt -Append

Get-ChildItem -Directory $localpath -Recurse -Verbose | Where {
    $_.LastWriteTime -gt (Get-Date).AddDays(-1)
} | foreach {
    $split = $_.FullName -split '\\'
    $DestFile = $split[1..($split.Length - 1)] -join '\'
    $DestFile = "F:\$DestFile"
    if (!(Test-Path -Path $DestFile)) {  
        Copy-Item -Path $_.Fullname -Destination $destfile -Filter {psicontainer} -Recurse -Verbose 4>&1 |
            Out-File -Append F:\Log\$date.log.txt
    }
}

"Kopiering av folders slutförd $global:currenttime" | Out-File F:\Log\$date.log.txt -Append
"Kopiering av filer påbörjad $global:currenttime" | Out-File F:\Log\$date.log.txt -Append

Get-ChildItem -File  "*.qvd" $localpath -Recurse -Verbose | Where {
    $_.LastWriteTime -gt (Get-Date).AddDays(-1)
} | foreach {
    $split = $_.FullName -split '\\'
    $DestFile = $split[1..($split.Length - 1)] -join '\'
    $DestFile = "F:\$DestFile"
    if (!(Test-Path -Path $DestFile)) {  
        Copy-Item -Path $_.Fullname -Include "*.qvd" -Destination "$destfile.$(Get-Date -f yyyy-MM-dd)" -Filter {PSIsContainer} -Recurse -Verbose 4>&1 |
            Out-File -Append F:\Log\$date.log.txt
    }
}
"Kopiering av filer avslutad  $global:currenttime" | Out-File F:\Log\$date.log.txt -Append
 "Börjar borttagninvg av äldre generation $global:currenttime" | Out-File F:\Log\$date.log.txt -Append

$Groups = Get-ChildItem -Path "F:\qlikview Storage\privatedata\" -Recurse |
          Group-Object -Property BaseName |
          Where-Object {$_.Count -gt 2}
foreach ($g in $Groups) {
    $g.Group |
        sort LastWriteTime -Descending |
        select -Skip 2 |
        foreach {del $_.FullName -Force -Verbose 4>&1} |
        Out-File -Append F:\Log\$date.log.txt
}
"Klar med borttagninvg av äldre generation $global:currenttime" | Out-File F:\Log\$date.log.txt -Append

Структура папок довольно длинная, поэтому одна папка может содержать двадцать подпапок, а файлы в папках 1 и 18 в одной цепочке в каталоге d: \ QlikView Storage \ PrivateData \ canсодержат файлы с одинаковыми именами.

Таким образом, при группировке объектов он должен делать это только по папкам, поэтому, если папка 1 и подпапка содержат объекты с одинаковыми именами, они все равно должны группироваться по-разному.

На рисунке ниже вы видите один ap в качестве примера, и некоторые подпапки в нем содержат файлы .QVD, тогда подпапки к подпапкам могут содержать также файлы .QVD.

Это должно прояснить ситуацию.

enter image description here

1 Ответ

0 голосов
/ 04 июля 2019

Я решил проблему сегодня утром после интересного сна об этом.

Код ниже исправляет это.

$Groups = Get-ChildItem -Path "d:\qlikview Storage\privatedata\" -Recurse  |
        Where-Object { -not $_.PSIsContainer } |
        Group-Object -Property basename, directory |
        Where-Object {$_.Count -gt 2}
foreach ($g in $Groups) {
    $g.Group |
        sort LastWriteTime -Descending |
        select -Skip 2 |
        foreach {del $_.FullName -Force -Verbose 4>&1} |
        Out-File -Append D:\Log\$date.log.txt
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...