Advanced Windows PowerShell Scripting Video Training

Advanced Windows PowerShell Scripting Video Training
Advanced Windows PowerShell Scripting Video Training

Wednesday, June 18, 2014

New way to convert WMI time properties

I picked up new way to convert time that is retrieved from Get-WMIObject.  One of my past students, Zak Shupp from HP, sent me a function that we was working and it had a .NET object that I never seen before.  For those of you in a PowerShell V2 environment, you do not get to benefit from the Get-CIMInstance cmdlet.  Here is an example of the output of the same class with a focus on a DATETIME property:

PS C:\> Get-WmiObject Win32_Operatingsystem |

Select-Object -ExpandProperty InstallDate

20131113102519.000000-300

 

PS C:\> Get-CIMInstance Win32_Operatingsystem |

Select-Object -ExpandProperty InstallDate

 

Wednesday, November 13, 2013 10:25:19 AM

 

The first command pulls a string of characters to represent the date and time of the operating system installation.  This is not exactly intuitive.  The last 3 digits are for the time zone.  Try explaining that one.  The second command pulls this data as a DATETIME object, which is what PowerShell cmdlets like.  To correct this with Get-WMIObject, a scriptmethod called ConvertToDateTime is provided by the Get-WMIObject cmdlet to all objects that it recovers for you.  Here is how it is used.

PS C:\> (Get-WMIObject Win32_Operatingsystem).ConvertToDateTime((Get-WmiObject Win32_Operatingsystem).InstallDate)

 

 

 

Wednesday, November 13, 2013 10:25:19 AM

 

Not cool.  Now, we will do it Zak’s way using the System.Management.ManagementTimeConverter object.

PS C:\> $OS = Get-WmiObject Win32_OperatingSystem

PS C:\> [System.Management.ManagementDateTimeconverter]::ToDateTime($OS.InstallDate)

 

 

Wednesday, November 13, 2013 10:25:19 AM

 

Much better! Ok, not as good as the CIM cmdlets, but Zak has simplified the process for those who need to use Get-WMIObject in their environments.  Remember, once all of your systems are at PowerShell V3 or better, start coding with Get-CIMInstance and begin to phase out Get-WMIObject.

No comments: