gifts2017

Запуск chdbfl с параметрами с помощью PowerShell

Опубликовал CHEBURASHKA (cheburashka) в раздел Администрирование - Тестирование и исправление

Что делать если Вам часто приходится запускать chdbfl на разных компьютерах для базы, которая располагается всегда в одном месте? Например, это может быть конфигурация АРМ кассира сети розничных магазинов. Каждый раз подключаться к пользователю или тем более объяснять как это сделать самостоятельно - никаких сил и нервов не хватит. Но можно написать скрипт, поместить его на рабочий стол и отдать пользователю.

Данный скрипт запускает 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 Files\1cv82\";
}
$Version1C = (Get-Command ($PathTo1C+"common\1cestart.exe")).FileVersionInfo.FileVersion;

$xpath = "C:\InfoBase\1cv8.1cd";
$app = start-process ($PathTo1C+$Version1C+"\bin\chdbfl.exe");
$app;
$xpath,"{TAB}","{+}","{TAB}", "{TAB}", "{ENTER}" | Send-Keys "Проверка физической целостности файла БД"
 

 

Обновление от 22.11.2013: необходимо, чтобы путь к базе данных не содержал символов кириллицы, иначе они будут заменены на абракадабры. Благодаря подсказке Serj1C, теперь путь к базе можеть содержать и кириллицу.

Так же можно создать ярлычок на рабочий стол с указанием базы: powershell.exe <ПутьКСкрипту> <ПолноеИмяФайлаБазыДанных>

Тогда объявление переменной $xpath будет иметь вид: $xpath = $args[0];

Скачать файлы

Наименование Файл Версия Размер Кол. Скачив.
script
.ps1 2,93Kb
22.11.13
3
.ps1 2,93Kb 3 Скачать

См. также

Подписаться Добавить вознаграждение

Комментарии

1. Serj (Serj1C) 22.11.13 14:37
Победил проблему с русскими буквами:
[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.VisualBasic")

function Send-Keys ([string]$Window,[int]$Interval=200) #Устанавливаем аргументы и значение по умолчанию для $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 50 #Ждем
    }
}


if (Test-Path -path "C:\Program Files (x86)\1cv82") 
{
	$PathTo1C = "C:\Program Files (x86)\1cv82\";
}
else 
{
	$PathTo1C = "C:\Program Files\1cv82\";
}
$Version1C = (Get-Command ($PathTo1C+"common\1cestart.exe")).FileVersionInfo.FileVersion;

$xpath = "C:\Кассандра\1cv8.1cd";
$app = start-process ($PathTo1C+$Version1C+"\bin\chdbfl.exe");
$app; $xpath,"{TAB}","{+}","{TAB}", "{TAB}", "{ENTER}" | Send-Keys "Проверка физической целостности файла БД"
...Показать Скрыть
CyberWo1f; cheburashka; +2 Ответить
2. DAnry (DAnry) 27.11.13 19:52
Если часто приходится запускать chdbfl - это ненормально.
3. CHEBURASHKA (cheburashka) 27.11.13 19:55
(2) DAnry, согласен, но бывают такие ситуации, когда выявить причину, из-за которой приходится прибегать к chdbfl, не получается.
4. DAnry (DAnry) 27.11.13 20:04
Но это же не работа. В таком случае большая вероятность, что база рухнет и её не поднимешь chdbfl. Слишком большой риск.
5. Олег Шалимов (CaSH_2004) 26.08.16 16:19
(2) Это так, но что если у вас 100 баз на 10 серверах и все нужно протестить? Будете вручную везде везде запускать и указывать базы? И к то му же эот для профилактики неплохо - точно будеш знать что тут все в порядке.

(0) Я кстати тут в аналогичной разработке Запуск тестирования БД из командной строки. задавал вопрос автору как получить результат без визуального контроля - чтобы текст из окна возвращался, обещал подумать, но пока глухо.
Было-бы неплохо авторам что то придумать иначе толку от таких поделок только 50%, т.к. ккак я говорил уже проверять результат всех проверок очень сложно.
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа