none
Удаленное подключение принтера (powershell 2) - проблемы с утановкой драйвера. RRS feed

  • Вопрос

  • Добрый день.

    Стало лень подключать принтеры и решил делать это не вставая с места. Родился вот такой скрипт:



    $RMcomputername = "testhost"
    # Имя компьютера

    $sessionname = new-PSSession -computername $RMcomputername


    Invoke-Command -session $sessionname -ScriptBlock {$port = [WMICLASS]"Win32_TcpIpPrinterPort"}
    Invoke-Command -session $sessionname -ScriptBlock {$print = [WMICLASS]"Win32_Printer"}
    Invoke-Command -session $sessionname -ScriptBlock {$driverclass = [WMIClass]"Win32_PrinterDriver"}

    Invoke-Command -session $sessionname -ScriptBlock {$strComputer = "."}
    # Определяем что исполняется на локальном компьютере

    # Данные о принтере
    Invoke-Command -session $sessionname -ScriptBlock {$ip = "192.168.0.11"}
    # ip адресс принтера
    Invoke-Command -session $sessionname -ScriptBlock {$DeviceID = "IT"}
    # Имя принтера
    Invoke-Command -session $sessionname -ScriptBlock {$DeviceLocation = "офис 403"}
    # Местоположение принетра
    Invoke-Command -session $sessionname -ScriptBlock {$Comment = "Лазерный принтер HP LaserJet P1505n в офисе 403" }
    # Описание принтера
    Invoke-Command -session $sessionname -ScriptBlock {$Drivername = "HP LaserJet P1500 Series PCL 5e"}
    # Имя драйвера принтера
    Invoke-Command -session $sessionname -ScriptBlock {$DriverPath = "\\admin\Printer driver\HP LaserJet P1500 Series PCL 5e"}
    #Путь к драйверу принтера
    Invoke-Command -session $sessionname -ScriptBlock {$infname = "\\admin\Printer driver\HP LaserJet P1500 Series PCL 5e\hpc1505b.inf"}
    #Путь к inf файлу
    Invoke-Command -session $sessionname -ScriptBlock {$IPPortName = "IP_$IP"}
    # Имя порта принтера
    #Установка порта

    Invoke-Command -session $sessionname -ScriptBlock {$port.psbase.scope.options.EnablePrivileges = $true}
    Invoke-Command -session $sessionname -ScriptBlock {$newPort = $port.CreateInstance()}
    Invoke-Command -session $sessionname -ScriptBlock {$newport.name=$IPPortName}
    Invoke-Command -session $sessionname -ScriptBlock {$newport.Protocol=1}
    Invoke-Command -session $sessionname -ScriptBlock {$newport.HostAddress=$ip}
    Invoke-Command -session $sessionname -ScriptBlock {$newport.PortNumber="9100"}
    Invoke-Command -session $sessionname -ScriptBlock {$newport.SnmpEnabled=$false}
    Invoke-Command -session $sessionname -ScriptBlock {$newport.Put()}
    #}

    #Установка драйвера


    Invoke-Command -session $sessionname -ScriptBlock {$driverobj = $driverclass.createinstance()}
    Invoke-Command -session $sessionname -ScriptBlock {$driverobj.name=$Drivername}
    Invoke-Command -session $sessionname -ScriptBlock {$driverobj.DriverPath=$DriverPath}
    Invoke-Command -session $sessionname -ScriptBlock {$driverobj.Infname=$infname}
    Invoke-Command -session $sessionname -ScriptBlock {$driverclass.AddPrinterDriver($driverobj)}
    Invoke-Command -session $sessionname -ScriptBlock {$driverclass.Put()}

    #}
    #Подключение принтера
    Invoke-Command -session $sessionname -ScriptBlock {$newprinter = $print.createInstance()}
    Invoke-Command -session $sessionname -ScriptBlock {$newprinter.drivername=$Drivername}
    Invoke-Command -session $sessionname -ScriptBlock {$newprinter.PortName=$IPPortName}
    Invoke-Command -session $sessionname -ScriptBlock {$newprinter.Shared=$false} # Отключаем общий доступ
    Invoke-Command -session $sessionname -ScriptBlock {$newprinter.Sharename=$DeviceID}
    Invoke-Command -session $sessionname -ScriptBlock {$newprinter.Location=$DeviceLocation}
    Invoke-Command -session $sessionname -ScriptBlock {$newprinter.Comment=$Comment}
    Invoke-Command -session $sessionname -ScriptBlock {$newprinter.DeviceID=$DeviceID}
    Invoke-Command -session $sessionname -ScriptBlock {$newprinter.Put()}

    remove-PSSession -session $sessionname
    Создание порта и подключение принтера, если драйвер установлен проходи на ура, а вот при установке драйвер возвращает такое:

     

     

    PSComputerName  : testhost
    RunspaceId   : 06cd54be-cff6-4793-9833-4ccfe1db0417
    PSShowComputerName : True
    __GENUS   : 2
    __CLASS   : __PARAMETERS
    __SUPERCLASS  : 
    __DYNASTY   : __PARAMETERS
    __RELPATH   : 
    __PROPERTY_COUNT : 1
    __DERIVATION  : {}
    __SERVER   : 
    __NAMESPACE  : 
    __PATH    : 
    ReturnValue  : 87
    
    PSComputerName  : testhost
    RunspaceId   : 06cd54be-cff6-4793-9833-4ccfe1db0417
    PSShowComputerName : True
    Path    : \\TESTHOST\ROOT\cimv2:Win32_PrinterDriver
    RelativePath  : Win32_PrinterDriver
    Server    : TESTHOST
    NamespacePath  : ROOT\cimv2
    ClassName   : Win32_PrinterDriver
    IsClass   : True
    IsInstance   : False
    IsSingleton  : False
    

     

    1 июля 2010 г. 10:48

