converting datetime from wmiobject to datetime

TOGEEK picture TOGEEK · Jun 9, 2016 · Viewed 8.7k times · Source

Trying to get the difference in days between to dates: Today's date. and a date/time from a wmiobject (this was taken from a post from the PendingReboot script from Hey, Scripting! blog):

$Lastreboottime = Get-WmiObject win32_operatingsystem -ComputerName $Computer | 
select csname, @{LABEL='LastBootUpTime';EXPRESSION=$_.ConverttoDateTime($_.lastbootuptime)}} 
$Today = Get-Date -Format d
$DiffDays = $Today - $Lastreboottime 

The result of $Today is

09/06/2016

and $Lastreboottime is

05/05/2016 11:13:21 

So I want to get rid of the time but not sure how to do this.

Secondly, I get this error if I were to run the script, though I guess this may go away if I am able to extract the date only in $Lastreboot

Cannot convert the "@{csname=JDWTAWEB1; LastBootUpTime=05/05/2016 11:13:21}" value of type "Selected.System.Management.ManagementObject" to type "System.DateTime".

Any ideas?

Answer

Frode F. picture Frode F. · Jun 9, 2016
  1. Remove -Format d and compare the Date-properties of the DateTime-objects to get the days-diff only.
  2. Your $Lastreboottime-variable references an object with both computername csname and the LastBootUpTime, so you need to access the LastBootUpTime

Try:

$Lastreboottime = Get-WmiObject win32_operatingsystem | 
select csname, @{LABEL='LastBootUpTime';EXPRESSION={$_.ConverttoDateTime($_.lastbootuptime)}}

$Today = Get-Date
$DiffDays = $Today.Date - $Lastreboottime.LastBootUpTime.Date

$DiffDays.TotalDays
13