powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / [игнор отключен] [закрыт для гостей] / Скрипт архивирования файловых баз
6 сообщений из 6, страница 1 из 1
Скрипт архивирования файловых баз
    #40034847
Накорябал скрипт в PowerShell для архивации - идея простая - подключается к базе, база блокируется средставами БСП и из нее выкидываются юзеры - если это удачно (процесс выгона завершается до истечение таймаута) формируется полный бэкап средствами 1С и файл dt заворачивается в архив через 7zip, если не удачно (процесс блокировки и выпиливания юзеров через БСП провисел весь отпущенный ему период) - формируется "грязная копия" средствами архиватора 7zip. Потом - разблокировка, чтобы утром могли зайти юзеры. Скрипт запускаются ночью по виндовому шедулеру. Базы - типовые БП и ЗУП

Вопрос - почему львиная доля архивов - "грязная копия"? Т.е. пользователи не выгоняются средствами самой конфигурации? Их еще как-то донастраивать надо - типа запретить задавать вопрос о выходе из 1С? Скрипт правильный - если его запускать "руками" - пользователи "выпиливаются", формируется архив. А автоматически - фиговничает? Запускается от имени лок. админа с "высокими привелегиями".

<#
СЛУЖЕБНЫЕ ФУНКЦИИ СКРИПТА
#>
#region

#снять блокировку с базы 1С
function Unlock_IB($_1C_UnlockIB_command)
{
Start-Process -FilePath "$_1C_ThinClient_file" -Wait -ArgumentList $_1C_UnlockIB_command
}

# создать полноценный архив (dt) средствами 1С
function MakeFullBackup($_1C_DumbIB_command, $_7zip_FullArhive_command)
{
#ожидание 2 минуты
Start-Sleep -Seconds 120

Start-Process -FilePath "$_1C_ThickClient_file" -Wait -ArgumentList $_1C_DumbIB_command

Start-Process -FilePath "$_7zip_Current_file" -Wait -ArgumentList $_7zip_FullArhive_command
}

# создать грязный архив (1cd) средствами 7zip
function MakeDirtBackup($_7zip_DirtArhive_command)
{
Start-Process -FilePath "$_7zip_Current_file" -Wait -ArgumentList $_7zip_DirtArhive_command
}

#архивирование файловой базы 1С
function MakeBackup($ArchiveBaseDir, $BaseDir, $Login, $Password)
{
#текущая дата в формате для имен файлов
$CurDate = Get-Date -Format "yyy_MM_dd_HH_mm_ss"

#полный каталог архива базы
$ArchiveBasePath = Join-Path -Path $_1CArchive_dir -ChildPath $ArchiveBaseDir

#файл логировая работы данного скрипта
$JobLog_file = Join-Path -Path $ArchiveBasePath -ChildPath "Job_$CurDate.log"

#файл логировая архивации базы средствами 1С
$_1CLog_file = Join-Path -Path $ArchiveBasePath -ChildPath "1C_Backup_$CurDate.log"

#файл 1CD базы 1С
$_1C_1CD_file = Join-Path -Path $BaseDir -ChildPath "1Cv8.1CD"

#файл архива базы средствами 1С
$_1C_IBDumb_file = Join-Path -Path $ArchiveBasePath -ChildPath "$($ArchiveBaseDir)_$($CurDate).dt"

#файл архива 7zip средствами 1С
$_7zip_FullArhive_file = Join-Path -Path $ArchiveBasePath -ChildPath "1C_Backup_$($ArchiveBaseDir)_$($CurDate).zip"

#файл грязного архива 7zip средствами 7zip
$_7zip_DirtArhive_file = Join-Path -Path $ArchiveBasePath -ChildPath "1C_Backup_$($ArchiveBaseDir)_$($CurDate)_Dirt.zip"

#команда блокровки базы 1С средствами БСП
$_1C_LockIB_command = "ENTERPRISE /F""$BaseDir"" /N""$Login"" /P""$Password"" /WA- /AU- /DisableStartupMessages /C ЗавершитьРаботуПользователей"

#команда создания выгрузки базы 1С
$_1C_DumbIB_command = "CONFIG /F""$BaseDir"" /N""$Login"" /P""$Password"" /UCКодРазрешения /Out""$_1CLog_file"" /DumpIB""$_1C_IBDumb_file"""

#команда архивации выгрузки базы 1С средствами 7zip
$_7zip_FullArhive_command = "a -tzip -sdel -y ""$_7zip_FullArhive_file"" ""$_1C_IBDumb_file"""

#команда архивации базы 1С (грязный архив)
$_7zip_DirtArhive_command = "a -tzip -ssw -y ""$_7zip_DirtArhive_file"" ""$_1C_1CD_file"""

#команда снятия блокировки базы 1С средставами БСП
$_1C_UnlockIB_command = "ENTERPRISE /F""$BaseDir"" /N""$Login"" /P""$Password"" /WA- /AU- /CРазрешитьРаботуПользователей /UCКодРазрешения"

#если каталога нет - создаем
If (-Not(Test-Path $ArchiveBasePath))
{
New-Item $ArchiveBasePath -ItemType directory
}

#создание файла логирования работы скрипта

if (-Not(Test-Path $JobLog_file))
{
New-Item $JobLog_file
}

#снять блокировку с базы возможно скрипт уже выполнялся неудачно
Unlock_IB -_1C_UnlockIB_command $_1C_UnlockIB_command

#блокировка базы
Add-Content $JobLog_file -Value "$(Get-Date -Format "dd-MM-yyy HH:mm:ss") - Попытка блокировки базы"

$process = Start-Process -FilePath $_1C_ThinClient_file -PassThru -ArgumentList $_1C_LockIB_command

#ожидаем завершения процесса блокировки 10 минут
Wait-Process $process.Id -Timeout 600

If($process.HasExited)
{
#процесс блокировки завершен успешно - делаем полную копию средствами 1С (dt)

Add-Content $JobLog_file -Value "$(Get-Date -Format "dd-MM-yyy HH:mm:ss") - Полный архив средствами 1С (dt)"

MakeFullBackup -_1C_DumbIB_command $_1C_DumbIB_command -_7zip_FullArhive_command $_7zip_FullArhive_command
}
else
{
#процесс блокировки завис - делаем грязную копию средствами 7zip (1cd)

# снять процесс блокировки
Stop-Process -Id $process.Id

Add-Content $JobLog_file -Value "$(Get-Date -Format "dd-MM-yyy HH:mm:ss") - Грязный архив средствами 7zip (1cd)"

MakeDirtBackup -_7zip_DirtArhive_command $_7zip_DirtArhive_command
}

Add-Content $JobLog_file -Value "$(Get-Date -Format "dd-MM-yyy HH:mm:ss") - Попытка снятия блокировки базы"

#снять блокировку с базы
Unlock_IB -_1C_UnlockIB_command $_1C_UnlockIB_command

Add-Content $JobLog_file -Value "$(Get-Date -Format "dd-MM-yyy HH:mm:ss") - Завершение работы скрипта"
}
#endregion
<#

