Hogyan készíts biztonsági mentést a fájljaidról egy egyszerű PowerShell szkripttel

Képzelje el a legrosszabbat: a számítógépe hirtelen felmondja a szolgálatot, egy vírus támadja meg a rendszert, vagy véletlenül töröl valami pótolhatatlant. Mi történne a sokéves családi fotóval, a fontos dokumentumokkal, a munkahelyi projektekkel? A gondolat is szorongató, nemde? Éppen ezért a biztonsági mentés nem csupán egy opció, hanem alapvető szükséglet a digitális korban. Ebben a cikkben megmutatjuk, hogyan hozhat létre egy egyszerű, mégis hatékony PowerShell szkriptet, amellyel automatizálhatja fájljainak mentését, így soha többé nem kell aggódnia az adatvesztés miatt.

Miért éppen PowerShell a biztonsági mentéshez?

A Windows operációs rendszerek beépített eszköze, a PowerShell egy rendkívül erőteljes parancssori felület és szkriptnyelv, amely szinte bármilyen rendszeradminisztrációs feladat elvégzésére képes. Miért ideális választás a fájlok mentéséhez?

  • Natív és Elérhető: Nincs szükség harmadik féltől származó szoftverek telepítésére, a PowerShell minden modern Windows rendszeren alapból megtalálható.
  • Automatizálás: A szkriptek futtathatók ütemezetten, így a mentés teljesen automatikusan elvégezhető, Önnek nem kell rá gondolnia.
  • Rugalmasság és Testreszabhatóság: A PowerShell szinte korlátlan lehetőséget biztosít a mentési folyamat finomhangolására, legyen szó specifikus fájlok kizárásáról, naplózásról vagy értesítésekről.
  • Beépített robusztus eszközök: A PowerShell kiválóan együttműködik a Windows beépített, nagy teljesítményű fájlkezelő eszközeivel, mint például a Robocopy, amely kifejezetten nagy méretű és összetett mentési feladatokhoz lett tervezve.

A biztonsági mentés alapjai: Amit tudnia kell

Mielőtt belevágnánk a szkriptelésbe, érdemes tisztázni néhány alapvető fogalmat:

  • Forrás: Azok a mappák vagy meghajtók, amelyeket menteni szeretne (pl. Dokumentumok, Képek, C:UsersÖnNeve).
  • Cél: A hely, ahová a mentett adatok kerülnek. Ez lehet egy külső merevlemez, egy hálózati meghajtó (NAS), vagy akár egy felhőalapú tárhely, ha azt meghajtóként tudja csatlakoztatni (bár a felhő mentéshez általában specifikusabb megoldások ajánlottak).
  • Gyakoriság: Milyen gyakran szeretné elvégezni a mentést? Naponta, hetente, havonta? Ez attól függ, milyen gyakran változnak az adatai.
  • Megőrzési politika (Retention Policy): Meddig szeretné megőrizni a régi mentéseket? Érdemes meghatározni, hány korábbi verziót szeretne megtartani, hogy helyet takarítson meg.

Ebben a cikkben elsősorban az ún. „teljes” vagy „tükör” mentésre fókuszálunk, ahol a forrásmappa teljes tartalmát átmásoljuk a célmappába, szinkronizálva azt. Erre a feladatra a Robocopy (Robust File Copy) a legideálisabb eszköz.

Felkészülés a szkriptelésre

Mire lesz szüksége?

  1. Egy Windows operációs rendszerrel futó számítógépre (Windows 7/8/10/11 vagy Windows Server).
  2. Alapvető ismeretekre a PowerShell használatáról (bár a cikk lépésről lépésre végigvezet mindenen).
  3. Egy célmeghajtóra a mentések számára (pl. külső HDD, USB pendrive, hálózati meghajtó). Győződjön meg róla, hogy elegendő szabad hellyel rendelkezik!

Mindenekelőtt nyisson egy PowerShell ablakot (keresse meg a Start menüben a „PowerShell” kifejezésre, és futtassa rendszergazdaként a maximális jogosultságok biztosításához, bár a mentés futhat normál felhasználóként is, ha vannak írási jogai a célmappába).

A szkript építése lépésről lépésre

Most nézzük meg, hogyan építjük fel a biztonsági mentés szkriptünket.

