DSC,如何知道运行配置后是否需要重新启动

DSC,如何知道运行配置后是否需要重新启动

所以我使用 DSC Push 模式

我每天要向多个环境(DEV/INT/QA/PROD)部署大约 200 次

每次部署时,我都想确保每台服务器都配置正确

因此,我将在部署过程中自动运行 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
    }

答案1

我过去一直使用的东西是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日:微软发布了一种新的所需状态配置资源,称为重启它可以很好地查明您的系统是否正在等待重新启动。它通过查看以下注册表项列表来实现此目的:

$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

相关内容