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

前端之家收集整理的这篇文章主要介绍了windows – 即使需要重启/重启,如何强制DSC执行所有配置(包)前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
MSDN

RebootNodeIfNeeded: Certain configuration changes on a target node might require it to be restarted for the changes to be applied. With the value “true,” this property will restart the node immediately and without warning. If “false,” the configuration will be completed,but the node must be restarted manually for the changes to take effect.

所以我的理解是,即使需要重启,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"
}
原文链接:https://www.f2er.com/windows/367823.html

猜你在找的Windows相关文章