Setting ‘null’ values on vCAC entity properties with PowerShell

When using the vCAC mgmtContext you can get and set any exposed property in the repository. When I recently used that to set the “CurrentTask” property of a VirtualMachine object I noticed that the initial value of the property was “null” but when I wrote a PowerShell ‘$null’ value into it to reset it to its initial state, actually an empty string was saved to the property.

After some investigation of the ODATA REST stream I found that the underlying data type was derived from ADO DataServices. However, here a ‘null’ string is treated differently: as a special attribute ‘m:null’ within the property. After some fiddling with PowerShell I found that you can emulate this with the following expression:

$vm.CurrentTask = [NullString]::Value;

The REST stream then looks like this (check the highlighted line):

MERGE https://vcac52/Repository/Data/ManagementModelEntities.svc/VirtualMachines(guid'2b29a665-4612-4712-83c5-ffa87f3d6f30') HTTP/1.1
User-Agent: Microsoft ADO.NET Data Services
DataServiceVersion: 1.0;NetFx
MaxDataServiceVersion: 2.0;NetFx
Repository-Cache: AuthorizationStore=Fri, 25 Oct 2013 13:50:45 GMT;ModelConfiguration=Mon, 14 Oct 2013 14:38:27 GMT;ReadPermissions=Wed, 19 Jun 2013 01:45:17 GMT;WritePermissions=Wed, 19 Jun 2013 01:45:45 GMT
Accept: application/atom+xml,application/xml
Accept-Charset: UTF-8
Content-Type: application/atom+xml
Authorization: Negotiate 1XhGSgpeHs/t1u2M+ySIDsiLYQ2pcJ6uOt1Qecx+DBrEAlg/uwIIDVYDPbyQqU8bZ3lMB5r+BkDoOfECKGDbg13s8AVQHzExyvp2qYszPLiA59WtgO6bhL1POGsMF9jwoqCt6HA=
Host: vcac52
Content-Length: 3533
Expect: 100-continue

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<entry xmlns:d="" xmlns:m="" xmlns="">
  <category scheme="" term="DynamicOps.ManagementModel.VirtualMachine" />
  <title />
    <name />
  <content type="application/xml">
      <d:BlueprintType m:type="Edm.Byte">1</d:BlueprintType>
      <d:ConnectToVdi m:type="Edm.Boolean">false</d:ConnectToVdi>
      <d:CurrentTask m:null="true" />
      <d:ExpireDays m:type="Edm.Int32">1</d:ExpireDays>
      <d:Expires m:type="Edm.DateTime">2013-10-16T08:58:03.307</d:Expires>
      <d:FileLevelCloneImageName m:null="true" />
      <d:Flags m:type="Edm.Int64" m:null="true" />
      <d:GuestOS m:null="true" />

Once more, PowerShell to the rescue …

Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: