Перемещение файлов в архив 1-дневного возраста с помощью Powershell - PullRequest
0 голосов
/ 07 июня 2018

Я хочу автоматизировать процесс архивирования (включая архивирование и удаление) только за предыдущий день.У меня есть скрипт, который запускается каждый день и который выполняет архив, но я могу установить его только на несколько дней, выбор только одного дня все еще остается проблемой.

Я установил пару фиксированных переменных ($archiveyear, $archivemonth, $archiveday), которые фактически позволяют мне архивировать в день, но это мне нужно менять каждый день вручную.

$ArchiveYear = "2018"
$ArchiveMonth = "06"
$ArchiveDay = "06"

$SourcePath = "C:\aa\bb\x"
$TargetPath = "C:\ab"
$YourDirToCompress = "C:\aa\bb\$ArchiveYear\$ArchiveMonth\$ArchiveDay"
$ZipFileResult = "C:\TestDestination\$ArchiveDay$ArchiveMonth.zip"

Get-ChildItem $YourDirToCompress -Directory  | 
    #where { $_.Name -notin $DirToExclude} | 
Compress-Archive -DestinationPath $ZipFileResult -Update
$Days = "1"
$LogPath = "C:\Temp" 
$Date = Get-Date -format yyyy-MM-dd_HH-mm 
$TargetFolder = "$TargetPath\$Date"
$LogFile = "$LogPath\ArchiveLog-$date.txt"
$TargetZipFile = "$TargetPath\$Date.zip"

$Activity = "Move files older than $Days days from $SourcePath to $TargetFolder"
Write-Verbose $Activity

$OldFiles = Get-Childitem -Path $SourcePath -recurse | Where-Object {$_.LastWriteTime -lt (get-date).AddDays( - $days)} 
$Total = $Oldfiles.Count
$Current = 0
$OldFiles | ForEach { 
    $Current ++
    $Filename = $_.fullname 
    Write-Progress -Activity $Activity -Status $FileName -PercentComplete ($Current / $Total * 100)    
    $Split = $FileName -split '\\'
    $DestFile = $split[1..($split.Length - 1)] -join '\' 
    $DestFile = "$TargetFolder\$DestFile"

    Try { 
        $null = New-Item -Path  $DestFile -Type File -Force
        $Null = Move-Item -Path  $FileName -Destination $DestFile -Force -ErrorAction:SilentlyContinue 
        "Successfully moved $filename to $targetfolder" | add-content $LogFile 
    } 
    Catch { 
        $Err = $_.Exception.Message
        Write-Error $Err
        "Error moving $filename`: $Err " | add-content $LogFile
    } 
}

1 Ответ

0 голосов
/ 07 июня 2018

Если я понял вопрос, вы хотите, чтобы скрипт вычислял дату вчерашнего дня, а не обновлял вручную $ArchiveYear \ $ArchiveMonth \ $ArchiveDay каждый раз, когда вы запускаете \ планируете скрипт?

Если так:

$Days = "1"
$yesterday = (Get-Date).AddDays(-$Days)

[string]$ArchiveYear = $yesterday.Year
[string]$ArchiveMonth = $yesterday.Month
[string]$ArchiveDay = $yesterday.Day
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...