PDA

Показать полную графическую версию : [решено] Логирование синхронизации папок


rox33
06-12-2012, 12:05
Добрый день, уважаемые!
Веду неравную борьбу с ведением лога при синхронизации папок
Вот скрипт, взял с интернета, доработал чуть-чуть под себя.

function FolderMirror {
param ($source, $dest)

#Сравнение, копирование
$comparedirs = Compare-Object (gci $source) (gci $dest)
if ($comparedirs | Where-Object {$_.SideIndicator -eq ‘<=’}) {
$comparedirs | Where-Object {$_.SideIndicator -eq ‘<=’} | ForEach-Object{Write-Host "Копирую"($_.InputObject).FullName "в" $dest (Get-Date)
Copy-Item ($_.InputObject).FullName -Destination $dest;Write-Output "Копирую"($_.InputObject).FullName "в" $dest (Get-Date) | out-file "c:\result.txt"}
} else {
Write-Host "Нечего копировать. Каталоги одинаковы"
}

#Создание директорий из источника
$files = Get-ChildItem $source
foreach ($file in $files) {
if($file.mode -match “d”) {
write-host "Folder – " $file
if (Test-Path $dest\$file) {
} else {
New-Item $dest\$file -ItemType Directory
}

FolderMirror "$source\$file" "$dest\$file"

} else {

}
}

}

$source = "d:\BCKP_TEST"
$dest = "d:\ttt"

$files = Get-ChildItem $source
foreach ($file in $files) {
if($file.mode -match “d”) {
write-host "Folder – " $file
if (Test-Path $dest\$file) {
} else {
New-Item $dest\$file -ItemType Directory
}
Write-Host "$source\$file" "$dest\$file"
FolderMirror "$source\$file" "$dest\$file"
} else {
FolderMirror $source $dest
}
}

Всё работает хорошо, но лог, собака, пишет только последнюю операцию.
Как заставить его писать всё, что сделано за операцию?
И, в идеале, ДОзаписывать лог после каждого выполнения.

Заранее огромное спасибо за помощь!

Kazun
06-12-2012, 13:03
Используйте robocopy,что гораздо проще и удобнее.

:: Параметры ведения журнала:
::
/L :: Только список - файлы не копируются, не удаляются, не помечаются отметками времени.
/X :: Сообщать обо всех дополнительных файлах, а не только о выбраных.
/V :: Подробный вывод с указанием пропущенных файлов.
/TS :: Включать в вывод метки времени исходных файлов.
/FP :: Включать в вывод полные пути файлов.
/BYTES :: Печатать размеры в байтах.

/NS :: Без размера - не заносить в журнал размер файлов.
/NC :: Без класса - не заносить в журнал классы файлов.
/NFL :: Без списка файлов - не заносить в журнал имена файлов.
/NDL :: Без списка папок - не заносить в журнал имена папок.

/NP :: Без хода процесса - не отображать число скопированных процентов.
/ETA :: Показывать оценку времени окончания копирования файлов.

/LOG:файл :: Записывать состояние в файл журнала (перезаписывать существующий журнал).
/LOG+:файл :: Записывать состояние в файл журнала (добавлять к существующему журналу).

/UNILOG:файл :: Записывать состояние в файл журнала в формате Юникод (перезаписывать существующий журнал).
/UNILOG+:файл :: Записывать состояние в файл журнала в формате Юникод (добавлять к существующему журналу).

/TEE :: Направлять выходные данные в окно консоли и в файл журнала.

/NJH :: Без заголовка задания.
/NJS :: Без сведений о задании.

/UNICODE :: Cостояние вывода в формате Юникод.

register01
29-09-2013, 16:04
Этот же скрипт, но немного доработан, по желанию инициатора дописывает в лог




© OSzone.net 2001-2012