【发布时间】:2012-11-24 16:17:53
【问题描述】:
我有一个非常简单的 Powershell 查询:
Get-WmiObject -query 'ASSOCIATORS OF {Win32_LogicalDisk.DeviceID="C:"} WHERE AssocClass = Win32_LogicalDiskToPartition'
在 Windows 7(64 位)机器上,在 Powershell 中运行它会正确枚举单个管理对象。但是,如果我在提升的 Powershell 中运行相同的查询,我会暂停很长时间,然后没有结果。
我在尝试在代码中执行 WMI 查询时发现了一个类似的问题(这正是我真正想要做的)——当我的程序在没有提升的情况下运行时,代码可以工作,当它在提升的情况下运行时不会返回任何结果。这是显示此问题的最简单的代码版本:
static void Main(string[] args)
{
var query = "ASSOCIATORS OF {Win32_LogicalDisk.DeviceID=\"C:\"} WHERE AssocClass = Win32_LogicalDiskToPartition";
var searcher = new ManagementObjectSearcher(query);
foreach (var o in searcher.Get())
{
Console.WriteLine(o);
}
Console.WriteLine("DONE");
Console.ReadLine();
}
为什么会这样?更重要的是,无论如何我可以确保在提升运行时此查询将正确执行 - 因为最终程序将需要出于其他原因提升运行。
【问题讨论】:
-
我无法在我的 Windows 7 x64 机器上复制 Get-WmiObject 问题。响应迅速返回,与非提升外壳的响应相同。
-
这很有趣,谢谢基思。我发现我的 Windows 8 机器上没有出现这个问题,所以我认为它与操作系统版本有关。不幸的是,我没有其他 Win7 x64 机器可以尝试复制它。
标签: c# powershell wmi system.management