Прочитано 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
для получения желаемых имен принтеров.
Какое имя принтера вы пытаетесь сопоставить? – Avery