Настройте ресурс DSC для перезапуска

У меня есть ресурс DSC, который устанавливает функцию dotnet, а затем устанавливает обновление для dotnet.

В Local Configuration Manager я установил RebootNodeIfNeeded на $true.

После установки dotnet не запрашивает перезагрузку (даже использовал модуль xPendingReboot для подтверждения этого).

Configuration WebServer
{
WindowsFeature NetFramework45Core
{
    Name = "Net-Framework-45-Core"
    Ensure = "Present"
}

xPendingReboot Reboot
{
    Name = "Prior to upgrading Dotnet4.5.2"
}

cChocoPackageInstaller InstallDotNet452
{
    name = "dotnet4.5.2"
}

}

Это проблема, так как dotnet не работает должным образом с нашим приложением, если сервер не был перезагружен, и мы пытаемся сделать эти перезагрузки автоматическими без необходимости ввода данных пользователем.

Есть ли способ передать ресурсы в localdscmanager (LCM), чтобы он нуждался в перезагрузке, когда что-то устанавливается?

Я нашел следующую команду

 $global:DSCMachineStatus = 1 

Который устанавливает перезагрузку. но я не уверен, как использовать его для перезагрузки сразу после установки модуля 4.5.


person DamianB    schedule 03.05.2016    source источник


Ответы (2)


Обычно, когда я устанавливаю .Net, он работает без перезагрузки, но если вы хотите, чтобы ваша конфигурация перезагрузила его после его установки, вы можете сделать следующее. Это не будет работать для дрейфа (.net удаляется после первоначальной установки). Во время дрейфа конфигурации конфигурация все равно установит .net, но ресурс скрипта, который я добавил для перезагрузки, будет считать, что он уже перезагружен.

DependsOn здесь очень важен, вы не хотите, чтобы этот скрипт запускался до того, как WindowsFeature успешно запустится.

configuration WebServer
{
    WindowsFeature NetFramework45Core
    {
        Name = "Net-Framework-45-Core"
        Ensure = "Present"
    }


    Script Reboot
    {
        TestScript = {
            return (Test-Path HKLM:\SOFTWARE\MyMainKey\RebootKey)
        }
        SetScript = {
            New-Item -Path HKLM:\SOFTWARE\MyMainKey\RebootKey -Force
             $global:DSCMachineStatus = 1 

        }
        GetScript = { return @{result = 'result'}}
        DependsOn = '[WindowsFeature]NetFramework45Core'
    }    
}
person TravisEz13    schedule 04.05.2016

Чтобы $global:DSCMachineStatus = 1 заработало, сначала необходимо настроить Local Configuration Manager на удаленный узел, чтобы разрешить автоматическую перезагрузку. Вы можете сделать это следующим образом:

Configuration ConfigureRebootOnNode
{
    param (
        [Parameter(Mandatory=$true)]
        [ValidateNotNullOrEmpty()]
        [String]
        $NodeName
    )

    Node $NodeName
    {
        LocalConfigurationManager
        {
            RebootNodeIfNeeded = $true
        }
    }
}

ConfigureRebootOnNode -NodeName myserver 
Set-DscLocalConfigurationManager .\ConfigureRebootOnNode -Wait -Verbose

(код взят из уголка Колина)

person qbik    schedule 06.09.2016