So it’s possible to loop through all the attributes even if you don’t know their identifier (yet). Following example in Javascript does exactly that, to trace out all attributes of a VM-Object (Type: VcVirtualMachine) and its Datastores. (you can download the full example below)
The script
//print out properties of a VM-object
//loop through all properties (leverage Javascript's
// "object is an associative array" characteristic)
for (var i in vm) { (//vm is an input parameter of Type VcVirtualMachine
//we have to catch some 'not defined' errors if object has
//an attribute of type "dynamic property")
try {
//print out in form "propertyname:::value"
System.debug(i + ":::" + vm[i]);
} catch (ex) {
//just ignore error and continue with next iteration(=property)
continue;
}
}
//other example: For a datastore
System.debug("================================");
System.debug("====NOW FOR THE DATASTORE===");
System.debug("================================");
var vmsDatastores = vm.datastore;
System.debug("VM's Datastore(-object): " + vmsDatastores);
//vm.datastore return an ARRAY OF DATASTORES itself, so we have
//wrap it in another loop
for (var k in vmsDatastores) {
var curDatastore = vmsDatastores[k];
System.debug("******** NEXT DATASTORE: *****");
System.debug("curDatastore: " + curDatastore);
//same loop as above for each datastore
//play it again, Sam!
for (var j in curDatastore) {
try{
System.debug(j + ":::" + curDatastore[j]);
} catch (ex) {
continue;
}
}
//end same loop as above
} //end loop through Datastore-Array
The results
The output looks like this:
To interpret the results, an example line of the output:
[2012-03-06 09:45:23.844] [D] resourcePool:::DynamicWrapper (Instance) : \\ [VcResourcePool]-[class com.vmware.vmo.plugin.vi4.model.VimResourcePool] \\ -- VALUE : ResourcePool<resgroup-98>
The first part resourcePool is the name of the attribute.
After the ::: separator you get the object type [VcResourcePool] of this attribute, the providing class in the vCenter-Plugin of vCO,
and finally after the – separator you get the value of the attribute, in this case it’s with ResourcePool<resgroup-98> a Moref (Managed Object Reference) to the resource pool the VM is located in.
Now you can use the .-Operator in JavaScript to access the attributes, as in line 21 in the script where we do the cram again for all Datastores the VM is related to.
Only caveat: Just from the System.debug()-Output it’s NOT possible to see if an attribute is just a single object or an Array!
(read carefully the example again: vm.datastore (line 21) returns and Array of VcDatastores, but you cannot see this just from the output of line 22)
Conclusion:
Always have the vSphere API Reference open in background when working with vCenter objects in vCO!






Steve Jin: VMware VI and vSphere SDK
David Flanagan: JavaScript – The Definitive Guide
Marijn Haverbeke: Eloquent JavaScript
Cody Bunch: Automating vSphere: With VMware vCenter Orchestrator