2016-05-03 3 views
4

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

В локальном диспетчере конфигурации я установил 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.

ответ

4

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

The 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' 
    }  
} 
1

Чтобы получить $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 

(код, взятый из colin's alm corner)

Смежные вопросы