############################## # Script created by Hugo Peeters # # http://www.peetersonline.nl # ############################## # Variables $VCServerName = "MYVCSERVER" $CustomFieldName = "RDM Size (GB)" $ManagedObjectType = "VirtualMachine" # Script $VC = Connect-VIServer $VCServerName $SI = Get-View ServiceInstance $CFM = Get-View $SI.Content.CustomFieldsManager $myCustomField = $CFM.Field | Where {$_.Name -eq $CustomFieldName} If (!$myCustomField) { # Create Custom Field $FieldCopy = $CFM.Field[0] $CFM.AddCustomFieldDef($CustomFieldName,$ManagedObjectType,$FieldCopy.FieldDefPrivileges,$FieldCopy.FieldInstancePrivileges) } # Fill Custom Fields $VMs = Get-VM ForEach ($VM in $VMs) { $RDMSize = [math]::Round((($VM | Get-HardDisk | Where {$_.DiskType -ne "flat"} | Measure-Object CapacityKB -Sum).Sum * 1KB / 1GB),0) $VMView = $VM | Get-View # Compare value to current value If ($RDMSize -ne ($VMView.CustomValue | ?{$_.Key -eq $myCustomField.Key}).Value) { # Set Custom Value $VMView.setCustomValue($CustomFieldName,$RDMSize ) } } Disconnect-VIServer -Confirm:$False