我需要创建一个代码,以天/小时/分钟为单位查找总的正常运行时间... 因此,我需要一种方法来对每个循环进行时间间隔,然后最后将时间间隔结果相加以获得总的正常运行时间数。
这是我到目前为止所拥有的
function Get-UpTime
{
param($computername='localhost')
Get-WmiObject win32_NTLogEvent -Filter 'Logfile="System" and EventCode>6004 and EventCode<6007' -ComputerName $computername | Sort-Object -Property TimeGenerated |
ForEach-Object {
$rv = $_ | Select-Object EventCode,TimeGenerated
switch ($_.EventCode) {
6005 { $rv.EventCode = 'start';$start=$_.TimeGenerated }
6006 { $rv.EventCode = 'shutdown';$shutdown=$_.TimeGenerated}
}
$rv.TimeGenerated = $_.ConvertToDateTime($_.TimeGenerated)
$rv
}
}
Get-Uptime
答案 0 :(得分:0)
您是否考虑过使用(Get-CimInstance Win32_OperatingSystem).LastBootUpTime
?
无论如何,结果将为日期时间格式,并且更易于计算。
它将允许您在一台或多台计算机上运行命令:
Get-CimInstance Win32_OperatingSystem -ComputerName Computer1, Computer2 |
select LastBootUpTime, PSComputerName
还有另一个提示:除非您没有特定要求,否则请尽量避免循环处理计算机。 如果您使用Invoke-Command,则它将同时对32台计算机并行处理命令(默认情况下),因此比循环串行处理要快得多。
希望有帮助。
最好的问候, 伊万
答案 1 :(得分:0)
您可以使用WMI查询轻松完成此操作:
Get-WmiObject -Class Win32_OperatingSystem -ComputerName Computer1 | Select-Object __Server,@{Label="Uptime"; Expression={(Get-Date) - ($_.ConvertToDateTime($_.LastBootUpTime))}}
致谢。