RebootNodeIfNeeded:ターゲットノードの特定の構成変更では、変更を適用するために再起動が必要になる場合があります。値が「true」の場合、このプロパティは警告なしにノードをすぐに再起動します。 「false」の場合、構成は完了しますが、変更を有効にするにはノードを手動で再起動する必要があります。
したがって、私の理解では、再起動が必要な場合でも、DSCはすべての構成を実行する必要があります
しかし、私の場合はそうではありません。Packageをインストールした後、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"
}
各リソースは、LCMにサーバーの再起動を要求できます。リソースが再起動を要求すると、再起動をスケジュールし、サーバーの再起動後に整合性チェックを実行するようにLCMをスケジュールします(これにより、構成を続行できます)。
再起動が必要であることを(イベントログまたはStart-DscConfigurationの詳細ストリームを介して)通知する場合は、RebootIfNeededを$ falseに設定する必要があります。次に、再起動する必要があります。一部のインストーラーは、マシンの再起動が必要な場合に実行されないため、これは、システムを手動で再起動するのを待っているブロッカーである可能性があります。