Windows

DSC,如何知道執行配置後是否需要重新啟動

  • October 29, 2014

所以我使用的是 DSC Push 模式

我每天有大約 200 次部署到多個環境 (DEV/INT/QA/PROD)

每次部署時,我都想確保每個伺服器都配置正確

因此,我在部署過程中自動執行 DSC,完全無需使用者互動即可執行

所以我想知道是否有辦法知道在執行 DSC 配置後是否需要重新啟動/重新啟動

基本上在執行這條線之後

Start-DscConfiguration -Wait -Force -Path .\SomePath

我如何配置包的範例

  Package MVC3
   {
       Name = "Microsoft ASP.NET MVC 3"
       Ensure = "Present"
       Path = "$Env:SystemDrive\AspNetMVC3ToolsUpdateSetup.exe"
       ProductId = "DCDEC776-BADD-48B9-8F9A-DFF513C3D7FA"
       Arguments = "/q"
       DependsOn = "[WindowsFeature]IIS"
       Credential = $Credential
   }

  Package MVC4
   {
       Name = "Microsoft ASP.NET MVC 4 Runtime"
       Ensure = "Present"
       Path = "$Env:SystemDrive\AspNetMVC4Setup.exe"
       ProductId = "942CC691-5B98-42A3-8BC5-A246BA69D983"
       Arguments = "/q"
       DependsOn = "[Package]MVC3"
       Credential = $Credential
   }

我過去一直使用的是HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\ PendingFileRenameOperations 系統資料庫值。如果它不為空 - 那麼您正在等待重新啟動。請注意,除非您正在等待重新啟動,否則系統資料庫值甚至不應該存在。它在重新啟動時被刪除。所以如果你沒有看到它,那就是為什麼。

編輯:也將這個鍵放入組合中:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Updates\UpdateExeVolatile

這兩個鍵一起應該告訴您重新啟動是否正在等待。

檢查這篇 Microsoft 文章 - 儘管文章是關於 Exchange,但它清楚地提到了檢查這兩個系統資料庫值是 Exchange 如何知道重新啟動是否掛起: http ://technet.microsoft.com/en-us/library/ cc164360(v=EXCHG.80).aspx

編輯 2014 年 10 月 29 日: Microsoft 發布了一個名為xPendingReboot的新 Desired State Configuration 資源,它可以很好地確定您的系統是否正在等待重新啟動。它通過查看以下系統資料庫​​項列表來執行此操作:

$ComponentBasedServicing = (Get-ChildItem 'hklm:SOFTWARE\Microsoft\Windows\CurrentVersion\Component Based Servicing\').Name.Split("\") -contains "RebootPending"
$WindowsUpdate = (Get-ChildItem 'hklm:SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate\Auto Update\').Name.Split("\") -contains "RebootRequired"
$PendingFileRename = (Get-ItemProperty 'hklm:\SYSTEM\CurrentControlSet\Control\Session Manager\').PendingFileRenameOperations.Length -gt 0
$ActiveComputerName = (Get-ItemProperty 'hklm:\SYSTEM\CurrentControlSet\Control\ComputerName\ActiveComputerName').ComputerName
$PendingComputerName = (Get-ItemProperty 'hklm:\SYSTEM\CurrentControlSet\Control\ComputerName\ComputerName').ComputerName
$PendingComputerRename = $ActiveComputerName -ne $PendingComputerName

引用自:https://serverfault.com/questions/582725