2017-04-24 13 views
0

Windows 서버를 재부팅해야하는지 어떻게 확인할 수 있습니까? 설치 프로젝트를 만들고 있습니다. 사용자가이 설치 프로그램을 실행할 때 운영 체제에서 보류중인 재부팅이 있으면 계속해서는 안됩니다. 당신이 재부팅을 요구하는 서버의 결정하려는 경우 파워 쉘서버가 재부팅해야하는지 확인하는 방법

를 사용

답변

0

, 당신은 상태를 확인하기 위해 PowerShell 스크립트를 사랑합니다. 다시 부팅 대기중인 서버를 식별하는 간단한 방법은 레지스트리를 확인하는 것입니다. 이 정보는 레지스트리의 HKeyLocalMachine 하이브에 저장됩니다. PowerShell은 레지스트리 작업을 위해 태어났습니다. 레지스트리는 기본 제공된 PowerShell 공급자 중 하나입니다. 해당 레지스트리 하이브에 연결된 PSDrive가 이미 있습니다! 파일 시스템처럼 레지스트리 주위를 탐색 할 수 있습니다.

레지스트리 드라이브로 변경하십시오.

// 설정 - 위치 또한 별칭을 통해 호출 할 수 있습니다 - CD 및

설정 - 위치 HKLM SL

:

//이-ChildItem을 얻을 또한 별칭을 통해 호출 할 수 있습니다

- DIR 및 LS

은 Get-ChildItem을

와우! 슈퍼 쉽지, 그렇지? 이제 "재부팅 대기 중"위치가 어디인지 알아야합니다. 확인해야 할 장소가 몇 군데 있습니다.

HKLM \ 소프트웨어 \ Microsoft \ Windows \ CurrentVersion \ WindowsUpdate \ Auto Update \ RebootRequired 자동 업데이트를 통해 설치된 패치가 재부팅 할 필요가있는 곳입니다.

HKLM \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ 구성 요소 기반 서비스 \ RebootPending 보류중인 재부팅을 식별 할 수있는 다른 곳입니다.

HKLM \ SYSTEM \ CurrentControlSet \ Control \ Session Manager 또 하나입니다. 마지막으로 WMI를 통해 쿼리 할 수있는 Configuration Manager가 있습니다.

네 개의 위치를 ​​모두 확인하는 기능을 발견했습니다. 원격 컴퓨터를 확인하기 위해 몇 가지 매개 변수로 마무리해야하지만 일반적으로 좋은 시작이었습니다. 필자는 컴퓨터가 재부팅을 기다리는 지 여부 만 고려하고 재부팅 소스가 어디에서 왔는지를 신경 쓰지 않기 때문에 만족하는 첫 번째 조건에서 $ 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 }

을 바탕으로