1. Változók definiálása: Forrás és Cél

Első lépésként határozzuk meg azokat a mappákat, amelyeket menteni szeretnénk, és azt a helyet, ahová a mentés kerül.


# --- Konfiguráció ---
$ForrasMappak = @(
    "C:UsersAzEnNevemDocuments",
    "C:UsersAzEnNevemPictures",
    "D:MunkaProjektek"
)
$CelMappaAlap = "E:Backupok" # Változtassa meg a saját célútvonalára!
$MentettNapokSzama = 7 # Hány napig őrizze meg a mentéseket
$LogFajlUtvonal = "C:LogsBackupLog.txt" # A naplófájl helye
$ExcludeFolders = @("C:UsersAzEnNevemDocumentsTemp", "C:UsersAzEnNevemPicturesSzemetes") # Kizárandó mappák
$ExcludeFiles = @("*.tmp", "*.bak") # Kizárandó fájlok minták
# --- Konfiguráció Vége ---

Fontos: A `$ForrasMappak` egy tömb, így több forrásmappát is megadhat. A `$CelMappaAlap` lesz a fő mappa, amin belül egyedi időbélyeges mappák jönnek létre. Hozza létre a `$LogFajlUtvonal` mappáját előre (pl. `C:Logs`), ha az még nem létezik.

2. Időbélyeg hozzáadása és célmappa létrehozása

Ahhoz, hogy minden mentés egyedi mappába kerüljön, ami megkönnyíti a visszatérést egy korábbi állapotra, adjunk hozzá egy időbélyeget a célmappa nevéhez.


$Idobelyeg = Get-Date -Format "yyyyMMdd_HHmmss"
$AktualisCelMappa = Join-Path -Path $CelMappaAlap -ChildPath "Mentés_$Idobelyeg"

if (-not (Test-Path $AktualisCelMappa)) {
    New-Item -ItemType Directory -Path $AktualisCelMappa | Out-Null
}

Ez létrehozza például az `E:BackupokMentés_20231027_143000` mappát.

3. A Robocopy bevetése: A mentés szíve

A Robocopy a biztonsági mentés valódi motorja. Rendkívül hatékony és megbízható. Íme a kulcsfontosságú opciók, amiket használni fogunk:

  • /MIR: Tükrözi a könyvtárfát. Ez azt jelenti, hogy lemásolja a fájlokat, alkönyvtárakat, és törli azokat a célmappából, amelyek a forrásban már nem léteznek. Ideális a forrás és cél közötti tökéletes szinkronizáláshoz.
  • /E: Lemásolja az alkönyvtárakat, beleértve az üreseket is.
  • /ZB: Újraindítható mód. Ha a másolás félbeszakad, újraindítható. Biztonsági mentési módot is használ (hozzáférés megtagadása esetén), ami hasznos lehet.
  • /DCOPY:T: Másolja a könyvtárak időbélyegét.
  • /COPYALL: Másol mindent: fájladatok, attribútumok, időbélyegek, biztonsági adatok (ACL-ek), tulajdonosi információk, audit információk. (Ez gyakran magában foglalja az `COPY:DATSOU` opciókat is.)
  • /R:1 /W:1: Egy újrapróbálkozás egy másolási hiba esetén, 1 másodperces várakozással. Csökkenti a felesleges próbálkozásokat.
  • /NP: Nem jeleníti meg a másolt fájlok százalékát (csendesebb kimenet).
  • /LOG:$LogFajlUtvonal: Kiírja az eredményt egy naplófájlba. Nagyon fontos a hibaelhárításhoz és a sikeres futtatások ellenőrzéséhez. Az `+` operátorral hozzáfűzhetjük a meglévő logfájlhoz.
  • /XD <mappa1> <mappa2>...: Kizárja a megadott könyvtárakat.
  • /XF <fájl1> <fájl2>...: Kizárja a megadott fájlokat. Használható helyettesítő karakterekkel is (pl. `*.tmp`).

