提高Windows 2016中PowerShell命令的速度

时间:2018-08-24 01:07:29

标签: powershell

问题示例:

Measure-Command { Get-VMSwitch -SwitchType "External" } 

Windows 2012和2016具有相同的硬件,CPU负载约为50%

Windows Server 2016(3个外部交换机)

Days              : 0
Hours             : 0
Minutes           : 0
Seconds           : 6
Milliseconds      : 377
Ticks             : 63779086
TotalDays         : 7.38183865740741E-05
TotalHours        : 0.00177164127777778
TotalMinutes      : 0.106298476666667
TotalSeconds      : 6.3779086
TotalMilliseconds : 6377.9086

Windows Server 2012R2(3个外部交换机)

Days : 0
Hours : 0
Minutes : 0
Seconds : 1
Milliseconds : 376
Ticks : 13762494
TotalDays : 1.59288125E-05
TotalHours : 0.0003822915
TotalMinutes : 0.02293749
TotalSeconds : 1.3762494
TotalMilliseconds : 1376.2494

具有更大或相等CPU负载的Windows 2012R2快6倍。

Windows Server 2016(9个外部交换机)

Days : 0
Hours : 0
Minutes : 1
Seconds : 6
Milliseconds : 168
Ticks : 661689307
TotalDays : 0.000765844105324074
TotalHours : 0.0183802585277778
TotalMinutes : 1.10281551166667
TotalSeconds : 66.1689307
TotalMilliseconds : 66168.9307

Windows 2016变慢48倍! :)

在Windows 2016中,熔化/幽灵修复程序被禁用。

在Windows 2016中是否有提高Powershell命令性能的选项?

谢谢。

1 个答案:

答案 0 :(得分:1)

好吧,我找到了另一个解决方案。它正在通过WMI使用瓶颈。 WMI msvm-ethernetswitchport 类可以提供所有VMSwitches元素,在这里我们已经可以获得Powershel CMD Get-VMSwitch 提供的相同信息。

https://docs.microsoft.com/en-us/windows/desktop/hyperv_v2/msvm-ethernetswitchport

一个简单的例子:

    ManagementScope scope = new ManagementScope("\\\\.\\ROOT\\virtualization\\v2");

    ObjectQuery query = new ObjectQuery("SELECT * FROM Msvm_EthernetSwitchPort");

    ManagementObjectSearcher searcher =
                            new ManagementObjectSearcher(scope, query);

    ManagementObjectCollection queryCollection = searcher.Get();
    foreach (ManagementObject m in queryCollection)
    {
        Console.WriteLine("DeviceID : {0}", m["DeviceID"]);
        Console.WriteLine("ElementName : {0}", m["ElementName"]);
    }

可悲的是Windows 2016中的PowerShell运行如此缓慢...

PowerShell vs WMI

实际上,通过WMI,有很多选择方式来获取此数据。

https://docs.microsoft.com/en-us/windows/desktop/hyperv_v2/hyper-v-networking-api