当我运行以下代码时,它会输出我想要的信息,但我最终输出有问题。它将我的UpTime显示为天,小时,分钟,秒。我想要几天和几小时。我想将Uptime移到我列表的最后一个位置。现在的出局是Uptime,Computer,LastBootupTime。
Function Get-UpTime
{ Param ([string[]]$servers)
Foreach ($s in $servers)
{
$os = Get-WmiObject -class win32_OperatingSystem -cn $s -ErrorAction SilentlyContinue
New-Object psobject -Property @{computer=$s;
LastBootUpTime = [Management.ManagementDateTimeConverter]::ToDateTime( (Get-WmiObject - Class Win32_OperatingSystem -Computer $s | Select -Exp LastBootUpTime) )
UpTime = (Get-Date) – [System.Management.ManagementDateTimeconverter]::ToDateTime((Get-WmiObject - Class Win32_OperatingSystem -Computer $s | Select -Exp LastBootUpTime))
}
}}
Get-UpTime -servers $servers|
ConvertTo-Html -As Table -body "
<h1>Server Uptime Report</h1>
The following report was run on $(get-date)" >> $path
Invoke-Item $path
答案 0 :(得分:0)
下一个代码段提供了所需的输出:在列表中最后显示UpTime
为days.hours:minutes
;此外,显示所有经过测试的服务器(如果RPC服务器不可用,则显示N/A
代替LastBootUpTime
和UpTime
。
Function Get-UpTime
{ Param ([string[]]$servers)
Foreach ($s in $servers) {
Try
{ $os = Get-WmiObject -class win32_OperatingSystem -cn $s
$ST = [System.Management.ManagementDateTimeconverter]::
ToDateTime(($os | Select -Exp LastBootUpTime))
$UT = (Get-Date) – $ST # Days.Hours:Minutes:Seconds.MillisecondsFraction
# e.g. 114.12:32:42.6025504
New-Object psobject -Property @{
Computer = $s
#UpTime = $UT.ToString().Substring(0, $UT.ToString().Length - 11)
UpTime = '' + $UT.Days + '.' + $UT.Hours + ':' + $UT.Minutes
LastBootUpTime = $ST
}
}
Catch
{ New-Object psobject -Property @{
Computer = $s
UpTime = "N/A"
LastBootUpTime = "N/A"
}
}
}
}
Get-UpTime -servers $servers |
ConvertTo-Html -As Table -Property Computer, LastBootUpTime, UpTime -body "
<h1>Server Uptime Report</h1>
The following report was run on $(get-date)" >> $path
Invoke-Item $path