Преобразование даты и времени из wmiobject в datetime

Попытка получить разницу в днях между датами: сегодняшняя дата. и дата / время от объекта wmiobject (это было взято из сообщения из сценария PendingReboot из блога Hey, Scripting!):

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

Результат $Today

09/06/2016

и $Lastreboottime

05/05/2016 11:13:21 

Поэтому я хочу избавиться от времени, но не знаю, как это сделать.

Во-вторых, я получаю эту ошибку, если мне нужно запустить скрипт, хотя я думаю, что это может исчезнуть, если я смогу извлечь дату только в $ Lastreboot

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

Есть идеи?

3 ответа

Решение
  1. Удалить -Format d и сравнить Date-свойства DateTime-объекты, чтобы получить только разницу дней.
  2. Ваш $Lastreboottimeпеременная ссылается на объект с обоим именем csname и LastBootUpTimeтак что вам нужно получить доступ к LastBootUpTime

Пытаться:

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

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

$DiffDays.TotalDays
13

Я думаю, что преобразованию WMIObject может потребоваться получить объект Datetime посредством правильно отформатированной строки. Я сделал это (минус -Computername $Computer часть) и вроде бы сработало.

[string]$BootTimeString=(Get-WmiObject win32_operatingsystem -ComputerName $Computer).lastbootuptime -replace '\..*',''

$BootTimeDT=[datetime]::ParseExact($BootTimeString,'yyyyMMddHHmmss',$null)

$DiffDays = (NEW-TIMESPAN –Start $BootTimeDT –End (Get-Date)).Days
  1. Удалить -Format d от Get-Date, Тебе нужно DateTime объект, а не строка.
  2. $Lastreboottime это объект с 2 свойствами: csname а также lastbootuptime, Вы должны использовать lastbootuptime имущество.

Пример:

$Today = Get-Date
$DiffDays = $Today - $Lastreboottime.lastbootuptime
Другие вопросы по тегам