我有一个安装了dotnet功能的DSC资源,然后安装了dotnet的更新。
在本地配置管理器中,我已将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模块后立即重启它。
答案 0 :(得分:6)
通常,当我安装.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'
}
}
答案 1 :(得分:2)
要使$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)