Get-WMIObject无法在提升的PowerShell中枚举Win32_LogicalDiskToPartiion

时间:2012-12-06 15:29:40

标签: c# powershell wmi system.management

我有一个非常简单的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();
}

为什么会这样?更重要的是,无论如何,我可以确保在运行提升时此查询将正确执行 - 因为最终程序需要因其他原因而升级。

1 个答案:

答案 0 :(得分:0)

我想我找到了罪魁祸首 - 我使用TrueCrypt安装了加密驱动器。当我卸载该驱动器时,枚举正常工作,当我再次安装它时,问题会重新出现。

我最好的猜测是WMI遇到了问题,因为加密的驱动器没有分区 - 尽管为什么它在没有运行提升时工作是另一回事。