Вход | Регистрация

1С:Предприятие :: 1С:Предприятие 8 общая

Как получить имена всех принтеров на сервере

Как получить имена всех принтеров на сервере
Я
   SAURON777
 
09.08.18 - 16:53
Добрый день!
Как получить имена всех принтеров на сервере. В том числе перенаправленных. Нашел через поиск способы, но они не дают перенаправленные принтеры, а они тоже нужны. Прошу помочь.
 
 
   Garykom
 
1 - 09.08.18 - 17:04
Сервер то на Linux'е надеюсь?
   SAURON777
 
2 - 09.08.18 - 17:45
(1) Windows Server 2012
   Garykom
 
3 - 09.08.18 - 17:47
(2) Плохо искал способы, они даже тут не форуме есть причем приколочены
   Garykom
 
4 - 09.08.18 - 17:48
(3) *на форуме
   kittystark
 
5 - 09.08.18 - 17:48
под винду
[1с]
Перем Серверы;
Перем ScrptCtrl;

Процедура ПриОткрытии()
    ЗаполнитьСписокПринтеров();
КонецПроцедуры

Процедура ЗаполнитьСписокПринтеров()
    
    Серверы = Новый СписокЗначений;
    Серверы.Добавить("Omega"); //свои имена серверов
    Серверы.Добавить("Delta");
    
    Для инд1=1 по Серверы.количество() Цикл                      
        сервер = серверы.Получить(инд1-1 );
        Попытка
            m = ScrptCtrl.Modules.item("Global");
            co = m.CodeObject;
            Принтеры = co.prn_list(сервер.Значение);

            Для инд2=1 по СтрЧислоВхождений(принтеры, Символы.ПС) Цикл
                принтер = СтрПолучитьСтроку(принтеры, инд2);
                СтрокаТЗ = ТаблицаПринтеров.Добавить();
                СтрокаТЗ.Сервер = сервер;
                СтрокаТЗ.Принтер = принтер;
            КонецЦикла;
        Исключение
            Сообщить(ОписаниеОшибки());
        КонецПопытки;
    КонецЦикла;
       ТаблицаПринтеров.Сортировать("Принтер");
    
КонецПроцедуры    

Процедура ТаблицаПринтеровПередНачаломИзменения(Элемент, Отказ)
    
    Отказ = Истина;
    ответ = Вопрос("Очистить очередь печати на " + Элемент.ТекущаяСтрока.принтер + "?", РежимДиалогаВопрос.ДаНет);
    Если ответ = КодВозвратаДиалога.Да Тогда
        m2 = ScrptCtrl.eval("prn_CancelJobs(""" + Элемент.ТекущаяСтрока.принтер + """)");
    КонецЕсли;    

КонецПроцедуры

ScrptCtrl= Новый COMОбъект("MSScriptControl.ScriptControl");
ScrptCtrl.Language="VBScript";
ScrptCtrl.AddCode("
|
|function prn_list(strComputer)
|    set objWMIService = GetObject(""winmgmts:"" & ""{impersonationLevel=impersonate}!\\"" & strComputer & ""\root\cimv2"")
|    set colInstalledPrinters = objWMIService.ExecQuery(""Select * from Win32_Printer"")
|    s = """"
|    For Each objPrinter in colInstalledPrinters
|        s = s & objPrinter.DeviceID & vbCrLf
|    Next
|   prn_list = s
|end function
|
|function prn_CancelJobs(strPrinter)
|    strComputer = "".""
|    set objWMIService = GetObject(""winmgmts:"" & ""{impersonationLevel=impersonate}!\\"" & strComputer & ""\root\cimv2"")
|    set colInstalledPrinters = objWMIService.ExecQuery(""Select * from Win32_Printer"")
|    For Each objPrinter in colInstalledPrinters
|        If objPrinter.DeviceID = strPrinter then
|            objPrinter.CancelAllJobs()
|        End If
|    Next
|   prn_CancelJobs = 167
|end function
|
|");
[/1с]
   SAURON777
 
6 - 09.08.18 - 17:57
Эти процедуры отображают перенаправленные принтеры?
   kittystark
 
7 - 09.08.18 - 18:00
пробуй...
   Cyberhawk
 
8 - 09.08.18 - 18:00
Такой возможности нет
   kittystark
 
9 - 09.08.18 - 18:01
(6) у меня все принтера проброшенные через RDP показывались, а что ты имеешь в виду под словом "перенаправленные" - хз
   Garykom
 
10 - 09.08.18 - 18:02
ВыборПринтеров = Новый СписокЗначений();
ВыборПринтеров.Очистить();
Сеть =  Новый COMОбъект ("WScript.Network");
Принтеры =  Сеть.EnumPrinterConnections();
i = 0;
Пока i < Принтеры.Count()-1 Цикл
    ВыборПринтеров.Добавить(СокрЛП(Принтеры.Item(i+1)), СокрЛП(Принтеры.Item(i+1)));
    i = i + 2;
КонецЦикла;
 
 Рекламное место пустует

Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Рекламное место пустует