Erstellen von Powershell-Skript, eine Datei zu sichern und fügen Sie das Datum

StackOverflow https://stackoverflow.com/questions/3671657

  •  01-10-2019
  •  | 
  •  

Frage

Zur Zeit habe ich eine einzeilige Batchdatei, eine Datei zu sichern. Ich betreibe es manuell, wenn ich eine Datei sichern müssen. Das einzige, was Ich mag würde, um es hinzuzufügen ist das aktuelle Datum. Hier ist, was ich habe:

xcopy / W / Y ACTIVE.DB ACTIVE.DB.BACKUP

die Zieldatei sollte einfach ACTIVE.DB.BACKUP.YYYYMMDD sein. Wie würde ich mich über ein Skript erstellen, die mir einen Doppelklick darauf aus dem Windows Explorer ermöglicht und macht die XCOPY passieren?

War es hilfreich?

Lösung

Sie können Ihre Dateinamen anpassen, indem Sie eine formatierte [datetime]::now im Dateinamen in Powershell Einbettung in etwa so:

xcopy /W /Y ACTIVE.DB "ACTIVE.DB.BACKUP.$([datetime]::now.ToString('yyyy-MM-dd'))"

Wenn die Leitung besetzt und wartbaren fühlt, können Sie es auf mehrere Zeilen Refactoring:

$now = [datetime]::now.ToString('yyyy-MM-dd')
xcopy /W /Y ACTIVE.DB "ACTIVE.DB.BACKUP.$now"

Doppelklick Ausführung zu erhalten, ich in der Regel eine Batch-Datei, die den Powershell-Befehl ausgeführt wird, wie hier beschrieben:

Set up Powershell-Skript für die automatische Ausführung

Andere Tipps

Nur darauf hinweisen, dass Sie diese mit Copy-Item z tun können.

Set-Location $path
Copy-Item ACTIVE.DB "ACTIVE.DB.$(get-date -f yyyyMMdd)" -Force -Confirm

Wenn Sie robuste fahren, dann würde ich robocopy.exe verwenden.

Ich habe gerade eine täglich / wöchentlich / monatlich / Quartals- / Jahres Backup-Skript in Powershell in diesem Monat, und hoffen, dass es hilft.

Dieses DWMQY Backup-Szenario ist ein Quellordner zu einem Datum genannten Zip-Datei zip, dann halten Sie die Reißverschlüsse von:

  • letzten 7 Tagen
  • 4 Wochen (jeweils am Freitag)
  • 6 Monate (der letzten jeden Monat Freitag)
  • 4/4 (der letzte Monat des Quartals)
  • 2 Jahre (das letzte Quartal ist das Jahres).

Ausführen als geplante Aufgabe auf täglicher Basis, bringt es die Reißverschlüsse in einen Zielordner, die auch eine Microsoft Microsoft Onedrive lokalen Ordner vorhanden ist, so auch die Reißverschlüsse der Ferne Microsoft Onedrive Server synchronisierten werden. Diejenigen veraltet (nicht-Freitag täglich oder Nicht-Last-DWMQY) Reißverschlüsse werden an einen nicht fern synchronisierten Ordner verschoben werden.

Es ist 5. März 2016 heute die folgenden Reißverschluss im Zielordner sein sollten:

  • 7 Tage: 160304-160229-160227
  • 4 Wochen: 160304, 160226, 160219,160212
  • 6 Monate: 160226, 160129, 161225, 151127, 151025, 150925
  • 4/4: 151225, 150925,150626,150327
  • 2 Jahre: 151225, 141226

So wird es 23 Zips (weniger tatsächlich seit den dups unter DWMQY), unsere Dateien sind 250 Textdokumente, die nach zippen 0,4 GB ist, so dass er 23 ist * 0,4 = 9,2 GB insgesamt, was weniger ist als Microsoft Onedrive free 15 GB-Quote.

Für große Quelldaten, 7-zip kann dazu verwendet werden, die maximal 16 mil TB zip Größe bietet. Für direkt Backup-Ordner anstelle von Reißverschlüssen, habe nicht versucht. Erraten es ist ein übertragbares Verfahren aus der aktuellen zip Art und Weise.

