Инструменты пользователя

Инструменты сайта


progs:codex

Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Предыдущая версия справа и слеваПредыдущая версия
Следующая версия
Предыдущая версия
progs:codex [04.04.2019 13:51] – [Скрипт обновления] viacheslavprogs:codex [30.07.2024 19:21] (текущий) – внешнее изменение 127.0.0.1
Строка 1: Строка 1:
 +===== Справочная система "Кодекс" =====
 +"Кодекс" обновляется как "Гарант" (приходит курьер с диском), только ещё больше движений руками. Так как надоело каждый раз делать одно и то же, написал скрипт Powershell.
  
 +==== Скрипт обновления ====
 +Скрипт надо запускать на сервере, где установлен Кодекс. Идея в том, что диск с обновлениями втыкается в компьютер админа, и с него по сети копируются обновления на сервер.
 +
 +<code powershell>
 +$currentyear = (Get-Date -Format yyyy)
 +$currentmonth = (Get-Date -Format MM)
 +$usbdisk = '\\admin3\d$'
 +$usbbases = "$usbdisk\Base1636"
 +$usboperup = "$usbbases\Operup"
 +$usbreports = "$usbdisk\Otchet\$currentyear\$currentmonth"
 +$kodeks = 'C:\Kodeks\Kodeks-Intranet'
 +$kodeksbases = "$kodeks\Base"
 +$kodeksoperup = "$kodeks\Operup"
 +$reports = 'C:\Reports'
 +$exclude = @('7226.db6','7694.db6','8143.db6')
 +
 +# Загрузить модуль для копирования файлов с прогресс-баром
 +Import-Module BitsTransfer
 +
 +# Остановить работу сервера
 +Stop-Process -Name kserver -Force -Confirm:$false
 +
 +# Подождать 10 секунд, чтобы файлы успели разблокироваться
 +Start-Sleep -Seconds 10
 +
 +# Очистить Operup, скопировать новый со съёмного диска
 +Remove-Item $kodeksoperup\* -Force -Confirm:$false
 +# BITS используется, чтобы показывался прогресс-бар
 +Start-BitsTransfer -Source $usboperup\* -Destination $kodeksoperup -Description "Копирование новых файлов Operup" -DisplayName "Operup copying"
 +# Немного колхозный вариант, где показываются проценты копирования каждого файла:
 +# cmd /c copy /z $usboperup\* $kodeksoperup
 +# Если прогресс-бар не нужен вообще:
 +# Copy-Item -Path $usboperup\* -Destination $kodeksoperup
 +
 +# Скопировать базы со съёмного диска, исключая некоторые базы
 +Get-ChildItem $usbbases -Exclude $exclude | Start-BitsTransfer -Source { $_ } -Destination $kodeksbases -Description "Копирование новых баз" -DisplayName "Bases copying"
 +# Немного колхозный вариант, где показываются проценты копирования каждого файла (имена файлов показываться не будут):
 +# Get-ChildItem $usbbases -Exclude $exclude | where { ! $_.PSIsContainer } | %{cmd /c copy /z $_ $kodeksbases} # для Powershell 2.0 (Windows 2003)
 +# Get-ChildItem $usbbases -File -Exclude $exclude | %{cmd /c copy /z $_ $kodeksbases} # для Powershell 3.0 и выше
 +# Если прогресс-бар не нужен вообще:
 +# Get-ChildItem $usbbases -Exclude $exclude | where { ! $_.PSIsContainer } | Copy-Item -Destination $kodeksbases -Force -Confirm:$false # для Powershell 2.0 (Windows 2003)
 +# Get-ChildItem $usbbases -File -Exclude $exclude | Copy-Item -Destination $kodeksbases -Force -Confirm:$false # для Powershell 3.0 и выше
 +
 +# Сделать папку на съёмном диске для отчётов
 +New-Item -Path $usbreports -type directory
 +
 +# Запустить сервер
 +Start-Process "$kodeks\kserver.exe"
 +
 +# Пауза, чтобы выгрузить отчёт из интерфейса Кодекса, проверить, как подключились базы и т. п.
 +(Read-Host "Выгрузите отчёт в папку $reports, затем нажмите клавишу 'Ввод', чтобы скопировать его на съёмный диск")
 +
 +# Перенести отчёт на съёмный диск
 +Move-Item -Path "$reports\*.zip" -Destination $usbreports
 +
 +</code>
 +
 +FIXME
 +<code powershell>
 +$src = \\admin3\f$\Base
 +$dst = C:\Kodeks\Base
 +# Копирует файлы из нескольких каталогов в один,
 +# причём только те, которые уже существуют в папке назначения
 +gci $src -Recurse -Directory | select -ExpandProperty FullName | foreach {robocopy "$_" "$dst" /XL}
 +</code>
 +==== Дополнительно ====
 +Админский веб-интерфейс: http://kodeks-server:8080/admin, подключенные базы проверяются по пути Каталоги -> /docs/ -> кнопка "Состав БД".
 +
 +==== Брошенный скрипт CMD ====
 +Копировать с исключениями в стандартной поставке может только xcopy, а она принимает на вход только списки файлов и у неё есть проблемы с интерпретацией длинных путей с пробелами. Оставил здесь, потому что есть интересные вещи, типа фильтра вывода даты.
 +
 +<code dos>
 +SET year=%date:~6,4%
 +SET month=%date:~3,2%
 +SET usbdisk="\\admin3\d$"
 +SET bases="C:\Kodeks\Kodeks-Intranet\Base"
 +SET operup="C:\Kodeks\Kodeks-Intranet\Operup"
 +SET reports="C:\Reports"
 +
 +del %operup%\* -f
 +copy "%usbdisk%\Base1636\Operup\*" %operup%
 +
 +xcopy "%usbdisk%\Base1636" "\\kodeks-server\c$\Kodeks\Kodeks-Intranet\Base" /exclude:%reports%\exclusions.txt /y
 +
 +mkdir %usbdisk%\%year%\%month%
 +move /y %reports%\*.zip %usbdisk%\Otchet
 +</code>

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki