配置 DSC 资源以重新启动
Configure a DSC Resource to restart
我有一个安装 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 模块后立即使用它重新启动。
通常情况下,当我安装 .Net 时,它无需重新启动即可运行,但如果您想强制您的配置在安装后重新启动它,您可以执行以下操作。它不适用于漂移(初始安装后.net被删除。)在配置漂移期间,配置仍然会安装.net,但是我添加到重启的脚本资源会认为它已经重启了。
DependsOn 在这里非常重要,在 WindowsFeature 运行 成功之前,您不希望此脚本 运行ning。
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'
}
}
要使 $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)
我有一个安装 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 模块后立即使用它重新启动。
通常情况下,当我安装 .Net 时,它无需重新启动即可运行,但如果您想强制您的配置在安装后重新启动它,您可以执行以下操作。它不适用于漂移(初始安装后.net被删除。)在配置漂移期间,配置仍然会安装.net,但是我添加到重启的脚本资源会认为它已经重启了。
DependsOn 在这里非常重要,在 WindowsFeature 运行 成功之前,您不希望此脚本 运行ning。
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'
}
}
要使 $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)