2015-02-17 1 views
0

В java я пытаюсь использовать команду cmd для установки принтера с сервера печати. Зная 3 первых буквы имени принтера, я хотел бы использовать подстановочные знаки. Я пробовал следующую команду, но ничего не делает.Использование шаблона для установки серверного принтера

Process p3 = Runtime.getRuntime().exec("CSCRIPT c:\\windows\\System32\\Printing_Admin_Scripts\\en-US\\prnmngr.vbs -l -s \\\\svmsimp1 -a -p \"slj05%\" "); 
+0

Какое имя принтера вы пытаетесь сопоставить? – Avery

ответ

0

Прочитано prnmngr.vbs сценарий. Существует следующая функция для разбора командной строки (сокращенные, опущенные части заменены '...'):

' Parse the command line into its components 
function ParseCommandLine(iAction, strServer, strPrinter, strDriver _ 
           , strPort, strUser, strPassword) 
on error resume next 
'...' 
dim oArgs 
dim iIndex 
'...' 
iIndex = 0 
set oArgs = wscript.Arguments 
while iIndex < oArgs.Count 
    select case oArgs(iIndex) 
     case "-a" 
      iAction = kActionAdd 
     '...' 
     case "-p" 
      iIndex = iIndex + 1 
      strPrinter = oArgs(iIndex) 
     '...' 
     case else 
      Usage(true) 
      exit function 
    end select 
    iIndex = iIndex + 1 
wend 
'...' 
end function 

Crucial линия strPrinter = oArgs(iIndex) говорит сценарий принимает имя принтера из параметра командной строки -p "printer"как таковой, без попытки лечения любые подстановочные знаки. Ни в этой функции, ни в другом месте всего скрипта.

BTW, все параметры функции ParseCommandLine передаются по ссылке (по умолчанию, если ByVal и ByRef опущены).

Заключение: хотя вы хотели использовать подстановочные знаки, это невозможно с -a аргументом (добавить локальный принтер), как в следующем вызове

'...' 
    select case iAction 
     case kActionAdd 
      iRetval = AddPrinter(strServer, strPrinter, strDriver _ 
        , strPort, strUser, strPassword) 
    '...' 

мы можем видеть (внутри AddPrinter функции):

'...' 
    set oPrinter = oService.Get("Win32_Printer").SpawnInstance_ 
    '...' 
oPrinter.DriverName = strDriver 
oPrinter.PortName = strPort 
oPrinter.DeviceID = strPrinter 
oPrinter.Put_(kFlagCreateOnly) 
    '...' 

С другой стороны, вы можете анализировать выходные данные prnmngr -l -s server для получения желаемых имен принтеров.

+0

Спасибо. Затем я буду разбирать вывод. Мне интересно, есть ли способ в java, чтобы получить список всех установок принтеров на сервере принтера. Можно найти каталог/файл (.isdirectory() /.isfile()), но он ничего не возвращает при поиске ссылки на установку принтера на сервере (\\ servername \ ...). –

 Смежные вопросы

  • Нет связанных вопросов^_^