Запрос Win32_TCPIPPrinterPort WMI пуст

Когда я запрашиваю WMI (любым способом) для принтеров:

select * from Win32_Printer

У меня нормальные результаты. Когда я пытаюсь запросить порты:

select * from Win32_TCPIPPrinterPort

запрос «успешен», но я не получаю результатов. На этом сервере более 100 портов, но ни prnport.vbs, ни wbemtest, ни powershell, ни мой собственный код не дают никаких результатов.

Операционная система 2003R2 и у пользователя есть права администратора.


person user2483403    schedule 21.01.2015    source источник
comment
Где вопрос: есть ли служба, на которую это опирается? Что предоставляет информацию о локальном порте? Что отвечает на запрос WMI? Все это может привести к источнику проблемы! Идеи?   -  person user2483403    schedule 25.01.2015


Ответы (2)


Оказывается, локальные порты (и, следовательно, перенаправленные локальные порты, такие как ghostscript и т. д.) НЕ указаны в этом запросе WMI. Они хранятся непосредственно в реестре. Это означает, что обычный сценарий для переноса этих параметров принтера получит принтеры, но не информацию о портах.

Они хранятся в: HKLM\SYSTEM\CurrentControlSet\Control\Print\Monitors\Redirected Port\Ports

Живи и учись.

person user2483403    schedule 28.01.2015

У меня есть пара серверов печати с множеством очередей, и они работают на MS Windows 2003. Мне также потребовалась конфигурация порта. А именно очередь и протокол. Я вложил следующие команды в свой цикл foreach и смог получить нужные мне данные:

$PrintQueue = (Get-ItemProperty -Path Registry::"HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print\Monitors\Standard TCP/IP Port\Ports\$Queue" -Name Queue).Queue

$Protocol = (Get-ItemProperty -Path Registry::"HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print\Monitors\Standard TCP/IP Port\Ports\$Queue" -Name Protocol).Protocol

Переменная $Queue в приведенной выше строке пути — это переменная очереди печати в моем цикле foreach. При необходимости измените его на имя очереди печати или установите переменную ранее в коде.

Я также столкнулся с очередями печати, в которых не было задано значение Queue, поэтому я добавил оператор if для его установки, который мне требовался для передачи этих данных в другой скрипт, устанавливающий очередь печати на сервере 2012R2.

if($PrintQueue = $null){
    $PrintQueue = 'Print'
    }#if

Надеюсь это поможет.

person Ryan Lopez    schedule 02.02.2015