Powershell Win32\u TCPIPPrinterPort WMI查询为空

Powershell Win32\u TCPIPPrinterPort WMI查询为空,powershell,vbscript,wmi,Powershell,Vbscript,Wmi,目前为止,当我通过任何方法查询打印机的WMI时: select * from Win32_Printer 我得到了正常的结果。当我尝试查询端口时: select * from Win32_TCPIPPrinterPort 查询成功,但我没有得到任何结果。此服务器上有100多个端口,但prnport.vbs、wbemtest、powershell或我自己的代码都没有得到任何结果 2003R2中的操作系统,并且用户具有管理员权限。结果表明,本地端口以及因此重定向的本地端口(如ghostscrip

目前为止,当我通过任何方法查询打印机的WMI时:

select * from Win32_Printer
我得到了正常的结果。当我尝试查询端口时:

select * from Win32_TCPIPPrinterPort
查询成功,但我没有得到任何结果。此服务器上有100多个端口,但prnport.vbs、wbemtest、powershell或我自己的代码都没有得到任何结果


2003R2中的操作系统,并且用户具有管理员权限。

结果表明,本地端口以及因此重定向的本地端口(如ghostscript等)不在此WMI查询中列出。它们直接存储在注册表中。这意味着,迁移这些打印机参数的常规脚本将获取打印机,而不是端口信息

它们存储在: HKLM\SYSTEM\CurrentControlSet\Control\Print\Monitors\Redirected Port\Ports


实时学习。

我有一对打印服务器,上面有许多队列,它们在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循环中的打印队列变量。根据需要将其更改为打印队列名称,或在代码的前面设置变量

我还遇到了没有设置队列值的打印队列,因此我添加了一个if语句来设置队列值,这是我将此数据提供给在2012R2服务器上安装打印队列的另一个脚本所必需的

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

希望这有帮助

哪里有问题:这需要依赖什么服务?什么提供本地端口信息?什么回答WMI查询?任何这些都可能导致问题的根源!思想?