В этом скрипте используется работа из 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 вроде довольно много попадалось разных скриптов в сети, тут уж опубликовал тот пример, который у меня был 🙂
спасибо, инетресный механизм. добавлю в избранное )
Посмотрим.
Кучу всего нарыл, может и это попробую 🙂
Автор, спасибо, поставил Вам «+».
Отдельное спасибо за избавление от «чёрного окошка».