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
}
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
Редактировать 29 октября 2014 года. Microsoft выпустила новый ресурс "Конфигурация требуемого состояния" под названием xPendingReboot, который очень хорошо справится с задачей определения, ожидает ли ваша система перезагрузки или нет. Это делается путем просмотра следующего списка ключей реестра:
$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