В этом скрипте используется работа из 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)
Может быть выложишь прям сюда текст скрипта поглядеть?
Да. это былобы очень любопытно
Да. это было-бы очень любопытно
Модераторы вроде не против, добавил в текст скрипт
может, на vbs/js проще пример подать?
(5) это зависит от ОС и от пишущего
l(5) echo77, (6) cool.vlad4, да-да, конечно. Не помню почему я на PS тогда писал, видимо были причины, давно уже это было, работает в данный момент уже больше года или даже двух на Windows 2003 Server, запускает планировщиком обмен каждые 20 минут по трем узлам обмена. На VBS вроде довольно много попадалось разных скриптов в сети, тут уж опубликовал тот пример, который у меня был 🙂
спасибо, инетресный механизм. добавлю в избранное )
Посмотрим.
Кучу всего нарыл, может и это попробую 🙂
Автор, спасибо, поставил Вам «+».
Отдельное спасибо за избавление от «чёрного окошка».