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.
Comments