从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"]));
}