我有一个大约需要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)
}
添加此功能会在脚本运行的时间长度上增加一个小时,这是不可接受的。是否有可能以更有效的方式做到这一点?我发现的所有方法都是这种变体。
另外,我知道以上面显示的方式使用全局变量并不理想。我宁愿不这样做;但是,我正在添加到现有脚本中,并使用它们的样式/格式。
答案 0 :(得分:0)
在循环中追加到数组($arr += $newItem
)的效果不佳,因为它会将所有现有元素复制到新数组中。这应该提供更好的性能:
$ProbDevices = $vm.ExtensionData.Config.Hardware.Device `
| ? { $_.GetType().Name -eq 'VirtualSerialPort' } `
| % { $_.DeviceInfo.Label }