############################## # Script created by Hugo Peeters # # http://www.peetersonline.nl # ############################## # Variables $VCServerName = "MYVCSERVER" $CustomFieldName = "Version" $ManagedObjectType = "HostSystem" # 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 $VMHosts = Get-VMHost $VMHostViews = $VMHosts | Get-View ForEach ($VMHostView in $VMHostViews) { $Version = $VMHostView.Config.Product.FullName # Compare value to current value If ($Version -ne ($VMView.CustomValue | ?{$_.Key -eq $myCustomField.Key}).Value) { # Set Custom Value $VMHostView.setCustomValue($CustomFieldName,$Version) } } Disconnect-VIServer -Confirm:$False