Windowsサーバが再起動する必要があるかどうかを確認するにはどうすればよいですか?私はインストーラプロジェクトを作っています。ユーザーがこのインストーラを実行すると、オペレーティングシステムに保留中の再起動がある場合は、続行しないでください。 PowerShellのサーバが再起動を必要とするかどうかを確認する方法
を使用して
Windowsサーバが再起動する必要があるかどうかを確認するにはどうすればよいですか?私はインストーラプロジェクトを作っています。ユーザーがこのインストーラを実行すると、オペレーティングシステムに保留中の再起動がある場合は、続行しないでください。 PowerShellのサーバが再起動を必要とするかどうかを確認する方法
を使用して
あなたは、再起動を必要とし、あなたが状態を確認するために、このPowerShellスクリプトを好きになるサーバーのかを決定しようとしている場合。再起動が保留されているサーバーを特定する簡単な方法は、レジストリを確認することです。この情報は、レジストリのHKeyLocalMachineハイブに格納されます。 PowerShellは、レジストリを操作するために生まれ育ちます。レジストリは、組み込みのPowerShellプロバイダの1つです。そのレジストリハイブに接続されているPSDriveが既にあります!あなたはファイルシステムのようにレジストリの周りをブラウズすることができます。
レジストリドライブに変更します。
//セット場所もそのエイリアスから呼び出すことができます- CDおよびSL
セット場所HKLM:
//は-ChildItemコマンドレットは、取得もそのエイリアスから呼び出すことができます - dirとLS
は、Get-ChildItemコマンドレット
うわー!超簡単、そうですか? これで、「保留中の再起動」の場所がわかります。確認する場所がいくつかあります。
HKLM¥SOFTWARE¥Microsoft¥Windows¥CurrentVersion¥WindowsUpdate¥Auto Update¥RebootRequired 自動アップデートによってインストールされたパッチは、再起動の必要性を登録します。
HKLM \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \コンポーネントベースのサービス\ RebootPending 保留中の再起動を識別できる別の場所です。
HKLM \ SYSTEM \ CurrentControlSet \ Control \ Session Manager さらに別です。最後に、存在する場合はWMI経由でクエリを実行できるConfiguration Managerがあります。
実際に4つの場所をすべて確認したいという機能が見つかりました。リモートコンピュータをチェックするためにいくつかのパラメータでまとめておく必要がありますが、一般的には素晴らしいスタートでした。私はコンピュータが再起動を保留しているかどうかと、再起動の元がどこから作成されているのかを気にするだけなので、最初の条件が満たされれば$ trueを返すように関数を修正しました。 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 }