如何检查服务器是否需要重新启动

问题描述 投票:0回答:2

如何检查 Windows 服务器是否需要重新启动?我正在制作一个安装程序项目。当用户运行此安装程序时,如果操作系统上有挂起的重新启动,则不应继续。

windows server reboot
2个回答
2
投票

使用Powershell

如果您想确定哪些服务器需要重新启动,您会喜欢这个 PowerShell 脚本来检查状态。事实证明,识别等待重新启动的服务器的一个简单方法是检查注册表。此信息存储在注册表的 HKeyLocalMachine 配置单元中。 PowerShell 是为使用注册表而诞生和成长的。 Registry 是内置的 PowerShell 提供程序之一。甚至已经有一个 PSDrive 连接到该注册表配置单元!您可以像浏览文件系统一样浏览注册表。

更改为注册表驱动器。

// Set-Location 也可以通过其别名 - CD 和 SL 来调用

设置位置HKLM:

// Get-ChildItem 也可以通过其别名 - Dir 和 LS 来调用

获取子项

哇!超级简单,对吧? 现在您只需要知道“待重启”位置在哪里。有几个地方需要检查。

HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate\自动更新\RebootRequired 是通过自动更新安装的补丁注册需要重新启动的地方。

HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\基于组件的服务\RebootPending 是另一个可以识别待重启的地方。

HKLM\SYSTEM\CurrentControlSet\Control\会话管理器 又是另一个。最后,还有配置管理器,如果存在,可以通过 WMI 进行查询。

我发现了一个我非常喜欢检查所有四个位置的功能。我需要用一些参数来包装它来检查远程计算机,但总的来说这是一个很好的开始。我已对该函数进行了调整,使其在满足第一个条件时返回 $true,因为我只关心计算机是否正在等待重新启动,而不关心重新启动的源来自何处。

改编自https://gist.github.com/altrive/5329377

基于 http://gallery.technet.microsoft.com/scriptcenter/Get-PendingReboot-Query-bdb79542


function Test-PendingReboot
{
 if (Get-ChildItem "HKLM:\Software\Microsoft\Windows\CurrentVersion\Component Based Servicing\RebootPending" -EA Ignore) { return $true }
 if (Get-Item "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate\Auto Update\RebootRequired" -EA Ignore) { return $true }
 if (Get-ItemProperty "HKLM:\SYSTEM\CurrentControlSet\Control\Session Manager" -Name PendingFileRenameOperations -EA Ignore) { return $true }
 try { 
   $util = [wmiclass]"\.\root\ccm\clientsdk:CCM_ClientUtilities"
   $status = $util.DetermineIfRebootPending()
   if(($status -ne $null) -and $status.RebootPending){
     return $true
   }
 }catch{}



return $false
}


0
投票

你如何使用这个?我看到了这个函数,但是你用什么来得到答案?

© www.soinside.com 2019 - 2024. All rights reserved.