new file: Kasowaczka/kasowaczka.ps1
This commit is contained in:
parent
ba82298014
commit
5c93f1109c
213
Kasowaczka/kasowaczka.ps1
Normal file
213
Kasowaczka/kasowaczka.ps1
Normal file
@ -0,0 +1,213 @@
|
||||
<#
|
||||
Skrypt kasujący pliki i foldery starsze niż N dni z lokazliacji X na podstawie parametru LastWriteTime
|
||||
Schemat działania:
|
||||
1. Kasowanie plików starszych niż N dni.
|
||||
2. Zapisywanie listy folderów starszych niż N dni w paczkach po $stronicowanie.
|
||||
3. Kasowanie folderów na podstawie utworzonych paczek od końca.
|
||||
|
||||
Przykład:
|
||||
.\Kasowaczka.ps1 -path "C:\Users\tokostrzewa\Desktop" -days 10 -nazwa "Pulpit_Kasowanie_10"
|
||||
#>
|
||||
|
||||
param (
|
||||
[Parameter(Mandatory=$true, HelpMessage="Podaj pełną ścieżkę do katalogu.")][string]$path,
|
||||
[Parameter(Mandatory=$true, HelpMessage="Podaj liczbę dni po której pliki będą kasowane.")][int]$days,
|
||||
[Parameter(Mandatory=$true, HelpMessage="Nazwa kasowania.")][string]$nazwa
|
||||
)
|
||||
$actual_date = Get-Date
|
||||
$actual_date_str = $actual_date.ToString("yyyyMMddHHmmss")
|
||||
$middle_date = Get-Date
|
||||
$end_date = Get-Date
|
||||
$stronicowanie = 25000
|
||||
$licznik = 0
|
||||
$licznik_csv = 0
|
||||
$path_main = "D:\Scripts\kasowaczka"
|
||||
$path_archive_main = "$($path_main)\archive"
|
||||
$path_archive = "$($path_main)\archive\$($actual_date_str)_$($nazwa)"
|
||||
$path_log = "$($path_archive)\script.log"
|
||||
$path_tmp = "$($path_archive)\tmp"
|
||||
$array_object_list = [System.Collections.Generic.List[pscustomobject]]::new()
|
||||
$array_folder_list = [System.Collections.Generic.List[pscustomobject]]::new()
|
||||
$array_stronicowanie = @()
|
||||
$delete_date = $actual_date.AddDays(-$days)
|
||||
$l_plik = 0
|
||||
$l_folder = 0
|
||||
|
||||
# Weryfikacja istnienia katalogów i plików niezbędnych do wykonania skryptu:
|
||||
if (-not(Test-Path $path_main)) {
|
||||
try {
|
||||
New-Item -Path $path_main -ItemType Directory -ErrorAction Stop | Out-Null
|
||||
} catch {
|
||||
"Nie odnaleziono lokalizacji $path_main | Zamykam."
|
||||
exit
|
||||
}
|
||||
}
|
||||
if (-not(Test-Path $path_archive_main)) {
|
||||
try {
|
||||
New-Item -Path $path_archive_main -ItemType Directory -ErrorAction Stop | Out-Null
|
||||
} catch {
|
||||
"Nie odnaleziono lokalizacji $path_archive_main | Zamykam."
|
||||
exit
|
||||
}
|
||||
}
|
||||
if (-not(Test-Path $path_archive)) {
|
||||
try {
|
||||
New-Item -Path $path_archive -ItemType Directory -ErrorAction Stop | Out-Null
|
||||
} catch {
|
||||
"Nie odnaleziono lokalizacji $path_archive | Zamykam."
|
||||
exit
|
||||
}
|
||||
}
|
||||
if (-not(Test-Path $path_log)) {
|
||||
try {
|
||||
New-Item -Path $path_log -ItemType File -ErrorAction Stop | Out-Null
|
||||
} catch {
|
||||
"Nie odnaleziono lokalizacji $path_log | Zamykam."
|
||||
exit
|
||||
}
|
||||
}
|
||||
if (-not(Test-Path $path_tmp)) {
|
||||
try {
|
||||
New-Item -Path $path_tmp -ItemType Directory -ErrorAction Stop | Out-Null
|
||||
} catch {
|
||||
"Nie odnaleziono lokalizacji $path_tmp | Zamykam."
|
||||
exit
|
||||
}
|
||||
}
|
||||
|
||||
"$(($actual_date).ToString("[yyyy-MM-dd HH:mm:ss.ffff]")) | Start skryptu" | Add-Content -LiteralPath $path_log -Encoding Default
|
||||
"$((Get-Date).ToString("[yyyy-MM-dd HH:mm:ss.ffff]")) | Weryfikacja istnienia katalogu `"$($path)`"" | Add-Content -LiteralPath $path_log -Encoding Default
|
||||
if (-not(Test-Path $path)) {
|
||||
"$((Get-Date).ToString("[yyyy-MM-dd HH:mm:ss.ffff]")) | Nie odnaleziono katalogu `"$($path)`" | Zamykam" | Add-Content -LiteralPath $path_log -Encoding Default
|
||||
exit
|
||||
}
|
||||
"$((Get-Date).ToString("[yyyy-MM-dd HH:mm:ss.ffff]")) | Rozpoczynam przeszukiwanie lokalizacji `"$($path)`" w poszukiwaniu plików i folderów starszych niż `"$($days)`" dni ($($delete_date.ToString("[yyyy-MM-dd HH:mm:ss.ffff]"))) wraz z jednoczesnym kasowaniem plików" | Add-Content -LiteralPath $path_log -Encoding Default
|
||||
|
||||
Get-ChildItem -LiteralPath $path -Recurse | ForEach-Object {
|
||||
if ($_.LastWriteTime -lt $delete_date) {
|
||||
# Zapisaywanie listy katalogów. Próba skasowania katalogów podejmowana jest po skasowaniu plików starszych niż N dni.
|
||||
if ($_.PSIsContainer -eq $true) {
|
||||
$licznik++
|
||||
$tmp = [PSCustomObject]@{
|
||||
FullName = $_.FullName
|
||||
CreationTime = $_.CreationTime
|
||||
LastWriteTime = $_.LastWriteTime
|
||||
PSIsContainer = $_.PSIsContainer
|
||||
}
|
||||
$array_object_list.Add($tmp)
|
||||
# Stronicowanie wyników w celu przyśpieszenia operacji.
|
||||
if ($licznik -eq $stronicowanie) {
|
||||
$licznik_csv++
|
||||
$licznik_csv_formatowany = "{0:D10}" -f $licznik_csv
|
||||
try {
|
||||
$array_object_list | Export-Csv -LiteralPath "$($path_tmp)\$($licznik_csv_formatowany).csv" -NoTypeInformation -Encoding Default -ErrorAction Stop
|
||||
} catch {
|
||||
"$((Get-Date).ToString("[yyyy-MM-dd HH:mm:ss.ffff]")) | Nie udało się zapisać pliku z katalogami do usunięcia: `"$($path_tmp)\$($licznik_csv_formatowany).csv`"" | Add-Content -LiteralPath $path_log -Encoding Default
|
||||
}
|
||||
# Wyczyszczenie tablicy z elementów.
|
||||
$array_object_list = [System.Collections.Generic.List[pscustomobject]]::new()
|
||||
$licznik = 0
|
||||
}
|
||||
} else {
|
||||
# Kasowanie znalezionych obiektów starszych niż x Dni.
|
||||
try {
|
||||
Remove-Item -LiteralPath $_.FullName -ErrorAction Stop
|
||||
$l_plik++
|
||||
} catch {
|
||||
"$((Get-Date).ToString("[yyyy-MM-dd HH:mm:ss.ffff]")) | Nie udało się skasować pliku: `"$($_.FullName)`" | Bład: $($error[0])" | Add-Content -LiteralPath $path_log -Encoding Default
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
# Zapisaywanie listy katalogów w przypadku nie osiągnięcia ($licznik -eq $stronicowanie) po pełnym przebiegu.
|
||||
if ($array_object_list.count -ne 0) {
|
||||
$licznik_csv++
|
||||
$licznik_csv_formatowany = "{0:D10}" -f $licznik_csv
|
||||
try {
|
||||
$array_object_list | Export-Csv -LiteralPath "$($path_tmp)\$($licznik_csv_formatowany).csv" -NoTypeInformation -Encoding Default -ErrorAction Stop
|
||||
} catch {
|
||||
"$((Get-Date).ToString("[yyyy-MM-dd HH:mm:ss.ffff]")) | Nie udało się zapisać pliku z katalogami do usunięcia: `"$($path_tmp)\$($licznik_csv_formatowany).csv`"" | Add-Content -LiteralPath $path_log -Encoding Default
|
||||
}
|
||||
# Wyczyszczenie tablicy z elementów.
|
||||
$array_object_list = [System.Collections.Generic.List[pscustomobject]]::new()
|
||||
$licznik = 0
|
||||
}
|
||||
|
||||
# Na tym etapie zakończono kasowanie plików starszych niż X dni.
|
||||
$middle_date = Get-Date
|
||||
"$(($middle_date).ToString("[yyyy-MM-dd HH:mm:ss.ffff]")) | Kasowanie plików zakończono po..." | Add-Content -LiteralPath $path_log -Encoding Default
|
||||
"$(($middle_date).ToString("[yyyy-MM-dd HH:mm:ss.ffff]")) | Days :$(($middle_date - $actual_date).Days)" | Add-Content -LiteralPath $path_log -Encoding Default
|
||||
"$(($middle_date).ToString("[yyyy-MM-dd HH:mm:ss.ffff]")) | Hours :$(($middle_date - $actual_date).Hours)" | Add-Content -LiteralPath $path_log -Encoding Default
|
||||
"$(($middle_date).ToString("[yyyy-MM-dd HH:mm:ss.ffff]")) | Minutes :$(($middle_date - $actual_date).Minutes)" | Add-Content -LiteralPath $path_log -Encoding Default
|
||||
"$(($middle_date).ToString("[yyyy-MM-dd HH:mm:ss.ffff]")) | Seconds :$(($middle_date - $actual_date).Seconds)" | Add-Content -LiteralPath $path_log -Encoding Default
|
||||
"$(($middle_date).ToString("[yyyy-MM-dd HH:mm:ss.ffff]")) | Milliseconds :$(($middle_date - $actual_date).Milliseconds)" | Add-Content -LiteralPath $path_log -Encoding Default
|
||||
"$(($middle_date).ToString("[yyyy-MM-dd HH:mm:ss.ffff]")) | Ticks :$(($middle_date - $actual_date).Ticks)" | Add-Content -LiteralPath $path_log -Encoding Default
|
||||
"$(($middle_date).ToString("[yyyy-MM-dd HH:mm:ss.ffff]")) | TotalDays :$(($middle_date - $actual_date).TotalDays)" | Add-Content -LiteralPath $path_log -Encoding Default
|
||||
"$(($middle_date).ToString("[yyyy-MM-dd HH:mm:ss.ffff]")) | TotalHours :$(($middle_date - $actual_date).TotalHours)" | Add-Content -LiteralPath $path_log -Encoding Default
|
||||
"$(($middle_date).ToString("[yyyy-MM-dd HH:mm:ss.ffff]")) | TotalMinutes :$(($middle_date - $actual_date).TotalMinutes)" | Add-Content -LiteralPath $path_log -Encoding Default
|
||||
"$(($middle_date).ToString("[yyyy-MM-dd HH:mm:ss.ffff]")) | TotalSeconds :$(($middle_date - $actual_date).TotalSeconds)" | Add-Content -LiteralPath $path_log -Encoding Default
|
||||
"$(($middle_date).ToString("[yyyy-MM-dd HH:mm:ss.ffff]")) | TotalMilliseconds :$(($middle_date - $actual_date).TotalMilliseconds)" | Add-Content -LiteralPath $path_log -Encoding Default
|
||||
"$(($middle_date).ToString("[yyyy-MM-dd HH:mm:ss.ffff]")) | Zaczynam kasowanie folderów..." | Add-Content -LiteralPath $path_log -Encoding Default
|
||||
|
||||
# Rozpoczęcie kasowania folderów od końca.
|
||||
$array_folder_list = Get-ChildItem -LiteralPath $path_tmp
|
||||
[array]$array_folder_list = $array_folder_list | Sort-Object name -Descending
|
||||
for ($i = 0; $i -lt $array_folder_list.Count; $i++) {
|
||||
[array]$array_stronicowanie = Import-Csv -LiteralPath "$($array_folder_list[$i].FullName)" -Encoding Default
|
||||
"$((Get-Date).ToString("[yyyy-MM-dd HH:mm:ss.ffff]")) | Procesuję plik `"$($array_folder_list[$i].FullName)`" z $($array_folder_list.count)" | Add-Content -LiteralPath $path_log -Encoding Default
|
||||
for ($ii = (($array_stronicowanie.Count)-1); $ii -ge 0; $ii--) {
|
||||
# weryfikacja czy folder jest pusty
|
||||
try {
|
||||
$weryfikacja = Get-ChildItem -LiteralPath "$($array_stronicowanie[$ii].FullName)" | Select-Object -First 1 -ErrorAction Stop
|
||||
} catch {
|
||||
$weryfikacja = "error"
|
||||
}
|
||||
# kasowanie folderu
|
||||
if ((($weryfikacja.count) -eq 0)) {
|
||||
try {
|
||||
Remove-Item -LiteralPath "$($array_stronicowanie[$ii].FullName)" -ErrorAction Stop
|
||||
$l_folder++
|
||||
} catch {
|
||||
"$((Get-Date).ToString("[yyyy-MM-dd HH:mm:ss.ffff]")) | Nie udało się skasować katalogu: `"$($array_stronicowanie[$ii].FullName)`" | // $($array_folder_list[$i].FullName) // $i // $ii // | Bład: $($error[0])" | Add-Content -LiteralPath $path_log -Encoding Default
|
||||
}
|
||||
} elseif ($weryfikacja -eq "error") {
|
||||
"$((Get-Date).ToString("[yyyy-MM-dd HH:mm:ss.ffff]")) | Nie udało się uzyskać dostępu do katalogu: `"$($array_stronicowanie[$ii].FullName)`" | // $($array_folder_list[$i].FullName) // $i // $ii // | Bład: $($error[0])" | Add-Content -LiteralPath $path_log -Encoding Default
|
||||
}
|
||||
}
|
||||
$array_stronicowanie = @()
|
||||
}
|
||||
$end_date = Get-Date
|
||||
"$(($end_date).ToString("[yyyy-MM-dd HH:mm:ss.ffff]")) | Kasowanie folderów zakończono po..." | Add-Content -LiteralPath $path_log -Encoding Default
|
||||
"$(($end_date).ToString("[yyyy-MM-dd HH:mm:ss.ffff]")) | Days :$(($end_date - $middle_date).Days)" | Add-Content -LiteralPath $path_log -Encoding Default
|
||||
"$(($end_date).ToString("[yyyy-MM-dd HH:mm:ss.ffff]")) | Hours :$(($end_date - $middle_date).Hours)" | Add-Content -LiteralPath $path_log -Encoding Default
|
||||
"$(($end_date).ToString("[yyyy-MM-dd HH:mm:ss.ffff]")) | Minutes :$(($end_date - $middle_date).Minutes)" | Add-Content -LiteralPath $path_log -Encoding Default
|
||||
"$(($end_date).ToString("[yyyy-MM-dd HH:mm:ss.ffff]")) | Seconds :$(($end_date - $middle_date).Seconds)" | Add-Content -LiteralPath $path_log -Encoding Default
|
||||
"$(($end_date).ToString("[yyyy-MM-dd HH:mm:ss.ffff]")) | Milliseconds :$(($end_date - $middle_date).Milliseconds)" | Add-Content -LiteralPath $path_log -Encoding Default
|
||||
"$(($end_date).ToString("[yyyy-MM-dd HH:mm:ss.ffff]")) | Ticks :$(($end_date - $middle_date).Ticks)" | Add-Content -LiteralPath $path_log -Encoding Default
|
||||
"$(($end_date).ToString("[yyyy-MM-dd HH:mm:ss.ffff]")) | TotalDays :$(($end_date - $middle_date).TotalDays)" | Add-Content -LiteralPath $path_log -Encoding Default
|
||||
"$(($end_date).ToString("[yyyy-MM-dd HH:mm:ss.ffff]")) | TotalHours :$(($end_date - $middle_date).TotalHours)" | Add-Content -LiteralPath $path_log -Encoding Default
|
||||
"$(($end_date).ToString("[yyyy-MM-dd HH:mm:ss.ffff]")) | TotalMinutes :$(($end_date - $middle_date).TotalMinutes)" | Add-Content -LiteralPath $path_log -Encoding Default
|
||||
"$(($end_date).ToString("[yyyy-MM-dd HH:mm:ss.ffff]")) | TotalSeconds :$(($end_date - $middle_date).TotalSeconds)" | Add-Content -LiteralPath $path_log -Encoding Default
|
||||
"$(($end_date).ToString("[yyyy-MM-dd HH:mm:ss.ffff]")) | TotalMilliseconds :$(($end_date - $middle_date).TotalMilliseconds)" | Add-Content -LiteralPath $path_log -Encoding Default
|
||||
"$(($end_date).ToString("[yyyy-MM-dd HH:mm:ss.ffff]")) | Podliczenie całości..." | Add-Content -LiteralPath $path_log -Encoding Default
|
||||
"$(($end_date).ToString("[yyyy-MM-dd HH:mm:ss.ffff]")) | Days :$(($end_date - $actual_date).Days)" | Add-Content -LiteralPath $path_log -Encoding Default
|
||||
"$(($end_date).ToString("[yyyy-MM-dd HH:mm:ss.ffff]")) | Hours :$(($end_date - $actual_date).Hours)" | Add-Content -LiteralPath $path_log -Encoding Default
|
||||
"$(($end_date).ToString("[yyyy-MM-dd HH:mm:ss.ffff]")) | Minutes :$(($end_date - $actual_date).Minutes)" | Add-Content -LiteralPath $path_log -Encoding Default
|
||||
"$(($end_date).ToString("[yyyy-MM-dd HH:mm:ss.ffff]")) | Seconds :$(($end_date - $actual_date).Seconds)" | Add-Content -LiteralPath $path_log -Encoding Default
|
||||
"$(($end_date).ToString("[yyyy-MM-dd HH:mm:ss.ffff]")) | Milliseconds :$(($end_date - $actual_date).Milliseconds)" | Add-Content -LiteralPath $path_log -Encoding Default
|
||||
"$(($end_date).ToString("[yyyy-MM-dd HH:mm:ss.ffff]")) | Ticks :$(($end_date - $actual_date).Ticks)" | Add-Content -LiteralPath $path_log -Encoding Default
|
||||
"$(($end_date).ToString("[yyyy-MM-dd HH:mm:ss.ffff]")) | TotalDays :$(($end_date - $actual_date).TotalDays)" | Add-Content -LiteralPath $path_log -Encoding Default
|
||||
"$(($end_date).ToString("[yyyy-MM-dd HH:mm:ss.ffff]")) | TotalHours :$(($end_date - $actual_date).TotalHours)" | Add-Content -LiteralPath $path_log -Encoding Default
|
||||
"$(($end_date).ToString("[yyyy-MM-dd HH:mm:ss.ffff]")) | TotalMinutes :$(($end_date - $actual_date).TotalMinutes)" | Add-Content -LiteralPath $path_log -Encoding Default
|
||||
"$(($end_date).ToString("[yyyy-MM-dd HH:mm:ss.ffff]")) | TotalSeconds :$(($end_date - $actual_date).TotalSeconds)" | Add-Content -LiteralPath $path_log -Encoding Default
|
||||
"$(($end_date).ToString("[yyyy-MM-dd HH:mm:ss.ffff]")) | TotalMilliseconds :$(($end_date - $actual_date).TotalMilliseconds)" | Add-Content -LiteralPath $path_log -Encoding Default
|
||||
"$((Get-Date).ToString("[yyyy-MM-dd HH:mm:ss.ffff]")) | Skasowano: $l_plik plików" | Add-Content -LiteralPath $path_log -Encoding Default
|
||||
"$((Get-Date).ToString("[yyyy-MM-dd HH:mm:ss.ffff]")) | Skasowano: $l_folder folderów" | Add-Content -LiteralPath $path_log -Encoding Default
|
||||
try {
|
||||
Remove-Item -LiteralPath $path_tmp -Recurse | Out-Null
|
||||
"$((Get-Date).ToString("[yyyy-MM-dd HH:mm:ss.ffff]")) | Skasowano pliki tymczasowe z `"$path_tmp`"" | Add-Content -LiteralPath $path_log -Encoding Default
|
||||
} catch {
|
||||
"$((Get-Date).ToString("[yyyy-MM-dd HH:mm:ss.ffff]")) | Nie udało się skasować plików tymczasowych z: `"$path_tmp`"" | Add-Content -LiteralPath $path_log -Encoding Default
|
||||
}
|
||||
"$((Get-Date).ToString("[yyyy-MM-dd HH:mm:ss.ffff]")) | Zamykam" | Add-Content -LiteralPath $path_log -Encoding Default
|
Loading…
x
Reference in New Issue
Block a user