【问题标题】:Get-WMIObject fails to enumerate Win32_LogicalDiskToPartiion in elevated powershellGet-WMIObject 无法在提升的 powershell 中枚举 Win32_LogicalDiskToPartiion
【发布时间】: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


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-11
    • 1970-01-01
    • 2017-01-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多