首页 > 解决方案 > 计算开关循​​环中的时间跨度?

问题描述

我需要创建一个代码,我可以在其中找到以天/小时/分钟为单位的总体正常运行时间......所以我需要某种方法来计算每个循环的时间跨度,然后最后将时间跨度结果相加以获得总体正常运行时间数.

这是我到目前为止所拥有的

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

标签: powershelltimespan

解决方案


你考虑过使用(Get-CimInstance Win32_OperatingSystem).LastBootUpTime吗?
结果无论如何都是日期时间格式,并且更容易计算。

它将允许您对一台或多台计算机运行命令:

Get-CimInstance Win32_OperatingSystem -ComputerName Computer1, Computer2 | 
select LastBootUpTime, PSComputerName

还有另一个提示:尽量避免循环处理计算机,除非您没有某些特定要求。如果您使用 Invoke-Command,它将同时针对 32 台计算机并行处理命令(默认情况下),因此它比在循环中串行处理要快得多。

希望能帮助到你。

最好的问候,伊万


推荐阅读