0

试图获得日期之间的天数差异:今天的日期。以及来自 wmiobject 的日期/时间(取自 Hey, Scripting! blog 的 PendingReboot 脚本的帖子):

$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".

有任何想法吗?

4

3 回答 3

2
  1. 删除-Format d并比较 -objects 的Date-properties 以DateTime仅获取 days-diff。
  2. 您的$Lastreboottime-variable 引用了具有计算机名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
于 2016-06-09T17:24:51.400 回答
1

我认为 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
于 2016-06-09T17:04:03.807 回答
0
  1. -Format d从中删除Get-Date。您需要DateTime对象,而不是字符串。
  2. $Lastreboottime是一个具有 2 个属性的对象:csnamelastbootuptime。你必须使用lastbootuptime财产。

例子:

$Today = Get-Date
$DiffDays = $Today - $Lastreboottime.lastbootuptime
于 2016-06-09T16:57:21.387 回答