powershell - 计算开关循环中的时间跨度?
问题描述
我需要创建一个代码,我可以在其中找到以天/小时/分钟为单位的总体正常运行时间......所以我需要某种方法来计算每个循环的时间跨度,然后最后将时间跨度结果相加以获得总体正常运行时间数.
这是我到目前为止所拥有的
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
解决方案
你考虑过使用(Get-CimInstance Win32_OperatingSystem).LastBootUpTime
吗?
结果无论如何都是日期时间格式,并且更容易计算。
它将允许您对一台或多台计算机运行命令:
Get-CimInstance Win32_OperatingSystem -ComputerName Computer1, Computer2 |
select LastBootUpTime, PSComputerName
还有另一个提示:尽量避免循环处理计算机,除非您没有某些特定要求。如果您使用 Invoke-Command,它将同时针对 32 台计算机并行处理命令(默认情况下),因此它比在循环中串行处理要快得多。
希望能帮助到你。
最好的问候,伊万
推荐阅读
- c# - 根据该信息获取要删除的单个文件
- recursion - Ocaml 列表递归
- asp.net-core - 获取 API 的 URI
- javascript - js函数内部的push()返回未定义
- python-3.x - Python 中的 Twitter API v2 - 日期时间转换问题
- asp.net-core - devops nuget 无法找到 microsoft.graph.auth 预览
- gimp - 保存带有透明边框的PNG
- angular - ngSwitch 不会在开关更改时破坏子组件
- ms-access - 保护 Access 前端的建议
- c++ - 如何在字符串 C++ 中用“aaa”替换字符“a”?