如何在PowerCLI中快速查找带有串行端口的VM

时间:2013-09-04 22:28:03

标签: powershell powershell-v2.0 vmware powercli

我有一个大约需要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)
}

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

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

1 个答案:

答案 0 :(得分:0)

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

$ProbDevices = $vm.ExtensionData.Config.Hardware.Device `
  | ? { $_.GetType().Name -eq 'VirtualSerialPort' } `
  | % { $_.DeviceInfo.Label }