У меня есть сценарий, который копирует файлы 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.
Это должно прояснить ситуацию.