尝试在日期之间获得差异:今天的日期。来自wmiobject的日期/时间(这是来自Hey,Scripting!博客的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".
有什么想法吗?
答案 0 :(得分:2)
-Format d
并比较Date
- DateTime
- 对象的属性,以便仅获取days-diff。$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
答案 1 :(得分: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
答案 2 :(得分:0)
-Format d
移除Get-Date
。您需要DateTime
个对象,而不是字符串。$Lastreboottime
是一个包含2个属性的对象:csname
和lastbootuptime
。您必须使用lastbootuptime
属性。$Today = Get-Date
$DiffDays = $Today - $Lastreboottime.lastbootuptime