Try something like this
$vms = Get-VM -Location $esx
$ds = Get-Datastore -RelatedObject $esx
$TotalvCPU = $vms.NumCpu | Measure-Object -Sum | select -ExpandProperty Sum
$TotalESXSpace = $ds.CapacityGB | Measure-Object -Sum | Select-Object -ExpandProperty Sum
$vms | Select Name,
@{N='vmvCPU';E={$_.NumCpu}},
@{N='Memory';E={$_.MemoryMB}},
@{N='UsedMemory';E={$_.ExtensionData.Summary.QuickStats.HostMemoryUsage}},
@{N='UsedSpaceGB';E={$_.UsedSpaceGB}},
@{N='ProvisionedSpaceGB';E={$_.ProvisionedSpaceGB}},
@{N='%ofvCPU/TotalvCPU';E={[math]::Round($_.NumCpu/$TotalvCPU*100)}},
@{N='%ofvCPU/TotalCores';E={[math]::Round($_.NumCpu/$esx.NumCpu*100)}},
@{N='%ofUsedMemory/TotalESXMemory';E={[math]::Round($_.ExtensionData.Summary.QuickStats.HostMemoryUsage/$esx.MemoryTotalMB*100)}},
@{N='%ofProvisionedSpaceGB/TotalESXSpace';E={[math]::Round($_.UsedSpaceGB/$TotalESXSpace*100)}}
}
Blog: lucd.info Twitter: @LucD22 Co-author PowerCLI Reference
What do you already have?
And what is the problem you encounter?
Blog: lucd.info Twitter: @LucD22 Co-author PowerCLI Reference
I have something like this:
Foreach($esx in Get-VMHost){
$vCPU = Get-VM -Location $esx | Measure-Object -Property NumCpu -Sum | select -ExpandProperty Sum
$TotalESXCores = ???
$TotalESXvCPUs = ???
$TotalESXMemory = ???
$TotalESXSpace = ???
$vmname = Get-VM
$vmvCPU = Get-VM -Name $vmname | select NumCPU
$vmMemory = Get-VM -Name $vmname | select MemoryMB
$vmUsedMemory = Get-VM -Name $vmname | ???
$vmUsedSpaceGB = Get-VM -Name $vmname | select UsedSpaceGB
$ProvisionedSpaceGB = Get-VM -Name $vmname | select ProvisionedSpaceGB
$vmname | Select Name,
@{N='vCPU';E={$vCPU}},
@{N='Memory';E={$vmMemory}},
@{N='UsedMemory';E={$vmUsedMemory}},
@{N='UsedSpaceGB';E={$vmUsedSpaceGB}},
@{N='ProvisionedSpaceGB';E={$ProvisionedSpaceGB}},
@{N='%ofvCPU/TotalvCPU';E={[math]::($vCPU/$TotalESXvCPUs)}}
@{N='%ofvCPU/TotalCores';E={[math]::($vCPU/$TotalESXCores)}}
@{N='%ofUsedSpaceGB/TotalESXSpace';E={[math]::($vmUsedMemory/$TotalESXMemory)}},
@{N='%ofProvisionedSpaceGB/TotalESXSpace';E={[math]::($vmUsedMemory/$TotalESXSpace)}},
}
This is better but it doesn't work
Foreach($esx in Get-VMHost){
$TotalvCPU = Get-VM -Location $esx | Measure-Object -Property NumCpu -Sum | select -ExpandProperty Sum
$TotalESXCores = Get-VMHost | Measure-Object -Property NumCpu -Sum | Select-Object -ExpandProperty Sum
$TotalESXMemory = Get-VMHost | Measure-Object -Property MemoryTotalGB -Sum | Select-Object -ExpandProperty Sum
$TotalESXSpace = Get-Datastore | Measure-Object -Property CapacityGB -Sum | Select-Object -ExpandProperty Sum
$vmname = Get-VM
$vmvCPU = Get-VM -Name $vmname | select NumCPU
$vmMemory = Get-VM -Name $vmname | select MemoryMB
$vmUsedMemory = Get-VM -Name $vmname | select @{n="HostMemoryUsage";e={$_.ExtensionData.Summary.QuickStats.HostMemoryUsage}}
$vmUsedSpaceGB = Get-VM -Name $vmname | select UsedSpaceGB
$ProvisionedSpaceGB = Get-VM -Name $vmname | select ProvisionedSpaceGB
$vmname | Select Name,
@{N='vmvCPU';E={$vmvCPU}},
@{N='Memory';E={$vmMemory}},
@{N='UsedMemory';E={$vmUsedMemory}},
@{N='UsedSpaceGB';E={$vmUsedSpaceGB}},
@{N='ProvisionedSpaceGB';E={$ProvisionedSpaceGB}},
@{N='%ofvCPU/TotalvCPU';E={[math]::($vmvCPU/$TotalvCPU)}}
@{N='%ofvCPU/TotalCores';E={[math]::($vmvCPU/$TotalESXCores)}}
@{N='%ofUsedSpaceGB/TotalESXSpace';E={[math]::($vmUsedMemory/$TotalESXMemory)}},
@{N='%ofProvisionedSpaceGB/TotalESXSpace';E={[math]::($vmUsedMemory/$TotalESXSpace)}},
}
Foreach($esx in Get-VMHost){
$TotalvCPU = Get-VM | Measure-Object -Property NumCpu -Sum | select -ExpandProperty Sum
$TotalESXCores = Get-VMHost | Measure-Object -Property NumCpu -Sum | Select-Object -ExpandProperty Sum
$TotalESXMemory = Get-VMHost | Measure-Object -Property MemoryTotalGB -Sum | Select-Object -ExpandProperty Sum
$TotalESXSpace = Get-Datastore | Measure-Object -Property CapacityGB -Sum | Select-Object -ExpandProperty Sum
$vmname = Get-VM
$vmvCPU = Get-VM -Name $vmname | select NumCPU
$vmMemory = Get-VM -Name $vmname | select MemoryMB
$vmUsedMemory = Get-VM -Name $vmname | select @{n="HostMemoryUsage";e={$_.ExtensionData.Summary.QuickStats.HostMemoryUsage}}
$vmUsedSpaceGB = Get-VM -Name $vmname | select UsedSpaceGB
$ProvisionedSpaceGB = Get-VM -Name $vmname | select ProvisionedSpaceGB
$vmname | Select Name,
@{N='vmvCPU';E={$vmvCPU}},
@{N='Memory';E={$vmMemory}},
@{N='UsedMemory';E={$vmUsedMemory}},
@{N='UsedSpaceGB';E={$vmUsedSpaceGB}},
@{N='ProvisionedSpaceGB';E={$ProvisionedSpaceGB}},
@{N='%ofvCPU/TotalvCPU';E={[math]::($vmvCPU/$TotalvCPU)}},
@{N='%ofvCPU/TotalCores';E={[math]::($vmvCPU/$TotalESXCores)}},
@{N='%ofUsedSpaceGB/TotalESXSpace';E={[math]::($vmUsedMemory/$TotalESXMemory)}},
@{N='%ofProvisionedSpaceGB/TotalESXSpace';E={[math]::($vmUsedMemory/$TotalESXSpace)}},
}
At line:21 char:89
+ ... edSpaceGB/TotalESXSpace';E={[math]::($vmUsedMemory/$TotalESXSpace)}},
+ ~
Missing expression after ',' in pipeline element.
+ CategoryInfo : ParserError: (:) [], ParentContainsErrorRecordException
+ FullyQualifiedErrorId : MissingExpression
Foreach($vmname in Get-VM){
$TotalvCPU = Get-VM | Measure-Object -Property NumCpu -Sum | select -ExpandProperty Sum
$TotalESXCores = Get-VMHost | Measure-Object -Property NumCpu -Sum | Select-Object -ExpandProperty Sum
$TotalESXMemory = Get-VMHost | Measure-Object -Property MemoryTotalGB -Sum | Select-Object -ExpandProperty Sum
$TotalESXSpace = Get-Datastore | Measure-Object -Property CapacityGB -Sum | Select-Object -ExpandProperty Sum
$vmname = Get-VM
$vmvCPU = Get-VM -Name $vmname | select NumCPU
$vmMemory = Get-VM -Name $vmname | select MemoryMB
$vmUsedMemory = Get-VM -Name $vmname | select @{n="HostMemoryUsage";e={$_.ExtensionData.Summary.QuickStats.HostMemoryUsage}}
$vmUsedSpaceGB = Get-VM -Name $vmname | select UsedSpaceGB
$ProvisionedSpaceGB = Get-VM -Name $vmname | select ProvisionedSpaceGB
$vmname | Select Name,
@{N='vmvCPU';E={$vmvCPU}},
@{N='Memory';E={$vmMemory}},
@{N='UsedMemory';E={$vmUsedMemory}},
@{N='UsedSpaceGB';E={$vmUsedSpaceGB}},
@{N='ProvisionedSpaceGB';E={$ProvisionedSpaceGB}},
@{N='%ofvCPU/TotalvCPU';E={[math]::($vmvCPU/$TotalvCPU)}},
@{N='%ofvCPU/TotalCores';E={[math]::($vmvCPU/$TotalESXCores)}},
@{N='%ofUsedSpaceGB/TotalESXSpace';E={[math]::($vmUsedMemory/$TotalESXMemory)}},
@{N='%ofProvisionedSpaceGB/TotalESXSpace';E={[math]::($vmUsedMemory/$TotalESXSpace)}},
}
Try something like this
$vms = Get-VM -Location $esx
$ds = Get-Datastore -RelatedObject $esx
$TotalvCPU = $vms.NumCpu | Measure-Object -Sum | select -ExpandProperty Sum
$TotalESXSpace = $ds.CapacityGB | Measure-Object -Sum | Select-Object -ExpandProperty Sum
$vms | Select Name,
@{N='vmvCPU';E={$_.NumCpu}},
@{N='Memory';E={$_.MemoryMB}},
@{N='UsedMemory';E={$_.ExtensionData.Summary.QuickStats.HostMemoryUsage}},
@{N='UsedSpaceGB';E={$_.UsedSpaceGB}},
@{N='ProvisionedSpaceGB';E={$_.ProvisionedSpaceGB}},
@{N='%ofvCPU/TotalvCPU';E={[math]::Round($_.NumCpu/$TotalvCPU*100)}},
@{N='%ofvCPU/TotalCores';E={[math]::Round($_.NumCpu/$esx.NumCpu*100)}},
@{N='%ofUsedMemory/TotalESXMemory';E={[math]::Round($_.ExtensionData.Summary.QuickStats.HostMemoryUsage/$esx.MemoryTotalMB*100)}},
@{N='%ofProvisionedSpaceGB/TotalESXSpace';E={[math]::Round($_.UsedSpaceGB/$TotalESXSpace*100)}}
}
Blog: lucd.info Twitter: @LucD22 Co-author PowerCLI Reference
Thank you. It's working great.
How to export this to csv file?
One way of doing that is like this
$vms = Get-VM -Location $esx
$ds = Get-Datastore -RelatedObject $esx
$TotalvCPU = $vms.NumCpu | Measure-Object -Sum | select -ExpandProperty Sum
$TotalESXSpace = $ds.CapacityGB | Measure-Object -Sum | Select-Object -ExpandProperty Sum
$vms | Select Name,
@{N='vmvCPU';E={$_.NumCpu}},
@{N='Memory';E={$_.MemoryMB}},
@{N='UsedMemory';E={$_.ExtensionData.Summary.QuickStats.HostMemoryUsage}},
@{N='UsedSpaceGB';E={$_.UsedSpaceGB}},
@{N='ProvisionedSpaceGB';E={$_.ProvisionedSpaceGB}},
@{N='%ofvCPU/TotalvCPU';E={[math]::Round($_.NumCpu/$TotalvCPU*100)}},
@{N='%ofvCPU/TotalCores';E={[math]::Round($_.NumCpu/$esx.NumCpu*100)}},
@{N='%ofUsedMemory/TotalESXMemory';E={[math]::Round($_.ExtensionData.Summary.QuickStats.HostMemoryUsage/$esx.MemoryTotalMB*100)}},
@{N='%ofProvisionedSpaceGB/TotalESXSpace';E={[math]::Round($_.UsedSpaceGB/$TotalESXSpace*100)}}
}
$report | Export-Csv -Path .\report.csv -NoTypeInformation -UseCulture
Blog: lucd.info Twitter: @LucD22 Co-author PowerCLI Reference
How to convert this csv to UTF8noBOM ?
In PSv7 this issue is fixed.
In PSv5.1 you could do something like this
$report | Export-Csv -Path $fileName -Encoding UTF8
$Utf8NoBomEncoding = New-Object System.Text.UTF8Encoding $False
$Content = Get-Content -Path $fileName -Raw
[System.IO.File]::WriteAllLines($fileName, $Content, $Utf8NoBomEncoding)
Blog: lucd.info Twitter: @LucD22 Co-author PowerCLI Reference
Thank you, I tried something like that, but the output is ASCII text.
I have PowerShell 7.0.1
...
$results | Export-CSV -Encoding UTF-8 -Path ReportVMware.csv -NoTypeInformation -UseCulture
$MyPath = "ReportVMware.csv" # read the file in
$MyFile = Get-Content -Raw $MyPath
$Utf8NoBomEncoding = New-Object System.Text.UTF8Encoding $False
$MyPathOut = "ReportVMware_UTF8noBOM.csv" # export it here without BOM
[System.IO.File]::WriteAllLines($MyPathOut, $MyFile, $Utf8NoBomEncoding)
[root@: ~]# file ReportVMware.csv
ReportVMware.csv: UTF-8 Unicode (with BOM) text
[root@: ~]# file ReportVMware_UTF8noBOM.csv
ReportVMware_UTF8noBOM.csv: ASCII text
When I use Encoding UTF8 on Export-Csv the file is UTF8 (no BOM).
At least on a Windows box.
Blog: lucd.info Twitter: @LucD22 Co-author PowerCLI Reference
Thanks, I will check this