所以我使用 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