将日期时间从wmiobject转换为datetime

时间:2016-06-09 16:30:02

标签: powershell datetime typeconverter get-wmiobject

尝试在日期之间获得差异:今天的日期。来自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".

有什么想法吗?

3 个答案:

答案 0 :(得分:2)

  1. 删除-Format d并比较Date - DateTime - 对象的属性,以便仅获取days-diff。
  2. 您的$Lastreboottime - 变量引用了包含计算机名csnameLastBootUpTime的对象,因此您需要访问LastBootUpTime
  3. 尝试:

    $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)

  1. -Format d移除Get-Date。您需要DateTime个对象,而不是字符串。
  2. $Lastreboottime是一个包含2个属性的对象:csnamelastbootuptime。您必须使用lastbootuptime属性。
  3. 实施例

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