System.DateTime Objects in Powershell/PowerCLI

Just something cool I learned while listening to a technet webcast featuring Sean Kearney (aka the energized tech)  working w/ DateTime objects.  In particular, I was messing w/ pruning vm datastore statistical data.

Example:  Wanted to gather an average disk usage metric from vm’s on a particular datastore, but only for the weekdays between 8 and 5. 

Solution:

   1: #Gets the datastore information
   2: $DS = Get-Datastore Somedatastore 
   3: #Gets VM's associated w/ somedatastore and their disk.usage.average statistic.
   4: $VMStats = $DS | get-vm | get-stat -stat disk.usage.average
   5: #Filters out weekends and only pulls stats between 8am and 5pm.
   6: $VMStats | `
   7: where-object {
   8: $_.timestamp.hour -gt "7" `
   9: -and $_.timestamp.hour -lt "18" `
  10: -and $_.timestamp.dayofweek -notmatch "Saturday|Sunday"
  11: }

Let me tell you, it was awesome finding out the get-stat cmdlet pulls date/time properties back as proper datetime objects.  Thanks again Sean!


[Update: FYI for those who want to know how I determined properties of the timestamp object.  Simply run the script up to step 5, then type $VMStats.timestamp | get-member]

No comments: