如何强制 DSC 执行所有配置(包),即使需要重新启动/重启

如何强制 DSC 执行所有配置(包),即使需要重新启动/重启

微软

如果需要,重新启动节点:目标节点上的某些配置更改可能需要重新启动才能应用更改。如果值为“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
    }

答案1

我想出了这个解决方案

我想找到一个更好的方法。但无论如何,它对我来说是有效的

我仍然相信 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"
}

答案2

每个资源都可以请求 LCM 重启服务器。如果资源请求重启,它将安排重启,并安排 LCM 在服务器重启后运行一致性检查(以便可以继续配置)。

如果您希望它通知您(通过事件日志或 Start-DscConfiguration 的详细流)需要重新启动,则需要将 RebootIfNeeded 设置为 $false。然后您负责重新启动。如果机器需要重新启动,某些安装程序将不会运行,因此这可能是一个等待您手动重新启动系统的阻止程序。

相关内容