Для запуска команды в окружении удаленного компьютера используем утилиту Марка Русиновича PsExec.exe. Данная утилита сохранена в макете формы обработки. Учетная запись, под которой будет запускаться обработка должна иметь права администратора на удаленной машине.
Описание функции
&НаСервере
Функция ПолучитьЛокальныйПутьСетевойПапкиОСWindows(ИмяСетевойПапки) Экспорт
ЛокальныйПуть = Неопределено;
Попытка
ИмяДляРазбора = СтрЗаменить(ИмяСетевойПапки, "\\", "$$");
Если Прав(ИмяДляРазбора, 1) = "\" Тогда
ИмяДляРазбора = Лев(ИмяДляРазбора, СтрДлина(ИмяДляРазбора) - 1);
КонецЕсли;
ПервыйРазделитель = Найти(ИмяДляРазбора, "\");
Сервер = СтрЗаменить(Лев(ИмяДляРазбора, ПервыйРазделитель - 1), "$$", "\\");
Каталог = Прав(ИмяДляРазбора, СтрДлина(ИмяДляРазбора) - ПервыйРазделитель);
PsExec = РеквизитФормыВЗначение("Объект").ПолучитьМакет("PsExec");
КаталогВременныхФайлов = КаталогВременныхФайлов() + Новый УникальныйИдентификатор() + "\";
СоздатьКаталог(КаталогВременныхФайлов);
ИсполняемыйФайл = КаталогВременныхФайлов + "PsExec.exe";
ФайлРезультата = КаталогВременныхФайлов + "result.txt";
PsExec.Записать(ИсполняемыйФайл);
Команда = ИсполняемыйФайл + " " +Сервер + " net share " + Каталог + " > " + ФайлРезультата;
Shell = Новый COMObject("WScript.Shell");
Shell.Run("cmd /C """ + Команда + """", 0 , 1);
Результат = Новый ИзвлечениеТекста(ФайлРезультата);
РезультатТекст = Результат.ПолучитьТекст();
ЛокальныйПуть = СтрПолучитьСтроку(РезультатТекст, 2);
ЛокальныйПуть = СтрЗаменить(ЛокальныйПуть, "Path", "");
ЛокальныйПуть = СокрЛП(ЛокальныйПуть);
УдалитьФайлы(КаталогВременныхФайлов);
Исключение
КонецПопытки;
Возврат ЛокальныйПуть;
КонецФункции