# Note: there are following paths:
# 1. source path: path to be backed up. 
# 2. target path: current zips stored at, which is also a remote-sync pair's local path.
# 3. moved-to path: outdated zips to be moved in this non-sync'able location.
# 4. temp path: to copy the source file in to avoid zip.exe failing of compressing them if they are occupied by some other process.
# Function declaration
. C:\Source\zipSaveDated\Functions.ps1 
# <1> Zip data
$sourcePath = '\\remoteMachine1\c$\SourceDocs\*'
$TempStorage = 'C:\Source\TempStorage'
$enddate = (Get-Date).tostring("yyyyMMdd")
$zipFilename = '\\remoteMachine2\d$\DailyBackupRemote\OneDrive\DailyBackupRemote_OneDrive\' + $enddate + '_CompanyDoc.zip'
Remove-Item ($TempStorage + '\*') -recurse -Force
Copy-Item $sourcePath $TempStorage -recurse -Force

Add-Type -A System.IO.Compression.FileSystem
[IO.Compression.ZipFile]::CreateFromDirectory($TempStorage, $zipFilename) 

# <2> Move old files
$SourceDir = "\\remoteMachine2\d$\DailyBackupRemote\OneDrive\DailyBackupRemote_OneDrive"
$DestinationDir = "\\remoteMachine2\d$\DailyBackupRemote\bak" # to store files moved out of the working folder (OneDrive)
$KeepDays = 7
$KeepWeeks = 4
$KeepMonths = 6
$KeepQuarters = 4
$KeepYears = 2
# <2.1>: Loop files
$Directory = $DestinationDir
if (!(Test-Path $Directory))
{
    New-Item $directory -type directory -Force
}
$files = get-childitem $SourceDir *.*
foreach ($file in $files) 
{ # L1
    # daily removal will not remove weekly copy, 7 
    If($file.LastWriteTime -lt (Get-Date).adddays(-$KeepDays).date  `
        -and $file.LastWriteTime.DayOfWeek -NotMatch "Friday"  `
        )
        {
        Move-Item $file.fullname $Directory -force
        }
} # L1 >>
$files = get-childitem $SourceDir *.*
foreach ($file in $files) 
{ # L1
    # weekly removal will not remove monthly copy, 4
    If($file.LastWriteTime -lt (Get-Date).adddays(-$KeepWeeks * 7).date  `
        -and (Get-LastFridayOfMonth ($file.LastWriteTime)).Date.ToString("yyyyMMdd") -NotMatch $file.LastWriteTime.Date.ToString("yyyyMMdd")
        )
        {
        Move-Item $file.fullname $Directory -force
        }
} # L1 >>
$files = get-childitem $SourceDir *.*
foreach ($file in $files) 
{ # L1
    # monthly removal will not remove quarterly copy, 6
    If($file.LastWriteTime.Month -lt ((Get-Date).Year - $file.LastWriteTime.Year) * 12 + (Get-Date).Month - $KeepMonths `
        -and $file.LastWriteTime.Month -NotIn 3, 6, 9, 12
        )
        {
        Move-Item $file.fullname $Directory -force
        }
} # L1 >>
$files = get-childitem $SourceDir *.*
foreach ($file in $files) 
{ # L1
    # quarterly removal will not remove yearly copy, 4
    If($file.LastWriteTime.Month -lt ( (Get-Date).Year - $file.LastWriteTime.Year) * 12 + (Get-Date).Month - $KeepQuarters * 3 `
        -and $file.LastWriteTime.Month -NotIn 12
        )
        {
        Move-Item $file.fullname $Directory -force
        }
} # L1 >>
$files = get-childitem $SourceDir *.*
foreach ($file in $files) 
{ # L1
    # yearly removal will just go straight ahead. 2
    If($file.LastWriteTime.Year -lt (Get-Date).Year - $KeepYears )
        {
        Move-Item $file.fullname $Directory -force
        }
} # L1 >>


<Functions.ps1>
function Get-TimesResult3 
    {
    Param ([int]$a,[int]$b)
    $c = $a * $b
    Write-Output $c
    }

function Get-Weekday {
    param(
        $Month = $(Get-Date -format 'MM'),
        $Year = $(Get-Date -format 'yyyy'),
        $Days = 1..5
    )
$MaxDays = [System.DateTime]::DaysInMonth($Year, $Month)
1..$MaxDays | ForEach-Object {
        Get-Date -day $_ -Month $Month -Year $Year |
          Where-Object { $Days -contains $_.DayOfWeek }  
    }
}

function Get-LastFridayOfMonth([DateTime] $d) {    
    $lastDay = new-object DateTime($d.Year, $d.Month, [DateTime]::DaysInMonth($d.Year, $d.Month))
    $diff = ([int] [DayOfWeek]::Friday) - ([int] $lastDay.DayOfWeek)

    if ($diff -ge 0) {
        return $lastDay.AddDays(- (7-$diff))
    }
    else {
        return $lastDay.AddDays($diff)
    }    
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top