$Report_VSI = @()
get-vm -Name MCS-* | Sort Name | ForEach-Object {
$vm = Get-View $_.ID
$vms = "" | Select-Object Name, Hostname, Host, VMState, IPAddress, TotalCPU, CoresPerSocket, TotalMemoryGB, CPUHotAdd, MemoryHotAdd, UsedSpaceGB, ProvisionedSpaceGB, ToolsStatus, ToolsVersion, HardwareVersion, Guest
$vms.Name = $vm.Name
$vms.HostName = $vm.guest.hostname
$vms.Host = Get-View -Id $vm.Runtime.Host -property Name | select -ExpandProperty Name
$vms.VMState = $vm.summary.runtime.powerState
$vms.IPAddress = $vm.guest.ipAddress
$vms.TotalCPU = $vm.summary.config.numcpu
$vms.CoresPerSocket = $vm.config.hardware.NumCoresPerSocket
$vms.TotalMemoryGB = $_.MemoryGB
$vms.CPUHotAdd = $vm.Config.CpuHotAddEnabled
$vms.MemoryHotAdd = $vm.Config.MemoryHotAddEnabled
$vms.UsedSpaceGB = @{n="UsedSpace(GB)"; E={[math]::round($_.UsedSpaceGB)}}
$vms.ProvisionedSpaceGB = @{n="ProvisionedSpace(GB)"; E={[math]::round($_.ProvisionedSpaceGB)}}
$vms.ToolsStatus = $vm.guest.toolsstatus
$vms.ToolsVersion = $vm.config.tools.toolsversion
$vms.HardwareVersion = $vm.Config.Version
$vms.Guest = $vm.Summary.Config.GuestFullName
$Report_VSI += $vms
}
The above code works for everything but UsedSpaceGB and ProvisionedSpaceGB. If I set those to on'y look at $_.*field* it returned the correct data. Any help or suggestions are welcome!
You are using the syntax for a calculated property, but that is only valid on the property parameter of a Select-Object cmdlet.
Just do
$Report_VSI = @()
Get-VM -Name MCS_* | Sort Name | ForEach-Object {
$vm = Get-View $_.ID
$vms = "" | Select-Object Name, Hostname, Host, VMState, IPAddress, TotalCPU, CoresPerSocket, TotalMemoryGB, CPUHotAdd, MemoryHotAdd, UsedSpaceGB, ProvisionedSpaceGB, ToolsStatus, ToolsVersion, HardwareVersion, Guest
$vms.Name = $vm.Name
$vms.HostName = $vm.guest.hostname
$vms.Host = Get-View -Id $vm.Runtime.Host -property Name | select -ExpandProperty Name
$vms.VMState = $vm.summary.runtime.powerState
$vms.IPAddress = $vm.guest.ipAddress
$vms.TotalCPU = $vm.summary.config.numcpu
$vms.CoresPerSocket = $vm.config.hardware.NumCoresPerSocket
$vms.TotalMemoryGB = $_.MemoryGB
$vms.CPUHotAdd = $vm.Config.CpuHotAddEnabled
$vms.MemoryHotAdd = $vm.Config.MemoryHotAddEnabled
$vms.UsedSpaceGB = [math]::round($_.UsedSpaceGB)
$vms.ProvisionedSpaceGB = [math]::round($_.ProvisionedSpaceGB)
$vms.ToolsStatus = $vm.guest.toolsstatus
$vms.ToolsVersion = $vm.config.tools.toolsversion
$vms.HardwareVersion = $vm.Config.Version
$vms.Guest = $vm.Summary.Config.GuestFullName
$Report_VSI += $vms
}
Blog: lucd.info Twitter: @LucD22 Co-author PowerCLI Reference
You are using the syntax for a calculated property, but that is only valid on the property parameter of a Select-Object cmdlet.
Just do
$Report_VSI = @()
Get-VM -Name MCS_* | Sort Name | ForEach-Object {
$vm = Get-View $_.ID
$vms = "" | Select-Object Name, Hostname, Host, VMState, IPAddress, TotalCPU, CoresPerSocket, TotalMemoryGB, CPUHotAdd, MemoryHotAdd, UsedSpaceGB, ProvisionedSpaceGB, ToolsStatus, ToolsVersion, HardwareVersion, Guest
$vms.Name = $vm.Name
$vms.HostName = $vm.guest.hostname
$vms.Host = Get-View -Id $vm.Runtime.Host -property Name | select -ExpandProperty Name
$vms.VMState = $vm.summary.runtime.powerState
$vms.IPAddress = $vm.guest.ipAddress
$vms.TotalCPU = $vm.summary.config.numcpu
$vms.CoresPerSocket = $vm.config.hardware.NumCoresPerSocket
$vms.TotalMemoryGB = $_.MemoryGB
$vms.CPUHotAdd = $vm.Config.CpuHotAddEnabled
$vms.MemoryHotAdd = $vm.Config.MemoryHotAddEnabled
$vms.UsedSpaceGB = [math]::round($_.UsedSpaceGB)
$vms.ProvisionedSpaceGB = [math]::round($_.ProvisionedSpaceGB)
$vms.ToolsStatus = $vm.guest.toolsstatus
$vms.ToolsVersion = $vm.config.tools.toolsversion
$vms.HardwareVersion = $vm.Config.Version
$vms.Guest = $vm.Summary.Config.GuestFullName
$Report_VSI += $vms
}
Blog: lucd.info Twitter: @LucD22 Co-author PowerCLI Reference