VMware Cloud Community
ganapa2000
Hot Shot
Hot Shot
Jump to solution

Unable to sort CSV output

Hi,

I am unable to get the sorting for one column for csv output.

I am getting the output but it is not getting sorted for "RealTime Usage Mhz" column

Please help!!!!

function Get-Ready { 

   [CmdletBinding()] 

   param( 

   [Parameter(Mandatory=$true,ValueFromPipeline=$True,ValueFromPipelineByPropertyName=$true)] 

   [String]$Name) #param 

   #begin {Add-PSSnapin vmware.vimautomation.core}#begin 

   process { 

     $Stattypes = "cpu.usage.average", "cpu.usagemhz.average", "cpu.ready.summation" 

     foreach ($esxi in $(Get-VMHost $Name)) { 

       $vmlist = $esxi | Get-VM | Where-Object {$_.PowerState -eq "PoweredOn"} 

       $esxiCPUSockets = $esxi.ExtensionData.Summary.Hardware.NumCpuPkgs  

       $esxiCPUcores = $esxi.ExtensionData.Summary.Hardware.NumCpuCores/$esxiCPUSockets 

       $esxiCPUMhz = $esxi.ExtensionData.Summary.Hardware.CpuMhz  

   $TotalesxiCPUs = $esxiCPUSockets * $esxiCPUcores

   $TotalCPUMhz = $TotalesxiCPUs * $esxiCPUMhz

       foreach ($vm in $vmlist) { 

         $VMCPUNumCpu = $vm.NumCpu 

         $VMCPUCores = $vm.ExtensionData.config.hardware.NumCoresPerSocket 

         $VMCPUSockets = $VMCPUNumCpu / $VMCPUCores 

         $GroupedRealTimestats = Get-Stat -Entity $vm -Stat $Stattypes -Realtime -Instance "" -ErrorAction SilentlyContinue | Group-Object MetricId 

         $RealTimeCPUAverageStat = "{0:N2}" -f $($GroupedRealTimestats | Where {$_.Name -eq "cpu.usage.average"} | Select-Object -ExpandProperty Group | Measure-Object -Average Value | Select-Object -ExpandProperty Average) 

         $RealTimeCPUUsageMhzStat = "{0:N2}" -f $($GroupedRealTimestats | Where {$_.Name -eq "cpu.usagemhz.average"} | Select-Object -ExpandProperty Group | Measure-Object -Average Value | Select-Object -ExpandProperty Average) 

         $RealTimeReadystat = $GroupedRealTimestats | Where {$_.Name -eq "cpu.ready.summation"} | Select-Object -ExpandProperty Group | Measure-Object -Average Value | Select-Object -ExpandProperty Average 

         $RealTimereadyvalue = [math]::Round($(($RealTimeReadystat / (20 * 1000)) * 100), 2) 

         $Groupeddaystats = Get-Stat -Entity $vm -Stat $Stattypes -Start (get-date).AddDays(-1) -Finish (get-date) -IntervalMins 5 -Instance "" -ErrorAction SilentlyContinue | Group-Object MetricId 

         $dayCPUAverageStat = "{0:N2}" -f $($Groupeddaystats | Where {$_.Name -eq "cpu.usage.average"} | Select-Object -ExpandProperty Group | Measure-Object -Average Value | Select-Object -ExpandProperty Average) 

         $dayCPUUsageMhzStat = "{0:N2}" -f $($Groupeddaystats | Where {$_.Name -eq "cpu.usagemhz.average"} | Select-Object -ExpandProperty Group | Measure-Object -Average Value | Select-Object -ExpandProperty Average) 

         $dayReadystat = $Groupeddaystats | Where {$_.Name -eq "cpu.ready.summation"} | Select-Object -ExpandProperty Group | Measure-Object -Average Value | Select-Object -ExpandProperty Average 

         $dayreadyvalue = [math]::Round($(($dayReadystat / (300 * 1000)) * 100), 2) 

         $Groupedweekstats = Get-Stat -Entity $vm -Stat $Stattypes -Start (get-date).AddDays(-7) -Finish (get-date) -IntervalMins 30 -Instance "" -ErrorAction SilentlyContinue | Group-Object MetricId 

         $weekCPUAverageStat = "{0:N2}" -f $($Groupedweekstats | Where {$_.Name -eq "cpu.usage.average"} | Select-Object -ExpandProperty Group | Measure-Object -Average Value | Select-Object -ExpandProperty Average) 

         $weekCPUUsageMhzStat = "{0:N2}" -f $($Groupedweekstats | Where {$_.Name -eq "cpu.usagemhz.average"} | Select-Object -ExpandProperty Group | Measure-Object -Average Value | Select-Object -ExpandProperty Average) 

         $weekReadystat = $Groupedweekstats | Where {$_.Name -eq "cpu.ready.summation"} | Select-Object -ExpandProperty Group | Measure-Object -Average Value | Select-Object -ExpandProperty Average 

         $weekreadyvalue = [math]::Round($(($weekReadystat / (1800 * 1000)) * 100), 2) 

         $Groupedmonthstats = Get-Stat -Entity $vm -Stat $Stattypes -Start (get-date).AddDays(-30) -Finish (get-date) -IntervalMins 120 -Instance "" -ErrorAction SilentlyContinue | Group-Object MetricId 

         $monthCPUAverageStat = "{0:N2}" -f $($Groupedmonthstats | Where {$_.Name -eq "cpu.usage.average"} | Select-Object -ExpandProperty Group | Measure-Object -Average Value | Select-Object -ExpandProperty Average) 

         $monthCPUUsageMhzStat = "{0:N2}" -f $($Groupedmonthstats | Where {$_.Name -eq "cpu.usagemhz.average"} | Select-Object -ExpandProperty Group | Measure-Object -Average Value | Select-Object -ExpandProperty Average) 

         $monthReadystat = $Groupedmonthstats | Where {$_.Name -eq "cpu.ready.summation"} | Select-Object -ExpandProperty Group | Measure-Object -Average Value | Select-Object -ExpandProperty Average 

         $monthreadyvalue = [math]::Round($(($monthReadystat / (7200 * 1000)) * 100), 2)       

         $Groupedyearstats = Get-Stat -Entity $vm -Stat $Stattypes -Start (get-date).AddDays(-365) -Finish (get-date) -IntervalMins 1440 -Instance "" -ErrorAction SilentlyContinue | Group-Object MetricId 

         $yearCPUAverageStat = "{0:N2}" -f $($Groupedyearstats | Where {$_.Name -eq "cpu.usage.average"} | Select-Object -ExpandProperty Group | Measure-Object -Average Value | Select-Object -ExpandProperty Average) 

         $yearCPUUsageMhzStat = "{0:N2}" -f $($Groupedyearstats | Where {$_.Name -eq "cpu.usagemhz.average"} | Select-Object -ExpandProperty Group | Measure-Object -Average Value | Select-Object -ExpandProperty Average) 

         $yearReadystat = $Groupedyearstats | Where {$_.Name -eq "cpu.ready.summation"} | Select-Object -ExpandProperty Group | Measure-Object -Average Value | Select-Object -ExpandProperty Average 

         $yearreadyvalue = [math]::Round($(($yearReadystat / (86400 * 1000)) * 100), 2)   

         $data = New-Object psobject 

         $data | Add-Member -MemberType NoteProperty -Name VM -Value $vm.name 

         $data | Add-Member -MemberType NoteProperty -Name VMTotalCPUs -Value $VMCPUNumCpu  

         $data | Add-Member -MemberType NoteProperty -Name VMTotalCPUSockets -Value $VMCPUSockets 

         $data | Add-Member -MemberType NoteProperty -Name VMTotalCPUCores -Value $VMCPUCores 

         $data | Add-Member -MemberType NoteProperty -Name "RealTime Usage Average%" -Value $RealTimeCPUAverageStat 

         $data | Add-Member -MemberType NoteProperty -Name "RealTime Usage Mhz" -Value $RealTimeCPUUsageMhzStat 

         $data | Add-Member -MemberType NoteProperty -Name "RealTime Ready%" -Value $RealTimereadyvalue 

         $data | Add-Member -MemberType NoteProperty -Name "Day Usage Average%" -Value $dayCPUAverageStat 

         $data | Add-Member -MemberType NoteProperty -Name "Day Usage Mhz" -Value $dayCPUUsageMhzStat 

         $data | Add-Member -MemberType NoteProperty -Name "Day Ready%" -Value $dayreadyvalue 

         $data | Add-Member -MemberType NoteProperty -Name "week Usage Average%" -Value $weekCPUAverageStat 

         $data | Add-Member -MemberType NoteProperty -Name "week Usage Mhz" -Value $weekCPUUsageMhzStat 

         $data | Add-Member -MemberType NoteProperty -Name "week Ready%" -Value $weekreadyvalue 

         $data | Add-Member -MemberType NoteProperty -Name "month Usage Average%" -Value $monthCPUAverageStat 

         $data | Add-Member -MemberType NoteProperty -Name "month Usage Mhz" -Value $monthCPUUsageMhzStat 

         $data | Add-Member -MemberType NoteProperty -Name "month Ready%" -Value $monthreadyvalue 

         $data | Add-Member -MemberType NoteProperty -Name "Year Usage Average%" -Value $yearCPUAverageStat 

         $data | Add-Member -MemberType NoteProperty -Name "Year Usage Mhz" -Value $yearCPUUsageMhzStat 

         $data | Add-Member -MemberType NoteProperty -Name "Year Ready%" -Value $yearreadyvalue 

         $data | Add-Member -MemberType NoteProperty -Name VMHost -Value $esxi.name 

         $data | Add-Member -MemberType NoteProperty -Name VMHostCPUSockets -Value $esxiCPUSockets 

         $data | Add-Member -MemberType NoteProperty -Name VMHostCPUCores -Value $esxiCPUCores 

         $data | Add-Member -MemberType NoteProperty -Name TotalVMhostCPUs -Value $TotalesxiCPUs 

$data | Add-Member -MemberType NoteProperty -Name TotalVMhostCPUMhz -Value $TotalCPUMhz

         $data 

       } #foreach ($vm in $vmlist) 

     }#foreach ($esxi in $(Get-VMHost $Name)) 

   } #process 

} #Function Get-Ready

