我有一个非常简单的 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();
}
为什么会这样?更重要的是,无论如何,我可以确保在提升运行时此查询将正确执行 - 因为最终程序由于其他原因需要运行提升。