Powershell计算机的最后启动时间显示两个不同的输出

时间:2016-12-07 20:04:10

标签: powershell time output

$OSInfo = get-wmiobject -class win32_operatingsystem -computername c83323

($OSInfo `
    | Format-List `
        @{Name="OS Boot Time";Expression={$_.ConvertToDateTime($_.LastBootUpTime)}} `
    | Out-String).Trim() #Output OS Name, Boot Time, and Install Date
  

输出 - >操作系统启动时间:2016年6月12日下午4:09:20

$osinfo = get-wmiobject -class win32_operatingsystem -computername c83323
    $osinfo.ConvertToDateTime($osinfo.LastBootUpTime)
  

输出 - > 2016年12月6日星期二下午4:09:20

为什么当我运行第一组时,我会以一种方式获得时间,但是当我以第二种方式运行它时,我会以完全不同的格式获得它?

2 个答案:

答案 0 :(得分:3)

这是因为您在第一种情况下使用Format-List和/或Out-String。使用这些时,PowerShell格式化DateTime对象的输出,就像你写这个:

"$(Get-Date)"

答案 1 :(得分:1)

第二个实例的输出将为 DateTime 类型。此格式取决于您在系统上选择的日期时间格式。 我修改了你的代码以获得类型:

$osinfo = get-wmiobject -class win32_operatingsystem; ($osinfo.ConvertToDateTime($osinfo.LastBootUpTime)).GetType()

但是在您的第一个实例中,您使用的是名为计算属性 (check this link) 的内容,它基本上允许您以您喜欢的方式“格式化”并显示属性。在您的情况下,通过您提供的表达式,您的日期和时间已转换为数组,因此它会丢失其格式。

获取类型:

($OSInfo | Format-List @{Name="OS Boot Time";Expression={$_.ConvertToDateTime($_.LastBootUpTime)}}).GetType()

上述类型为数组

修改

以下片段应该可以解决问题!

@("Computer1","Computer2") | foreach { 
    $OSInfo = get-wmiobject -class win32_operatingsystem -computername $_;
    "Boot time for Computer: $_ = " + $OSInfo.ConvertToDateTime($OSInfo.LastBootUpTime);    
} | Out-File "C:\thefolderYouPrefer\boottime.txt"