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