2013-05-27 7 views
0

Прежде всего, я извиняюсь за свой английский.Добавить локальный порт принтера с VBS

У меня есть один вопрос о Windows WMI и о том, как добавить локальный порт на общий принтер. Я этот скрипт:

Set objWMIService = GetObject("winmgmts:") 
Set objNewPort = objWMIService.Get _ 
("Win32_TCPIPPrinterPort").SpawnInstance_ 
objNewPort.Name = "Ricoh3300C" 
objNewPort.Protocol = 2 
objNewPort.HostAddress = "XXX.XXX.X.XXX" 
objNewPort.PortNumber = "9100" 
objNewPort.SNMPEnabled = False 
objNewPort.Put_ 

С этим я могу добавить принтер с IP-адресом, но я хочу, чтобы добавить принтер в самба сервер с адресом, как «\\ XXX.XXX.X.XXX \ printerColor» , Я потерял много времени в Google, пытаясь найти скрипт, и все, что я видел, это для портов TCPIP. Я не сделаю это, но в местном порту.

Я попытался использовать этот скрипт с prnadmin.dll и не повезло.

function PortAdd(strPort, portType) 

    on error resume next 

    dim oMaster 
    dim oPort 
    dim iResult 

    set oMaster = CreateObject("PrintMaster.PrintMaster.1") 
    set oPort = CreateObject("Port.Port.1") 

    iResult = kErrorFailure 

    oPort.PortName = strPort 
    oPort.PortType = portType 

    oMaster.PortAdd oPort 

    if Err = 0 then 

     iResult = kErrorSuccess 

    else 

     wscript.echo "Error: 0x" & Hex(Err.Number) & ". " & Err.Description 

    end if 

    PortAdd = iResult 

end function 

Я получаю эту ошибку:

Error: 0x1A8. Se requiere un objeto 

на английском, как

Error: 0x1A8. An object is required 

Как я могу исправить эту ошибку или то, что сценарий я могу использовать, чтобы добавить локальный порт ?. Заранее спасибо.

Я забыл сказать, что я хочу сделать это с обычным пользователем без доступа администратора. Первый скрипт отлично работает с этими пользователями, но для TCPIP.

+0

Я не уверен, что добавление портов может быть выполнено с использованием обычных учетных данных пользователя. Укажите, на какой строке возникает ошибка VBS. – Tomalak

+0

Удалите 'On Error Resume Next', чтобы увидеть, на какой строке происходит ошибка. –

+0

Я обнаружил, что второй скрипт дает эту ошибку, потому что нужна учетная запись администратора (у меня есть учетная запись администратора, но я не запускался как администратор в W7), но первый скрипт добавляет TCPIP-порт без проблем в обычную учетную запись, и я могу добавить принтер с этим портом без проблем, но я хочу использовать сервер печати чашек для управления всеми принтерами, и мне нужно создать локальный порт, указывающий на сетевой адрес сервера. Вся проблема в том, что я хочу использовать настраиваемое имя для принтеров, и если я добавлю, что принтеры в качестве сетевых принтеров получаю такое имя, как «Ricoh3300C-PS в ServerName», и я хочу, например, «Ricoh 3300 Color». –

ответ

1

Рассмотрите возможность использования XcvData, например.

private static void AddPort(string portName) 
    { 
     var def = new PRINTER_DEFAULTS(); 

     def.pDatatype = null; 
     def.pDevMode = IntPtr.Zero; 
     def.DesiredAccess = 1; //Server Access Administrator 

     IntPtr hPrinter = IntPtr.Zero; 

     int n = OpenPrinter(",XcvMonitor Local Port", ref hPrinter, def); 
     if (n == 0) 
      throw new Exception("Local Port monitor has not been opened."); 

     if (!portName.EndsWith("\0")) 
      portName += "\0"; 

     // .NET strings are formed by 2-byte characters 
     var size = (uint) (portName.Length*2); 

     IntPtr portPtr = Marshal.AllocHGlobal((int) size); 
     Marshal.Copy(portName.ToCharArray(), 0, portPtr, portName.Length); 

     uint needed, xcvResult; 

     XcvData(hPrinter, "AddPort", portPtr, size, IntPtr.Zero, 0, out needed, out xcvResult); 

     ClosePrinter(hPrinter); 
     Marshal.FreeHGlobal(portPtr); 
    } 

    [DllImport("winspool.drv", EntryPoint = "XcvDataW", SetLastError = true)] 
    private static extern bool XcvData(
     IntPtr hXcv, 
     [MarshalAs(UnmanagedType.LPWStr)] string pszDataName, 
     IntPtr pInputData, 
     uint cbInputData, 
     IntPtr pOutputData, 
     uint cbOutputData, 
     out uint pcbOutputNeeded, 
     out uint pwdStatus); 
Смежные вопросы