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ářů