PowerShell:显示所有 Windows 服务器的正常运行时间
假设您想要了解域中所有 Windows 服务器的正常运行时间。这是一个非常重要的信息,您应该定期查看服务的正常运行时间。你还记得5个9吗?我说的是 99,999% 的服务正常运行时间。众所周知,这一价值是优质服务的基准。
目标
我喜欢先从目标开始。然后,读者有机会了解目标是什么,并决定是否值得进一步阅读。正如所承诺的,我将向您提供一个 Powershell 命令,该命令可以从所有已启用域加入的 Windows 服务器获取所有正常运行时间。我创建了一个没有任何参数的小函数,名为 Get-UpTimeAllServer。
输出将如下所示:
如果由于网络故障、缺少 WinRM 配置或任何其他原因而无法访问您的一台服务器,则该服务器将被标记为“无法访问服务器”。
功能
上面显示的所有内容都包装在一个函数中。这里是:
function Get-UpTimeAllServer {
# .SYNOPSIS
# Get-UpTimeAllServer is an advanced Powershell function. It shows the uptime of all domain joined and enabled Windows servers.
# .DESCRIPTION
# Uses Get-CimInstance and a Try/Catch block.
# .PARAMETER
# None
# .EXAMPLE
# Get-UpTimeAllServer
# .NOTES
# Author: Patrick Gruenauer
# Web: https://sid-500.com
$servers=(Get-ADComputer -Filter 'operatingsystem -like "*server*"-and enabled -eq "true"').Name
$result=@()
Foreach ($s in $servers) {
Try {
$up=(Get-CimInstance -ClassName win32_operatingsystem -ComputerName $s -ErrorAction Stop).LastBootUpTime
$uptime=((Get-Date) - $up)
$result+=New-Object -TypeName PSObject -Property ([ordered]@{
'Server'=$s
'LastBootUpTime'=$up
'Days'=$uptime.Days
'Hours'=$uptime.Hours
'Minutes'=$uptime.Minutes
'Seconds'=$uptime.Seconds
})
}
Catch {
$result+=New-Object -TypeName PSObject -Property ([ordered]@{
'Server'=$s
'LastBootUpTime'='Server could not be reached'
})
}
}
}
您可以在这里下载该功能:
获取所有服务器的启动时间
在 PowerShell 中运行此脚本或将其复制到
C:\Program Files\WindowsPowerShell\Modules
在那里创建一个 Get-UpTimeAllServer 文件夹,并将下载的文件保存为 PSM1 文件。然后每次启动 PowerShell 时该命令都可用。
下次再见,带来一些很酷的 Powershell 东西!