foreach ($ForrasMappa in $ForrasMappak) {
    if (-not (Test-Path $ForrasMappa)) {
        Write-Host "Figyelem: A forrás mappa '$ForrasMappa' nem létezik. Kihagyom." -ForegroundColor Yellow
        continue
    }

    $RobocopyParancs = "robocopy `"$ForrasMappa`" `"$AktualisCelMappa$($ForrasMappa.Split('')[-1])`" /MIR /E /ZB /DCOPY:T /COPYALL /R:1 /W:1 /NP /LOG+`"$LogFajlUtvonal`""

    # Kizárások hozzáadása
    if ($ExcludeFolders.Count -gt 0) {
        $ExcludeFoldersString = ($ExcludeFolders | ForEach-Object { "`"$_`"" }) -join " "
        $RobocopyParancs += " /XD $ExcludeFoldersString"
    }
    if ($ExcludeFiles.Count -gt 0) {
        $ExcludeFilesString = ($ExcludeFiles | ForEach-Object { "`"$_`"" }) -join " "
        $RobocopyParancs += " /XF $ExcludeFilesString"
    }

    Write-Host "Mentés indítása: $ForrasMappa -> $AktualisCelMappa$($ForrasMappa.Split('')[-1])" -ForegroundColor Cyan
    Write-Host "Robocopy parancs: $RobocopyParancs" -ForegroundColor DarkCyan

    try {
        Invoke-Expression $RobocopyParancs | Out-Null
        # A Robocopy visszatérési kódok ellenőrzése
        # 0: Nincsenek hibák, nincsenek változások.
        # 1: Nincsenek hibák, néhány fájl másolva lett.
        # 2: Néhány extra fájl vagy könyvtár található a célhelyen (nem másoltak), de nincsenek hibák.
        # 3: 0 + 1 + 2 (több forrásfájl, néhány extra fájl)
        # 4: Néhány eltérő fájl vagy könyvtár található a célhelyen (különbségek a tartalom/tulajdonságok között).
        # 8: Néhány fájl másolási hiba miatt nem került át.
        # 16: Súlyos hiba.
        if ($LASTEXITCODE -ge 8) {
            Write-Host "Robocopy hibával fejeződött be ($LASTEXITCODE) a(z) '$ForrasMappa' mappa mentése. Ellenőrizze a naplót!" -ForegroundColor Red
        } else {
            Write-Host "A(z) '$ForrasMappa' mappa mentése sikeresen befejeződött ($LASTEXITCODE)." -ForegroundColor Green
        }
    } catch {
        Write-Host "Hiba történt a Robocopy futtatása során a(z) '$ForrasMappa' mappa mentésekor: $($_.Exception.Message)" -ForegroundColor Red
    }
}

4. Régi mentések törlése (Megőrzési politika)

Hosszú távon a sok mentés elfoglalhatja a teljes tárhelyet. Ezért érdemes beállítani egy megőrzési politikát, ami automatikusan törli a régebbi mentéseket.


Write-Host "Régi mentések törlése..." -ForegroundColor Magenta
$KorHatar = (Get-Date).AddDays(-$MentettNapokSzama)

Get-ChildItem -Path $CelMappaAlap -Directory | ForEach-Object {
    if ($_.CreationTime -lt $KorHatar) {
        Write-Host "Törlöm a(z) '$($_.FullName)' régi mentést." -ForegroundColor Yellow
        try {
            Remove-Item -Path $_.FullName -Recurse -Force -ErrorAction Stop
        } catch {
            Write-Host "Hiba történt a mappa törlésekor: $($_.Exception.Message)" -ForegroundColor Red
        }
    }
}
Write-Host "Régi mentések törlése befejezve." -ForegroundColor Magenta

A teljes PowerShell biztonsági mentési szkript

Íme a teljes szkript, amit elmenthet egy `.ps1` kiterjesztésű fájlba (pl. `MyBackupScript.ps1`).


# CIKK CÍME: Mentse meg fájljait: Biztonsági mentés automatizálása PowerShell szkripttel
# CIKK TARTALMA: Egy átfogó, részletes szkript a fájlok biztonsági mentéséhez Robocopy és PowerShell segítségével.

# -----------------------------------------------------------------------------
# Konfigurációs beállítások - Ezeket feltétlenül testreszabnia kell!
# -----------------------------------------------------------------------------

# A mentendő forrás mappák listája. Több mappát is megadhat vesszővel elválasztva.
# Példák: "C:UsersAzEnNevemDocuments", "D:MunkaProjektek"
$ForrasMappak = @(
    "C:UsersTesztFelhasznaloDocuments", # Cserélje le a saját Dokumentumok mappájára
    "C:UsersTesztFelhasznaloPictures"  # Cserélje le a saját Képek mappájára
    #"D:EgyebFontosMappa"               # Ezt a sort kapcsolja ki vagy módosítsa, ha szükséges
)

# Az alapvető célútvonal, ahová a mentések kerülnek.
# Pl. "E:Backupok", "\NAS_IP_CIMEMegosztasBackups"
$CelMappaAlap = "D:MyBackups" # !!! VÁLTOZTASSA MEG EZT AZ ÚTVONALAT !!!

# Hány napig őrizze meg a mentéseket a célmappában.
# Az ennél régebbi mentések automatikusan törlésre kerülnek.
$MentettNapokSzama = 7

# A naplófájl teljes elérési útja. Ide kerül a mentés részletes kimenete.
# Győződjön meg róla, hogy a mappa létezik (pl. C:Logs).
$LogFajlUtvonal = "C:LogsBackupLog.txt" # !!! VÁLTOZTASSA MEG EZT AZ ÚTVONALAT !!!

# Kizárandó mappák listája a forrásból.
# Pl. "C:UsersAzEnNevemDocumentsTemp", "C:UsersAzEnNevemPicturesSzemetes"
$ExcludeFolders = @(
    "temp",     # Ez minden "temp" nevű mappát kizár
    "cache",    # Ez minden "cache" nevű mappát kizár
    "System Volume Information", # Rendszermappák kizárása
    "$ForrasMappak[0]KizartMappa1" # Példa egy specifikus mappára
)

# Kizárandó fájlminták listája. Használhat helyettesítő karaktereket (*.tmp, *.bak).
$ExcludeFiles = @(
    "*.tmp", # Ideiglenes fájlok
    "*.bak", # Biztonsági másolatok (amiket nem mi készítünk)
    "Thumbs.db", # Windows miniatűr gyorsítótár
    "desktop.ini" # Rendszerfájl
)

# -----------------------------------------------------------------------------
# Szkript logikai rész - Itt már ne módosítson, hacsak nem tudja, mit csinál!
# -----------------------------------------------------------------------------

Write-Host "----------------------------------------------------" -ForegroundColor DarkGray
Write-Host "PowerShell Fájl Biztonsági Mentés Indítása" -ForegroundColor Green
Write-Host "Időpont: $(Get-Date)" -ForegroundColor DarkGray
Write-Host "----------------------------------------------------" -ForegroundColor DarkGray

# Létrehozza a naplózási mappát, ha nem létezik.
$LogDir = Split-Path -Parent $LogFajlUtvonal
if (-not (Test-Path $LogDir)) {
    Write-Host "Naplózási mappa létrehozása: $LogDir" -ForegroundColor Yellow
    New-Item -ItemType Directory -Path $LogDir | Out-Null
}

# Hozzáadja az időbélyeget a célmappa nevéhez az egyediség érdekében
$Idobelyeg = Get-Date -Format "yyyyMMdd_HHmmss"
$AktualisCelMappa = Join-Path -Path $CelMappaAlap -ChildPath "Mentés_$Idobelyeg"

# Létrehozza az aktuális időbélyeges célmappát
if (-not (Test-Path $AktualisCelMappa)) {
    Write-Host "Célmappa létrehozása: $AktualisCelMappa" -ForegroundColor Cyan
    try {
        New-Item -ItemType Directory -Path $AktualisCelMappa | Out-Null
    } catch {
        Write-Host "HIBA: Nem sikerült létrehozni a célmappát '$AktualisCelMappa'. Lehet, hogy nincs jogosultsága vagy az elérési út érvénytelen." -ForegroundColor Red
        Write-Host "Leállás. Ellenőrizze a '$CelMappaAlap' útvonalat és a jogosultságokat." -ForegroundColor Red
        exit 1 # Kilép a szkriptből hibával
    }
} else {
    Write-Host "Célmappa már létezik: $AktualisCelMappa" -ForegroundColor DarkYellow
}

Write-Host "`nFájlok másolása Robocopy segítségével..." -ForegroundColor Cyan

# Iterálás a forrásmappákon és a Robocopy futtatása
foreach ($ForrasMappa in $ForrasMappak) {
    # Ellenőrzi, hogy a forrás mappa létezik-e
    if (-not (Test-Path $ForrasMappa)) {
        Write-Host "Figyelem: A forrás mappa '$ForrasMappa' nem létezik. Kihagyom a mentést ehhez a mappához." -ForegroundColor Yellow
        Add-Content -Path $LogFajlUtvonal -Value "$(Get-Date) - FIGYELEM: A forrás mappa '$ForrasMappa' nem létezik. Kihagyva."
        continue # Folytatja a következő forrásmappával
    }

    # Kinyeri a forrásmappa nevét a célmappán belüli almappa számára
    $ForrasMappaNev = ($ForrasMappa -split '[\/]')[-1]
    $RobocopyCelUtvonal = Join-Path -Path $AktualisCelMappa -ChildPath $ForrasMappaNev

    Write-Host "`nIndul a(z) '$ForrasMappa' mentése a(z) '$RobocopyCelUtvonal' helyre." -ForegroundColor Green
    Add-Content -Path $LogFajlUtvonal -Value "`n$(Get-Date) - Indul a(z) '$ForrasMappa' mentése."

    # Robocopy parancs összeállítása
    # /MIR : Tükrözi a könyvtárfát (törli az extra fájlokat a célból)
    # /E   : Másolja az alkönyvtárakat, beleértve az üreseket is
    # /ZB  : Újraindítható mód; biztonsági mentési mód, ha hozzáférés megtagadva
    # /DCOPY:T : Másolja a könyvtárak időbélyegét
    # /COPYALL : Másol minden fájladatot (DATSOU: Adatok, Attribútumok, Időbélyegek, Biztonsági infó, Tulajdonos, Audit infó)
    # /R:1 : Egy újrapróbálkozás hiba esetén
    # /W:1 : 1 másodperces várakozás újrapróbálkozások között
    # /NP  : Nincs folyamat százalék (csendesebb kimenet)
    # /LOG+:  : Hozzáfüzi az eredményt a naplófájlhoz
    # /XD : Kizárja a megadott könyvtárakat
    # /XF : Kizárja a megadott fájlmintákat
    $RobocopyArgs = "/MIR /E /ZB /DCOPY:T /COPYALL /R:1 /W:1 /NP /LOG+`"$LogFajlUtvonal`""

    # Kizárandó mappák hozzáadása
    if ($ExcludeFolders.Count -gt 0) {
        $ExcludeFoldersString = ($ExcludeFolders | ForEach-Object { "`"$_`"" }) -join " "
        $RobocopyArgs += " /XD $ExcludeFoldersString"
    }

    # Kizárandó fájlok hozzáadása
    if ($ExcludeFiles.Count -gt 0) {
        $ExcludeFilesString = ($ExcludeFiles | ForEach-Object { "`"$_`"" }) -join " "
        $RobocopyArgs += " /XF $ExcludeFilesString"
    }

    # Robocopy futtatása
    try {
        # Az `&` operátor a külső programok futtatására szolgál.
        # A `Start-Process -Wait` robusztusabb, de a PowerShell `Invoke-Expression` is működhet
        # vagy közvetlen `& robocopy` hívás.
        # A Robocopy kimenetét elnyomjuk az `Out-Null` segítségével,
        # mivel a `LOG` opció gondoskodik a naplózásról.
        & robocopy "$ForrasMappa" "$RobocopyCelUtvonal" $RobocopyArgs | Out-Null

        # Robocopy visszatérési kód ellenőrzése
        # Lásd: https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/robocopy#return-codes
        # 0 = Nincs hiba.
        # 1 = Néhány fájl másolva lett.
        # 2 = Néhány extra fájl van a célban.
        # 3 = 0+1+2
        # 4 = Néhány eltérő fájl.
        # 8 = Néhány fájl másolási hiba miatt nem került át. (Ez már egy hiba kód!)
        # 16 = Súlyos hiba.
        $RobocopyExitCode = $LASTEXITCODE
        if ($RobocopyExitCode -ge 8) {
            Write-Host "Robocopy hibával fejeződött be ($RobocopyExitCode) a(z) '$ForrasMappa' mappa mentése. Ellenőrizze a naplót!" -ForegroundColor Red
            Add-Content -Path $LogFajlUtvonal -Value "$(Get-Date) - HIBA: Robocopy hibával fejeződött be a(z) '$ForrasMappa' mentése. Visszatérési kód: $RobocopyExitCode"
        } else {
            Write-Host "A(z) '$ForrasMappa' mappa mentése sikeresen befejeződött ($RobocopyExitCode)." -ForegroundColor Green
            Add-Content -Path $LogFajlUtvonal -Value "$(Get-Date) - INFO: A(z) '$ForrasMappa' mappa mentése sikeresen befejeződött. Visszatérési kód: $RobocopyExitCode"
        }
    } catch {
        Write-Host "Súlyos hiba történt a Robocopy futtatása során a(z) '$ForrasMappa' mappa mentésekor: $($_.Exception.Message)" -ForegroundColor Red
        Add-Content -Path $LogFajlUtvonal -Value "$(Get-Date) - SÚLYOS HIBA: Robocopy futtatása közben: $($_.Exception.Message)"
    }
}

Write-Host "`nRégi mentések törlése (régebbi, mint $MentettNapokSzama nap)..." -ForegroundColor Magenta
Add-Content -Path $LogFajlUtvonal -Value "`n$(Get-Date) - Régi mentések törlése indítása..."

# Meghatározza a korhatárt a törléshez
$KorHatar = (Get-Date).AddDays(-$MentettNapokSzama)

# Megkeresi és törli a régi mentési mappákat
Get-ChildItem -Path $CelMappaAlap -Directory | ForEach-Object {
    # Feltételezi, hogy a mentési mappák "Mentés_" előtaggal kezdődnek és időbélyeggel vannak elnevezve
    if ($_.Name -like "Mentés_*" -and $_.CreationTime -lt $KorHatar) {
        Write-Host "Törlöm a(z) '$($_.FullName)' régi mentést (létrehozva: $($_.CreationTime))." -ForegroundColor Yellow
        Add-Content -Path $LogFajlUtvonal -Value "$(Get-Date) - INFO: Törlöm a régi mentést: '$($_.FullName)'"
        try {
            Remove-Item -Path $_.FullName -Recurse -Force -ErrorAction Stop
        } catch {
            Write-Host "HIBA történt a mappa törlésekor: $($_.Exception.Message)" -ForegroundColor Red
            Add-Content -Path $LogFajlUtvonal -Value "$(Get-Date) - HIBA: Mappa törlésekor: '$($_.FullName)' - $($_.Exception.Message)"
        }
    }
}
Write-Host "Régi mentések törlése befejezve." -ForegroundColor Magenta
Add-Content -Path $LogFajlUtvonal -Value "$(Get-Date) - Régi mentések törlése befejezve."

Write-Host "`n----------------------------------------------------" -ForegroundColor DarkGray
Write-Host "PowerShell Fájl Biztonsági Mentés Befejezve" -ForegroundColor Green
Write-Host "Időpont: $(Get-Date)" -ForegroundColor DarkGray
Write-Host "Részletes napló: $LogFajlUtvonal" -ForegroundColor DarkGray
Write-Host "----------------------------------------------------" -ForegroundColor DarkGray

A szkript futtatása és ütemezése

A szkript elmentése

Nyisson egy jegyzettömböt (vagy bármilyen szövegszerkesztőt), másolja be a fenti kódot, és mentse el egy tetszőleges helyre, például `C:ScriptsMyBackupScript.ps1` néven. Fontos a `.ps1` kiterjesztés.

Futtatási házirend (Execution Policy)

A PowerShell biztonsági okokból alapértelmezetten nem engedi futtatni a szkripteket. Ezt ideiglenesen vagy tartósan módosíthatja. Nyisson egy rendszergazdai PowerShell ablakot, és írja be:


Set-ExecutionPolicy RemoteSigned -Scope CurrentUser

Ez lehetővé teszi a saját készítésű szkriptek futtatását. Ha ezt nem szeretné megtenni, a Feladatütemezőben is meg lehet kerülni, ahogy lentebb látni fogja.

Manuális futtatás

A szkript teszteléséhez nyisson egy PowerShell ablakot (nem feltétlenül rendszergazdaként, hacsak a célmappához nem kell rendszergazdai jogosultság), navigáljon a szkriptet tartalmazó mappába (pl. `cd C:Scripts`), majd futtassa a következő paranccsal:


.MyBackupScript.ps1

A szkript automatizálása a Feladatütemezővel (Task Scheduler)

Ez a legfontosabb lépés az automatizálás szempontjából. A Feladatütemező (Task Scheduler) a Windows beépített eszköze a feladatok ütemezésére.

  1. Nyissa meg a Feladatütemezőt: Keresse meg a Start menüben a „Feladatütemező” kifejezésre.
  2. A jobb oldali panelen kattintson az „Alapfeladat létrehozása…” (Create Basic Task…) elemre.
  3. Név: Adja meg a feladat nevét, pl. „Napi Fájlmentés”. Adhat hozzá leírást is. Kattintson a Tovább gombra.
  4. Indító (Trigger): Válassza ki a futtatás gyakoriságát, pl. „Naponta”. Kattintson a Tovább gombra.
  5. Napi indító (Daily Trigger): Adja meg a kezdő dátumot és időt, amikor a szkriptnek futnia kell, pl. éjfélkor vagy hajnalban. Kattintson a Tovább gombra.
  6. Művelet (Action): Válassza a „Program indítása” (Start a program) lehetőséget. Kattintson a Tovább gombra.
  7. Program/szkript: Itt adja meg a PowerShell futtatható fájlát és a szkript paramétereit:
    • Program/szkript: `powershell.exe`
    • Argumentumok hozzáadása (opcionális): `-NoProfile -NonInteractive -ExecutionPolicy Bypass -File „C:ScriptsMyBackupScript.ps1″`
      • `-NoProfile`: Nem tölti be a felhasználói profilokat, gyorsabb.
      • `-NonInteractive`: Nem igényel felhasználói interakciót.
      • `-ExecutionPolicy Bypass`: Megkerüli a futtatási házirendet a szkript futtatásához, ami hasznos, ha nem akarja globálisan módosítani.
      • `-File „C:ScriptsMyBackupScript.ps1″`: Megadja a futtatandó szkript útvonalát. Cserélje le a sajátjára!
  8. Kattintson a Tovább gombra, majd a Befejezés gombra.

A feladat mostantól a beállított időpontban automatikusan futni fog. A futások eredményét a szkript által generált naplófájlban ellenőrizheti!

Testreszabási lehetőségek és legjobb gyakorlatok

  • Több forrás: Ahogy a szkript is mutatja, a `$ForrasMappak` tömbbe tetszőleges számú mappát felvehet.
  • Hálózati meghajtó: A `$CelMappaAlap` beállítható hálózati útvonalra is (pl. `\NAS_IP_CIMEMegosztasBackups`). Győződjön meg róla, hogy a felhasználó, akinek a nevében a feladat fut, rendelkezik írási jogokkal a hálózati megosztásra.
  • E-mail értesítés: Haladó felhasználók integrálhatnak e-mail értesítéseket is a szkriptbe a `Send-MailMessage` parancsmag segítségével, hogy értesítést kapjanak a sikeres vagy sikertelen mentésekről.
  • A 3-2-1 szabály: Bár ez a szkript egy helyre ment, érdemes megfontolni a 3-2-1 biztonsági mentési szabályt: 3 másolat az adatokból, 2 különböző típusú adathordozón, és 1 másolat a telephelyen kívül (pl. felhőben vagy egy másik fizikai helyen).
  • Rendszeres tesztelés: A legfontosabb tanács: TESZTELJE a mentéseit! Próbálja meg visszaállítani néhány fájlt vagy mappát, hogy megbizonyosodjon arról, hogy a mentések sértetlenek és használhatók. Semmi sem rosszabb, mint rájönni a bajban, hogy a mentés hibás volt.

Konklúzió

A fájlok biztonsági mentése egy olyan feladat, amit senki sem szeretne elhanyagolni, de sokan mégis megteszik, mert bonyolultnak vagy időigényesnek találják. A bemutatott egyszerű PowerShell szkripttel azonban könnyedén automatizálhatja ezt a létfontosságú feladatot. Egy jól beállított automatizált mentés nyugalmat biztosít, tudva, hogy adatai biztonságban vannak. Ne várja meg a katasztrófát – tegyen lépéseket még ma, és mentse meg digitális életét!

Leave a Reply

Az e-mail címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük