2016-09-25 45 views
0

我正在實施多個vCenter的VM審計(其中大約5個),報告只是每個VM的csv以及一些屬性。雖然這個腳本會在一夜之間運行,但我發現花了大約5-6個小時才完成並希望提高其效率。我瞭解了工作流程,並認爲在同一時間而不是逐個審覈每個中心會更快。這比我預計在4個小時後完成的速度要慢。我注意到數據中有很多重複內容,我無法弄清楚爲什麼會這樣;也許我關於工作流如何工作的想法是有缺陷的。我也在尋找提高代碼效率的技巧。提前致謝。工作流VM審計中的重複項

的工作流程:

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

添加一些日誌記錄,看看發生了什麼。有很多方法可以做到這一點,包括:Add-Content(記錄到文件),Write-Verbose(記錄到Verbose PowerShell流)等。 –

回答

0

隨着下面的變化,也許奔馳不夠,你不再需要並行或工作流程。不確定這些元素是否是重複問題的原因。如果沒有,您可能需要從您的環境中分享更多細節以獲得有關該部分的幫助。

Get-VM很慢。你爲每個VM調用一次,我認爲你根本不需要它。嘗試連接到vCenter

$networks = Get-View -ViewType Network 

更換您的VLAN=符合

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

而且完全沒有下降的$vm = Get-VM ...行之後加入這一行。