服務器待重啟 (Server Pending Reboot)


問題描述

服務器待重啟 (Server Pending Reboot)

我正在嘗試修改我的 PowerShell 腳本,以找到在我們的服務器上檢查 Pending Reboots 的最佳方法。此腳本檢查註冊表項。但是,我發現其他 PowerShell 腳本存在不一致,並希望獲得有關最佳方法的指導。

function PendingReboot ($comp) {
process {
    try {
        $WMI_OS = ""
        $RegCon  = ""
        $WMI_OS = Get‑WmiObject ‑Class Win32_OperatingSystem ‑ComputerName $comp ‑ErrorAction Stop
        if ($?){
        try{ 
            $RegCon = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey([Microsoft.Win32.RegistryHive]"LocalMachine",$comp) 
            If ($WMI_OS.BuildNumber ‑ge 6001){ 
                $RegValueSetupex = ""
                $RegValuePFRO2k8 = ""
                $RegSubKeySM = $RegCon.OpenSubKey("SYSTEM\CurrentControlSet\Control\Session Manager\") 
                $RegValueSetupex = $RegSubKeySM.GetValue("SetupExecute",$null) 
                if ($RegValueSetupex){
                    $RegValueSetupex = $true
                }

                $RegSubKeySM = $RegCon.OpenSubKey("SYSTEM\CurrentControlSet\Control\Session Manager\") 
                $RegValuePFRO2k8 = $RegSubKeySM.GetValue("PendingFileRenameOperations",$null) 
                if ($RegValuePFRO2k8 ){
                    $RegValuePFRO2k8  = $true
                }

                $RegCon.Close()

                if ( $RegValueSetupex ‑eq $true ‑or $RegValuePFRO2k8 ‑eq $true){
                    return '<font color="#FF0000">'+$true
                }
                else {
                    return $false                           
                }
            }
            else{   
                $RegValuePFRO2k3 = $false;
                $RegCon = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey([Microsoft.Win32.RegistryHive]"LocalMachine","$comp") 
                $RegSubKeySM = $RegCon.OpenSubKey("SYSTEM\CurrentControlSet\Control\Session Manager\") 
                $RegValuePFRO2k3 = $RegSubKeySM.GetValue("PendingFileRenameOperations",$null) 
                $RegCon.Close()
                If ($RegValuePFRO2k3) { 
                    return  '<font color="#FF0000">'+$true; 
                }
                else {
                    return $false; 
                } 
            }

        }
        catch {
            return '<font color="#FFFF00">'+"Remote Registry Service KO"
        }
        }
        else {
            throw $error[0].Exception
        }
    }   
    catch {
            return '<font color="#FF0000">'+"RPC Issue"         
    }
}

}


參考解法

方法 1:

Try this.

function PendingBoot($comp) {

    $pendingRebootTests = @(
        @{
            Name = 'RebootPending'
            Test = { Get‑ItemProperty ‑Path 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Component Based Servicing'  Name 'RebootPending' ‑ErrorAction Ignore }
            TestType = 'ValueExists'
        }
        @{
            Name = 'RebootRequired'
            Test = { Get‑ItemProperty ‑Path 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate\Auto Update'  Name 'RebootRequired' ‑ErrorAction Ignore }
            TestType = 'ValueExists'
        }
        @{
            Name = 'PendingFileRenameOperations'
            Test = { Get‑ItemProperty ‑Path 'HKLM:\SYSTEM\CurrentControlSet\Control\Session Manager' ‑Name 'PendingFileRenameOperations' ‑ErrorAction Ignore }
            TestType = 'NonNullValue'
        }
    )


    $session = New‑PSSession ‑Computer SRV1
    foreach ($test in $pendingRebootTests) {
        $result = Invoke‑Command ‑Session $session ‑ScriptBlock $test.Test
        if ($test.TestType ‑eq 'ValueExists' ‑and $result) {
            $true
        } elseif ($test.TestType ‑eq 'NonNullValue' ‑and $result ‑and $result.($test.Name)) {
            $true
        } else {
            $false
        }
    }
    $session | Remove‑PSSession

}

(by JoshDaniel Björk)

參考文件

  1. Server Pending Reboot (CC BY‑SA 2.5/3.0/4.0)

#powershell #server #Windows






相關問題

玩弄 C# 加密 (Playing around with C# encryption)

查找具有特定 startname 的特定服務 (Finding specific services with specific startname)

試圖從事件日誌中獲取數據到電子郵件中的 html (Trying to get data from event logs into html in email)

如何通過powershell獲取請求的authtoken (How to obtain authtoken for request via powershell)

如何在錯誤時繼續使用 &$var 調用可執行文件 (How to continue on error a call to an executable using &$var)

在同一範圍內從 c# 調用多個 powershell 命令 (Invoke multiple powershell commands from c# on the same scope)

如何在 Powershell 二進制模塊(.Net Standard 和 Nuget)中處理公共和私有依賴項和打包 (How to handle public and private dependencies and packaging in Powershell binary module (.Net Standard & Nuget))

如何使用參數(描述空白)獲取廣告中的所有 OU - 沒有描述? (How to get all OU in Ad with parameter (description blank ) - without description?)

遠程服務器返回錯誤:(400) 錯誤請求。在 C:\Program Files\WindowsPowerShell\Modules\CosmosDB\3.1.0.293\CosmosDB.psm1 (The remote server returned an error: (400) Bad Request. At C:\Program Files\WindowsPowerShell\Modules\CosmosDB\3.1.0.293\CosmosDB.psm1)

Powershell 檢查文件類型 (Powershell check file type)

服務器待重啟 (Server Pending Reboot)

PowerShell 的 Invoke-WebRequest 在 Docker 容器中不起作用 (PowerShell's Invoke-WebRequest not working within a Docker Container)







留言討論