工作流VM审核中的重复项

时间:2016-09-25 15:52:16

标签: powershell workflow powercli

我实施了几个vcenters(大约5个)的VM审核,其中报告只是每个VM的csv以及一些属性。虽然这个脚本会在一夜之间运行,但我发现它需要大约5-6个小时才能完成,并希望提高效率。我了解了工作流程,并认为同时审核每个vcenter会更快,而不是一个一个。大约4个小时后,它比我预期的要慢。我注意到数据中有很多重复,我无法弄清楚为什么会这样;也许我对工作流程如何运作的看法存在缺陷。我也在寻找有关提高代码效率的任何提示。提前谢谢。

工作流程:

workflow test {

param([string[]]$vcenters, [string]$session, [string]$username, [string]$password)

foreach -parallel($vcenter in $vcenters){
$main = InlineScript{
    Add-PSSnapin VMware.VimAutomation.Core
    Connect-VIServer -Server $Using:vcenter -User $Using:username -Password $Using:password 
    $vms = Get-View -ViewType VirtualMachine -Property Name, Summary.Config.GuestFullName, Runtime.Powerstate, Config.Hardware.MemoryMB, Config.Hardware.NumCPU
    ForEach($machine in $vms){
        $vm = Get-VM -Server $Using:vcenter -Name $machine.Name -ErrorAction SilentlyContinue
        $object = New-Object -Type PSObject -Property ([ordered]@{
            Name = $machine.Name
            GuestOS = $machine.Summary.Config.GuestFullName
            PowerState = $machine.Runtime.PowerState
            MemoryGB = ($machine.Config.Hardware.MemoryMB / 1024)
            CPU = $machine.Config.Hardware.NumCPU
            VLAN=(Get-NetworkAdapter -VM $vm |Sort-Object NetworkName |Select -Unique -Expand NetworkName) -join '; '
        })
        $object| Export-Csv -Append “C:\TestReports\$($vcenter)_TestReport.csv” -NoTypeInformation
    }
    Disconnect-VIServer - $Using:vcenter  -Confirm:$false
    }
}
}

1 个答案:

答案 0 :(得分:0)

通过以下更改,可能运行得足够快,您不再需要并行性或工作流程。不确定这些元素是否是导致重复问题的原因。如果没有,您可能需要从您的环境中分享更多详细信息以获取该文章的帮助。

Get-VM很慢。你为每个虚拟机调用一次,我根本不认为你需要它。尝试在连接到vCenter

后添加此行
$networks = Get-View -ViewType Network

替换VLAN=
VLAN= $networks | ? {$_.VM.Value -contains $machine.MoRef.value} | select -exp Name

完全放弃$vm = Get-VM ...行。