从Win32_TCPIPPrinterPort检索主机地址问题

问题描述:

我遇到了一个奇怪的问题,检索打印机的端口地址。 当我得到Win32_TCPIPPrinterPort中的所有条目时,HostAddress字段(应具有IP地址)通常为空白/空白,只有端口名称具有值。为了让它有点陌生,如果某个特定的端口没有被任何打印机使用,那么HostAddress将具有适当的值。从Win32_TCPIPPrinterPort检索主机地址问题

C#代码很简单,结果如下所示; IP_192.168.1.100, printerportxyz,

richTextBox1.Clear(); 
ManagementObjectSearcher portSearcher = new ManagementObjectSearcher("root\\CIMV2", 
    "SELECT * FROM Win32_TCPIPPrinterPort"); 
foreach (ManagementObject port in portSearcher.Get()) 
{ 
    richTextBox1.AppendText(
     String.Format("Name: {0} HostAddress: {1}", 
      port["Name"], 
      port["HostAddress"]) 
     ); 
} 

我也试过在WSH/VBS一样的东西,看到了相同的行为。

我最终不得不重新访问这个,并进行了另一次尝试。我发现内置的prnport.vbs管理脚本没有问题 - 查看它我看到,虽然建立它的WMI连接,它有oService.Security_.Priveleges.AddAsString“SeLoadDriverPrivilege”

C#中的解决方案最终指定WMI ConnectionOptions并将EnablePrivileges设置为true。然后,HostAdress对于未使用或正在使用的端口不再为空。

ConnectionOptions connOptions = new ConnectionOptions(); 
connOptions.EnablePrivileges = true; 

ManagementScope mgmtScope = new ManagementScope("root\\CIMV2", connOptions); 
mgmtScope.Connect(); 

ObjectQuery objQuery = new ObjectQuery("SELECT * FROM Win32_TCPIPPrinterPort"); 
ManagementObjectSearcher moSearcher = new ManagementObjectSearcher(mgmtScope, objQuery); 

foreach (ManagementObject mo in moSearcher.Get()) 
{ 
    Console.WriteLine(String.Format("PortName={0} HostAddress={1}", mo["Name"], mo["HostAddress"])); 
}