ОСНОВНОЕ ТЕЛО СКРИПТА
#>
#region

#каталог архивов 1С
$_1CArchive_dir = "C:\1C_Bases\Archiv"

# файл тонкого клиента текущей версии 1С
$_1C_ThinClient_file = Join-Path -Path ${env:ProgramFiles} -ChildPath "1cv8" | Join-Path -ChildPath "8.3.15.1830" | Join-Path -ChildPath "bin" | Join-Path -ChildPath "1cv8c.exe"

# файл толстого клиента текущей версии 1С
$_1C_ThickClient_file = Join-Path -Path ${env:ProgramFiles} -ChildPath "1cv8" | Join-Path -ChildPath "8.3.15.1830" | Join-Path -ChildPath "bin" | Join-Path -ChildPath "1cv8.exe"

Write-Host $_1C_ThinClient_file
Write-Host $_1C_ThickClient_file

# файл архиватора 7zip
$_7zip_Current_file = Join-Path -Path $_1CArchive_dir -ChildPath "7z.exe"

#словарь баз
$Bases = @{}

#список баз: каталог архивов базы | каталог базы
$Bases.Add("БП", "C:\1C_Bases\БП")
$Bases.Add("ЗУП", "C:\1C_Bases\ЗУП")

foreach ($key in $Bases.Keys) {
MakeBackup -ArchiveBaseDir $key -BaseDir $Bases.Item($key) -Login "Админ" -Password "123"
}
#endregion
...
Рейтинг: 0 / 0
Скрипт архивирования файловых баз
    #40035133
Программист 1с
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Время запуска не играет роли? Если днем вручую или автоматом запустить - разница есть?

А если запускать скрипт не от какого то пользователя, а от Вашего имени?

Базы файловые про mssql молчу. Но кстати вариант - а почему не зайти во время запуска задания и не посмотреть что происходит в 1с? (я про ночь и автомат)
...
Рейтинг: 0 / 0
Скрипт архивирования файловых баз
    #40035146
Программист 1с
А если запускать скрипт не от какого то пользователя, а от Вашего имени?


я лок. админ - от себя и запускаю, что руками, что шедуллером


Программист 1с
Но кстати вариант - а почему не зайти во время запуска задания и не посмотреть что происходит в 1с? (я про ночь и автомат)


не понятно что искать. и что может происходить в 2 часа ночи. никто не работает. просто бывает что юзера бросают открытую 1с - блокировка БСП не может закрыть клиента? хотя в современной БП модальных окон ведь нет... где-то допустим болтается диалог выбора базы - но это как может помешать?

может переписать скрипт? сначала kill task по всем 1с (с базами работают только локально на этом ПК), а потом уже блокировка и архивация... чтобы наверняка
...
Рейтинг: 0 / 0
Скрипт архивирования файловых баз
    #40035147
насколько сама блокировка средствами БСП "надежна", ее может что-то сломать, не дать закрыть приложение, если явных активных действий пользователя в момент ее вызова нет. просто запущено несколько клиентов?
...
Рейтинг: 0 / 0
Скрипт архивирования файловых баз
    #40035370
Программист 1с
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А если клиент - просто висит - тоесть он Вышел из программы - но некое фоновое задание осталось и висит под ним.
...
Рейтинг: 0 / 0
Скрипт архивирования файловых баз
    #40035383
Программист 1с
А если клиент - просто висит - тоесть он Вышел из программы - но некое фоновое задание осталось и висит под ним.


ну такое не пофиксишь... попробую просто сносить все клиенты на ПК. Не красиво конечно, но я не вижу особой разницы с "грязными" архивами
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / [игнор отключен] [закрыт для гостей] / Скрипт архивирования файловых баз
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]