2016-09-25 4 views
0

Я реализую виртуальный аудит нескольких vcenters (около 5 из них), где отчет представляет собой просто csv каждой VM вместе с несколькими свойствами. Хотя этот скрипт запускался на ночь, я обнаружил, что для его завершения потребовалось около 5-6 часов, и он хотел повысить его эффективность. Я узнал о рабочих процессах и понял, что быстрее будет проводить аудит каждого vcenter одновременно, а не один за другим. Это было медленнее, чем я ожидал окончания примерно через 4 часа. Я заметил, что в данных было много дубликатов, и я не могу понять, почему это было бы; возможно, мои представления о том, как работает рабочий процесс, являются ошибочными. Я также ищу советы по повышению эффективности моего кода. Заранее спасибо.Duplicates in Workflow VM audit

Рабочий процесс:

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

Добавьте несколько журналов, чтобы узнать, что происходит. Существует множество способов сделать это, в том числе: Добавить-содержимое (журнал в файл), Write-Verbose (журналы в поток Verbose PowerShell) и т. Д. –

ответ

0

С ниже изменений, может быть, он работает достаточно быстро, что вам больше не нужно параллелизм или рабочий процесс. Не уверен, что эти элементы являются причиной проблемы дублирования. Если нет, вам может потребоваться поделиться более подробной информацией из вашей среды о помощи в этой части.

Get-VM является медленным. Вы вызываете его один раз для каждой виртуальной машины, и я не думаю, что вам это нужно вообще. Попробуйте добавить эту строку после подключения к VCENTER

$networks = Get-View -ViewType Network 

Замена вашей VLAN= линии с

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

И ронять $vm = Get-VM ... строку целиком.

 Смежные вопросы

  • Нет связанных вопросов^_^