所以我使用DSC推模式
我每天有大约200次部署到几个环境(DEV / INT / QA / PROD)
每次我部署我想确保每个服务器configuration正确
所以我自动运行DSC作为我的部署,这是完全没有用户交互执行的一部分
所以我想知道是否有一种方法来知道在运行DSCconfiguration后是否需要重启/重启
基本上运行这条线后
Start-DscConfiguration -Wait -Force -Path .\SomePath
我如何configuration软件包的例子
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\ PendingFileRenameOperationsregistry值。 如果它不是空的 – 那么你正在等待重启。 请注意,registry值不应该存在,除非您正在等待重新启动。 它在重新启动时被删除。 所以,如果你没有看到这是为什么。
编辑:也把这个键入混合:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Updates\UpdateExeVolatile
这两个键一起应该告诉你重启是否挂起。
查看这篇微软文章 – 尽pipe这篇文章是关于Exchange的,但它清楚地提到了检查这两个registry值的方式是如何知道重新启动是否挂起: http : //technet.microsoft.com/en-us/library/ cc164360(v = EXCHG.80)的.aspx
编辑2014年10月29日: Microsoft已经发布了一个名为xPendingReboot的新Desired Stateconfiguration资源,该资源在查找您的系统是否正在等待重新启动时会做得很好。 它通过查看以下registry项列表来执行此操作:
$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