Potřebujeme-li kopírovat složky nebo soubory a zároveň zapisovat operaci do logu, můžeme udělat jednoduchý script v powerShellu. Řekněme, že chceme zkopírovat celou složku C:\Pokus na připojený disk s označením L:\ a budeme chtít, aby se logovací soubor vytvořil zde: C:\Temp\Kopirovani-Pokus.log.

# ============
# 1) Proměnné
# ============
$log = "C:\Temp\kopirovani.log"  # cesta k defaultnímu souboru logu.
$sourcePath = "C:\Pokus"
$destPath = "L:\"
$profileLogFile = "C:\Temp\Kopirovani-Pokus.log"


# ============================
# Funkce: Logované kopírování
# ============================
function Log-Copy {
    param (
        [string]$source,
        [string]$destination,
        [string]$log = $logFile  # výchozí je hlavní log
    )
    
    try {
        $destDir = Split-Path $destination -Parent
        if (!(Test-Path $destDir)) {
            New-Item -ItemType Directory -Path $destDir -Force | Out-Null
        }
        Copy-Item -Path $source -Destination $destination -Force -ErrorAction Stop
        [System.IO.File]::AppendAllText($log, "$(Get-Date) - OK: $source -> $destination`n")
        #Add-Content $log "$(Get-Date) - OK: $source -> $destination"
    } catch {
        [System.IO.File]::AppendAllText($log, "$(Get-Date) - CHYBA: $source - $_`n")
        #Add-Content $log "$(Get-Date) - CHYBA: $source - $_"
    }
}

Funkci pak zavoláme následovně:

Log-Copy -source $sourcePath -destination $destPath -log $profileLogFile

Tato funkce se sputí, najde cestu C:\Pokus a zkopíruje všechno co zde najde na disk L:\. Všechno zapíše do souboru Kopirovani-Pokus.log, který vytvoří ve složce C:\Temp

Pokud se z nějakého důvodu nepodaří nějaký soubor zkopírovat, můžeme najít důvod v souboru logu. Do logu se zaznamenávají všechny provedené operace, tedy i ty, které se povedly.


0 komentářů

Napsat komentář

Zástupce avatara

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *