Содержание

Справочная система "Кодекс"

«Кодекс» обновляется как «Гарант» (приходит курьер с диском), только ещё больше движений руками. Так как надоело каждый раз делать одно и то же, написал скрипт 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

FIXME

$src = \\admin3\f$\Base
$dst = C:\Kodeks\Base
# Копирует файлы из нескольких каталогов в один,
# причём только те, которые уже существуют в папке назначения
gci $src -Recurse -Directory | select -ExpandProperty FullName | foreach {robocopy "$_" "$dst" /XL}

Дополнительно

Админский веб-интерфейс: http://kodeks-server:8080/admin, подключенные базы проверяются по пути Каталоги → /docs/ → кнопка «Состав БД».

Брошенный скрипт CMD

Копировать с исключениями в стандартной поставке может только xcopy, а она принимает на вход только списки файлов и у неё есть проблемы с интерпретацией длинных путей с пробелами. Оставил здесь, потому что есть интересные вещи, типа фильтра вывода даты.

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