gifts2017

Запуск процедуры обмена данными через скрипт в PowerShell (как пример работы из PowerShell с 1С через COM)

Опубликовал Evgeny Sc (JohnySC) в раздел Администрирование - Распределенная БД (УРИБ, УРБД)

В этом скрипте используется работа из PowerShell с 1С через COM, в начале скрипта делается скрытие черного окошка, чтоб оно не висело на экране пока выполняется скрипт.

Полезного тут наверно только метод скрытия окошка скрипта, это весь текст до "$connector = new-object -comobject "V81.COMConnector"", а все что после - это работа с 1С через COM - думаю уже не раз обсуждалось.

Может кому, что и пригодится, скрипт можно вставлять в планировщик например, или кинуть ярлык пользователю, чтоб одним щелчком запускалась заложенная процедура. Удачи всем!

P.S. Текст скрипта для гостей:

#Создаём объект CodeProvider, для выполнения кода c# в нашем сценарии
$cp = new-object Microsoft.CSharp.CSharpCodeProvider
#В этой переменной можно задать параметры для выполнения кода
$cpar = New-Object System.CodeDom.Compiler.CompilerParameters
#Константы задающие действие функции SetWindowPos
$HideWindow = 0x0080
$ShowWindow = 0x0040

#С помощью конструкции "HereString" помещаем в переменную $Code код c#
#объявляющий функцию SetWindowPos
$Code = @"
using System;
using System.Runtime.InteropServices;
namespace Win32API
{
    public class Window
    {
        [DllImport("user32.dll")]
        public static extern bool SetWindowPos(IntPtr hWnd, IntPtr hWndInsertAfter, int x, int y, int cx, int cy, uint uFlags);
    }
}
"@

#Выполняем код c#
$cp.CompileAssemblyFromSource($cpar, $code)

#Получаем указатель (Handle) текущего окна PowerShell, используя специальную переменную $pid
$PSHandle = (Get-Process –id $pid).MainWindowHandle

#Используем объявленную функцию из PowerShell
[Win32API.Window]::SetWindowPos($PSHandle, 0, 0, 0, 0, 0, $HideWindow)

$connector = new-object -comobject "V81.COMConnector"
$connection=$connector.connect("File=""d:\Bases1C\Папка с ИБ""; Usr=""Логин"";Pwd = ""Пароль"";")
$ChangeName="Имя обмена в справочнике"

$cats = [System.__ComObject].InvokeMember("Справочники",[System.Reflection.BindingFlags]::GetProperty,$null,$connection,$null)
$nod = [System.__ComObject].InvokeMember("НастройкиОбменаДанными",[System.Reflection.BindingFlags]::GetProperty,$null,$cats,$null)  
$fnd = [System.__ComObject].InvokeMember("НайтиПоНаименованию",[System.Reflection.BindingFlags]::InvokeMethod,$null,$nod,$ChangeName)  
$ref = [System.__ComObject].InvokeMember("Ссылка",[System.Reflection.BindingFlags]::GetProperty,$null,$fnd,$null) 
$pod=  [System.__ComObject].InvokeMember("ПроцедурыОбменаДанными",[System.Reflection.BindingFlags]::GetProperty,$null,$connection,$null)  
$vodppn=[System.__ComObject].InvokeMember("ВыполнитьОбменДаннымиПоПроизвольнойНастройке",[System.Reflection.BindingFlags]::InvokeMethod,$null,$pod,$ref)  

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

Наименование Файл Версия Размер Кол. Скачив.
Обмен через скрипт в PowerShell.ps1
.ps1 4,10Kb
23.09.11
36
.ps1 4,10Kb 36 Скачать

См. также

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

Комментарии

1. dka80 ~ (dka80) 26.09.11 06:37
Может быть выложишь прям сюда текст скрипта поглядеть?
2. Доржи Балбаров (Angeros) 26.09.11 11:07
Да. это былобы очень любопытно
3. Доржи Балбаров (Angeros) 26.09.11 11:07
Да. это было-бы очень любопытно
4. Evgeny Sc (JohnySC) 26.09.11 12:47
Модераторы вроде не против, добавил в текст скрипт
5. Александр Крынецкий (echo77) 28.09.11 22:23
может, на vbs/js проще пример подать?
6. Ийон Тихий (cool.vlad4) 28.09.11 22:35
(5) это зависит от ОС и от пишущего
7. Evgeny Sc (JohnySC) 29.09.11 11:29
l(5) echo77, (6) cool.vlad4, да-да, конечно. Не помню почему я на PS тогда писал, видимо были причины, давно уже это было, работает в данный момент уже больше года или даже двух на Windows 2003 Server, запускает планировщиком обмен каждые 20 минут по трем узлам обмена. На VBS вроде довольно много попадалось разных скриптов в сети, тут уж опубликовал тот пример, который у меня был :-)
8. Vladimir !!! (java) 11.10.11 21:42
спасибо, инетресный механизм. добавлю в избранное )
9. Иван Иванов (jko) 19.01.12 07:52
Посмотрим.
Кучу всего нарыл, может и это попробую :)
10. Игорь Богданов (avz_1C) 16.11.14 12:25
Автор, спасибо, поставил Вам "+".
Отдельное спасибо за избавление от "чёрного окошка".
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа