$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
为什么当我运行第一组时,我会以一种方式获得时间,但是当我以第二种方式运行它时,我会以完全不同的格式获得它?
答案 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"