Get-VMHost 'esx10' | Get-Ready | Sort "RealTime Usage Mhz" -Descending | Export-CSV -Path "D:\reports\output.csv" -NoTypeInformation

Output

      

VMVMTotalCPUsVMTotalCPUSocketsVMTotalCPUCoresRealTime Usage Average%RealTime Usage Mhz
APP882121.857699.83
APP892121.7491.54
APP904228.3895.44
DB12342289.259,638.60
0 Kudos
1 Solution

Accepted Solutions
LucD
Leadership
Leadership
Jump to solution

That property is a [String] , while you obviously want to order on the numerical value.

The solution is to cast the string to a [Float]

Sort-Object -Property {[float]$_.'RealTime Usage Mhz'} -Descending


Blog: lucd.info  Twitter: @LucD22  Co-author PowerCLI Reference

View solution in original post

0 Kudos
2 Replies
LucD
Leadership
Leadership
Jump to solution

That property is a [String] , while you obviously want to order on the numerical value.

The solution is to cast the string to a [Float]

Sort-Object -Property {[float]$_.'RealTime Usage Mhz'} -Descending


Blog: lucd.info  Twitter: @LucD22  Co-author PowerCLI Reference

0 Kudos
ganapa2000
Hot Shot
Hot Shot
Jump to solution

Thank you LucD. that worked Smiley Happy

0 Kudos