Windows
即使需要重新啟動/重新啟動,如何強制 DSC 執行所有配置(包)
來自MSDN
RebootNodeIfNeeded:目標節點上的某些配置更改可能需要重新啟動它才能應用更改。如果值為“true”,則此屬性將立即重新啟動節點,並且不會發出警告。如果為“false”,則配置將完成,但必須手動重新啟動節點才能使更改生效。
所以我的理解是,即使需要重新啟動,DSC也應該執行所有配置
但在我的情況下,這不是真的,在安裝軟體包後,有時 DSC 會被標記為重新啟動,並且 DSC 不會執行其餘配置
我必須再次手動執行命令才能執行其餘配置
Start-DscConfiguration -Wait -Force -Path .\SomePath
我想強制 DSC 執行所有配置,然後通知我是否需要重新啟動伺服器
我如何配置包的範例
LocalConfigurationManager { RebootNodeIfNeeded = $false } 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 }
我想出了這個解決方案
我想找到一個更好的方法來做到這一點。但無論如何它對我有用
我仍然相信 DSC 流程應該以某種方式通知我,而不僅僅是通過 Write-Verbose,因為在我的情況下,這個流程是作為我們持續集成流程的一部分啟動的
[int]$maximumAttempts = 5 [int]$attempt = 0 [ValidateNotNull()][guid]$dscResTmp = [guid]::NewGuid() [ValidateNotNullOrEmpty()][string]$dscResPathTmp = Join-Path $baseFolderPathTmp "$dscResTmp.log" do { [bool]$stopLoop = $false [int]$attempt = ++$attempt Start-DscConfiguration -Wait -Force -Path $folderPathTmp 4> $dscResPathTmp [string[]]$rebootServerCoincidences = Select-String -Pattern "reboot" -Path $dscResPathTmp if ($rebootServerCoincidences.Length -le 0) { [bool]$stopLoop = $true } else { Write-Warning ($rebootServerCoincidences -join [Environment]::NewLine) } } while($stopLoop -eq $false -and $attempt -le $maximumAttempts) if ($stopLoop -eq $false) { Write-Warning "Max attempts reached" }