Ответы

  • Ошибка 87 означает Parameter is incorrect. Файлы драйвера принтера доступны по сети с удаленного компьютера? Попробуйте с целью тестирования переписать скрипт так, чтобы обращение к дистрибутиву с драйвером происходило по локальному пути (ну и подложите драйвер на диск удаленного компьютера). Не исчезнет ли проблема?

    1 июля 2010 г. 12:35
    Модератор

Все ответы

  • Посмотрите это обсуждение по аналогичной проблеме, особенно последний пост. Возможно, те советы как-то помогут.
    1 июля 2010 г. 10:55
    Модератор
  • Сталкивался с этим - та тогда возвращается
    ReturnValue  : 2
    1 июля 2010 г. 10:59
  • Ошибка 87 означает Parameter is incorrect. Файлы драйвера принтера доступны по сети с удаленного компьютера? Попробуйте с целью тестирования переписать скрипт так, чтобы обращение к дистрибутиву с драйвером происходило по локальному пути (ну и подложите драйвер на диск удаленного компьютера). Не исчезнет ли проблема?

    1 июля 2010 г. 12:35
    Модератор
  • Исчезает, хм, придется идти другим путем.

    Спасибо.

    1 июля 2010 г. 12:59
  • Хотя если исполнить этот скрипт локально все работает, что жутко огорчает.
    1 июля 2010 г. 13:53
  • А у вас случайно не возникает такой ситуации, что дистрибутив с драйвером принтера находится на файловом сервере, к которому подключены клиентские компьютеры? Тогда клиентский компьютер подключается к файловому серверу под именем пользователя, который вошел в систему. С другой стороны, вы запускаете удаленно скрипт, скажем, под вашим именем. При этом скрипт пытается подключиться к серверу под вашим же именем. Но доступ по протоколу SMB/CIFS из одной сессии к одному и тому же серверу, но под разными учетными записями невозможен. Не факт, что у вас имеет место именно такая ситуация, но драйвера принтера следует располагать на сетевом ресурсе, к которому клиентские компьютеры не подключены постоянно.

    Либо предусмотрите в вашем сценарии предварительное копирование дистрибутива драйвера на локальный диск клиентского компьютера  - это добавит буквально несколько строк кода.

    1 июля 2010 г. 14:10
    Модератор
  • Еще раз спасибо, к тем же выводам я сейчас тоже пришел. И просто теперь копирую драйвера с последующим удалением этих файлов.
    1 июля 2010 г. 14:23