【问题标题】:Win32_TCPIPPrinterPort WMI query is emptyWin32_TCPIPPrinterPort WMI 查询为空
【发布时间】:2015-01-21 18:05:00
【问题描述】:

当我查询 WMI(到目前为止的任何方法)以查找打印机时:

select * from Win32_Printer

我得到正常结果。当我尝试查询端口时:

select * from Win32_TCPIPPrinterPort

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

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

【问题讨论】:

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

标签: powershell vbscript wmi


【解决方案1】:

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

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

生活和学习。

【讨论】:

    【解决方案2】:

    我有几个打印服务器,上面有很多队列,它们在 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
    

    希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-25
      • 2013-12-20
      • 1970-01-01
      相关资源
      最近更新 更多