2016-09-25 3 views
0

몇 가지 vcenters (약 5 개)의 VM 감사를 구현합니다. 보고서는 몇 가지 속성과 함께 각 VM의 csv입니다. 이 스크립트는 하룻밤 사이에 실행 되겠지만, 완료하는 데 약 5-6 시간이 걸렸으며 효율성을 높이고 싶었습니다. 나는 워크 플로우에 대해 배웠고 하나 하나가 아니라 각각의 vcenter를 동시에 감사하는 것이 더 빠를 것이라고 생각했습니다. 그것은 약 4 시간 후에 내가 끝내기를 기대했던 것보다 느렸다. 데이터에 중복 된 부분이 많아서 그 이유를 알 수 없습니다. 어쩌면 워크 플로우 작동 방식에 대한 제 생각에는 결함이 있습니다. 나는 또한 내 코드에서 효율성을 높이는 데 대한 조언을 찾고있다. 미리 감사드립니다.Workflow 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에 대해 한 번만 호출하고 있습니다. 나는 그것이 필요 없다고 생각합니다.

$networks = Get-View -ViewType Network 

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

VLAN= 라인을 교체 그리고 전적으로 귀하의 $vm = Get-VM ... 라인을 삭제 VCENTER에 연결 한 후이 줄을 추가하십시오.