Tonny_Bennet
18-09-2012, 12:25
Здравствуйте.
Пишу скрипт архивирования баз SQL. Хочется сделать, что бы при завершении работы архиватора можно было анализировать код возврата. У 7-zip (http://docs.bugaco.com/7zip/MANUAL/exit_codes.htm) их не много, и фактически меня интересует только один - "0". Если архивация прошла успешно то я удалю исходный файл.
Запускаю процесс при помощи start-process.
Пробовал, использовать $lastexitcode. При запуске скрипта вручную начинают появляться консольные окна 7z.exe, в которых отображается прогресс сжатия в процентах. Если этот процесс доходит до 100% - создаётся нормальный архив и $lastexitcode равен 1. Если прервать процесс архивации - $lastexitcode всё равно равен 1.
#папка в которой лежат подпапки с бекапами
$source_dir = "C:\Backup\"
#папка в которой создаются подпапки с хапакованными бекапами
$backup_dir = "C:\Arh\"
#фильтр файлов с бекапами
$files_filter ="*.bak"
#путь к архиватору
$arhivator = "C:\Program Files\7-Zip\7z.exe"
#смотрим какие подпапки есть в исходной папке с бекапами
$source_dirs = get-childitem -path $source_dir | where-object {$_.PSIsContainer}
#echo $source_dirs
#перебираем все подпапки
foreach($dir in $source_dirs)
{
#получаем имена файлов в текущем каталоге
$filenames = get-childitem -path $source_dir$dir -name -include $files_filter
foreach($filename in $filenames)
{
$substr = $filename.Split("_");
$folder = $substr[0]
$year = $substr[2]
$month = $substr[3]
$curent_dir = $backup_dir
if ($folder -ne $null)
{
$curent_dir = $curent_dir + $folder+ '\'
if ($year -ne $null)
{
$curent_dir = $curent_dir + $year + '\'
if ($month -ne $null)
{
$curent_dir = $curent_dir + $month + '\'
}
}
}
start-process -Wait $arhivator (" a " + ($curent_dir + $filename + ".zip" ) + " " + ($source_dir + $dir + '\' + $filename))
#удаляем файл если создан его архив
if (get-item ($curent_dir + $filename + ".zip") | where-object {$_.exists})
{
#и код возврата равен 0
if ($lastexitcode -eq 0)
{
Remove-Item ($source_dir + $dir + '\' + $filename)
echo $source_dir $dir '\' $filename is deleted - exit: $lastexitcode
}
else
{
echo ($source_dir + $dir + '\' + $filename + "is not deleted - exit:" + $lastexitcode)
}
}
}
}
Подскажите пожалуйста как реализовать проверку кодов возврата?
Пишу скрипт архивирования баз SQL. Хочется сделать, что бы при завершении работы архиватора можно было анализировать код возврата. У 7-zip (http://docs.bugaco.com/7zip/MANUAL/exit_codes.htm) их не много, и фактически меня интересует только один - "0". Если архивация прошла успешно то я удалю исходный файл.
Запускаю процесс при помощи start-process.
Пробовал, использовать $lastexitcode. При запуске скрипта вручную начинают появляться консольные окна 7z.exe, в которых отображается прогресс сжатия в процентах. Если этот процесс доходит до 100% - создаётся нормальный архив и $lastexitcode равен 1. Если прервать процесс архивации - $lastexitcode всё равно равен 1.
#папка в которой лежат подпапки с бекапами
$source_dir = "C:\Backup\"
#папка в которой создаются подпапки с хапакованными бекапами
$backup_dir = "C:\Arh\"
#фильтр файлов с бекапами
$files_filter ="*.bak"
#путь к архиватору
$arhivator = "C:\Program Files\7-Zip\7z.exe"
#смотрим какие подпапки есть в исходной папке с бекапами
$source_dirs = get-childitem -path $source_dir | where-object {$_.PSIsContainer}
#echo $source_dirs
#перебираем все подпапки
foreach($dir in $source_dirs)
{
#получаем имена файлов в текущем каталоге
$filenames = get-childitem -path $source_dir$dir -name -include $files_filter
foreach($filename in $filenames)
{
$substr = $filename.Split("_");
$folder = $substr[0]
$year = $substr[2]
$month = $substr[3]
$curent_dir = $backup_dir
if ($folder -ne $null)
{
$curent_dir = $curent_dir + $folder+ '\'
if ($year -ne $null)
{
$curent_dir = $curent_dir + $year + '\'
if ($month -ne $null)
{
$curent_dir = $curent_dir + $month + '\'
}
}
}
start-process -Wait $arhivator (" a " + ($curent_dir + $filename + ".zip" ) + " " + ($source_dir + $dir + '\' + $filename))
#удаляем файл если создан его архив
if (get-item ($curent_dir + $filename + ".zip") | where-object {$_.exists})
{
#и код возврата равен 0
if ($lastexitcode -eq 0)
{
Remove-Item ($source_dir + $dir + '\' + $filename)
echo $source_dir $dir '\' $filename is deleted - exit: $lastexitcode
}
else
{
echo ($source_dir + $dir + '\' + $filename + "is not deleted - exit:" + $lastexitcode)
}
}
}
}
Подскажите пожалуйста как реализовать проверку кодов возврата?