Данный скрипт запускает chdbfl, вводит путь к базе данных, ставит флажок «Исправлять обнаруженные ошибки» и нажимает кнопку «Выполнить». Дождаться завершения и нажать кнопку «Закрыть» пользователь должен самостоятельно.
Скрипт предназначен для запуска chdbfl на компьютерах, на которых установлена платформа 1С 8.2, но Вы легко можете изменить путь расположения chdbfl самостоятельно.
Текст скрипта:
[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.VisualBasic")
function Send-Keys ([string]$Window,[int]$Interval=50) #Устанавливаем аргументы и значение по умолчанию для $interval
{
begin #Блок begin выполняется 1 раз в начале скрипта
{
$shell = new-object -com WScript.Shell #Создаем объект WScript.Shell
$Comp = new-object Microsoft.VisualBasic.Devices.Computer
if ($window) #Если переменная $window не пуста
{
write-host "Waiting for window '$Window'" #Пишем на консоль состояние
while (!$shell.AppActivate($Window)) #Пока не активируем указанное окно...
{
start-sleep -milliseconds $Interval #...Ждем заданное время
}
}
}
process #Блок process выполняется для каждого объекта пришедшего через конвеер |, текущий объект доступен в переменной $_
{
$Comp.KeyBoard.SendKeys($_,$true)
start-sleep -milliseconds $Interval #Ждем
}
}
if (Test-Path -path "C:Program Files (x86)1cv82")
{
$PathTo1C = "C:Program Files (x86)1cv82";
}
else
{
$PathTo1C = "C:Program Files1cv82";
}
$Version1C = (Get-Command ($PathTo1C+"common1cestart.exe")).FileVersionInfo.FileVersion;
$xpath = "C:InfoBase1cv8.1cd";
$app = start-process ($PathTo1C+$Version1C+"inchdbfl.exe");
$app;
$xpath,"{TAB}","{+}","{TAB}", "{TAB}", "{ENTER}" | Send-Keys "Проверка физической целостности файла БД"
Обновление от 22.11.2013: необходимо, чтобы путь к базе данных не содержал символов кириллицы, иначе они будут заменены на абракадабры. Благодаря подсказке Serj1C, теперь путь к базе можеть содержать и кириллицу.
Так же можно создать ярлычок на рабочий стол с указанием базы: powershell.exe <ПутьКСкрипту> <ПолноеИмяФайлаБазыДанных>
Тогда объявление переменной $xpath будет иметь вид: $xpath = $args[0];
Победил проблему с русскими буквами:
Показать
Если часто приходится запускать chdbfl — это ненормально.
(2) DAnry, согласен, но бывают такие ситуации, когда выявить причину, из-за которой приходится прибегать к chdbfl, не получается.
Но это же не работа. В таком случае большая вероятность, что база рухнет и её не поднимешь chdbfl. Слишком большой риск.
(2) Это так, но что если у вас 100 баз на 10 серверах и все нужно протестить? Будете вручную везде везде запускать и указывать базы? И к то му же эот для профилактики неплохо — точно будеш знать что тут все в порядке.
(0) Я кстати тут в аналогичной разработкеЗапуск тестирования БД из командной строки. задавал вопрос автору как получить результат без визуального контроля — чтобы текст из окна возвращался, обещал подумать, но пока глухо.
Было-бы неплохо авторам что то придумать иначе толку от таких поделок только 50%, т.к. ккак я говорил уже проверять результат всех проверок очень сложно.