0

我有一个大约需要 15 分钟才能运行的脚本,它检查了大约 700 个虚拟机的各个方面。这不是问题,但我现在想找到连接了串行端口的设备。这是我添加的一个功能来检查这个:

Function UsbSerialCheck ($vm)
{
    $ProbDevices = @()
    $devices = $vm.ExtensionData.Config.Hardware.Device
    foreach($device in $devices)
    {
        $devType = $device.GetType().Name
        if($devType -eq "VirtualSerialPort")
        {
            $ProbDevices += $device.DeviceInfo.Label
        }
    }
    $global:USBSerialLookup = [string]::join("/",$ProbDevices)
}

添加此函数会使脚本运行的时间长度增加一个小时,这是不可接受的。是否有可能以更有效的方式做到这一点?我发现的所有方法都是这个的变种。

另外,我知道以上面显示的方式使用全局变量并不理想。我宁愿不这样做;但是,我正在添加到现有脚本中,并使用它们的样式/格式。

4

1 回答 1

0

在循环中追加到数组 ( $arr += $newItem) 效果不佳,因为它将所有现有元素复制到新数组中。这应该提供更好的性能:

$ProbDevices = $vm.ExtensionData.Config.Hardware.Device `
  | ? { $_.GetType().Name -eq 'VirtualSerialPort' } `
  | % { $_.DeviceInfo.Label }
于 2013-09-05T10:35:12.350 回答