Windows
DSC,如何知道執行配置後是否需要重新啟動
所以我使用的是 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