0

実行に約 15 分かかり、約 700 の VM のさまざまな側面をチェックするスクリプトがあります。これは問題ではありませんが、シリアル ポートが接続されているデバイスを見つけたいと思っています。これは、これを確認するために追加した関数です。

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 時間長くなりますが、これは許容できません。より効率的な方法でこれを行うことは可能ですか? 私が発見したすべての方法は、これの変種です。

また、上記の方法でグローバル変数を使用することは理想的ではないことも承知しています。私はこれをしたくありません。ただし、既存のスクリプトに追加し、そのスタイル/フォーマットを使用しています。

4

1 に答える 1

0

ループ内の配列への追加( $arr += $newItem) は、既存のすべての要素を新しい配列にコピーするため、うまく機能しません。これにより、パフォーマンスが向上するはずです。

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