For my learning testlab I have a simple DSC configuration. I am creating VMs and have them running the following ps1 on first startup to rename the system to the VM's name.
configuration SomeConfiguration
{
Import-DscResource -ModuleName ComputerManagementDsc
Import-DscResource -ModuleName PSDesiredStateConfiguration
node 'localhost'
{
LocalConfigurationManager
{
RebootNodeIfNeeded = $true
ConfigurationMode = 'ApplyAndAutoCorrect'
}
Computer RenameComputer
{
Name = $VMName
}
}
}
$VMName = (Get-ItemProperty -Path 'HKLM:\SOFTWARE\Microsoft\Virtual Machine\Guest\Parameters').VirtualMachineName
#Compile configuration
PrepareVM
#Apply configuration
Start-DscConfiguration -Path .\PrepareVM -ComputerName localhost -Wait -Force -Verbose
The Output is then the following:
Verzeichnis: C:\Windows\system32\PrepareVM
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 02.03.2021 08:36 1804 localhost.mof
-a---- 02.03.2021 08:36 1124 localhost.meta.mof
AUSFÜHRLICH: Vorgang "CIM-Methode aufrufen" mit den folgenden Parametern durchführen,
"'methodName' = SendConfigurationApply,'className' =
MSFT_DSCLocalConfigurationManager,'namespaceName' =
root/Microsoft/Windows/DesiredStateConfiguration".
AUSFÜHRLICH: Vom Computer 'WIN-513GCONKL5D' mit Benutzer-SID
'S-1-5-21-3061245032-2377636693-4228035128-500' ist ein LCM-Methodenaufruf eingegangen.
AUSFÜHRLICH: [WIN-513GCONKL5D]: LCM: [ StartenFestlegen]
AUSFÜHRLICH: [WIN-513GCONKL5D]: LCM: [ StartenRessource] [[Computer]RenameComputer]
AUSFÜHRLICH: [WIN-513GCONKL5D]: LCM: [ StartenTesten ] [[Computer]RenameComputer]
AUSFÜHRLICH: [WIN-513GCONKL5D]: [[Computer]RenameComputer] Testing
computer state for 'DC01'.
AUSFÜHRLICH: [WIN-513GCONKL5D]: LCM: [ BeendenTesten ] [[Computer]RenameComputer] in 0.0940
Sekunden.
AUSFÜHRLICH: [WIN-513GCONKL5D]: LCM: [ StartenFestlegen] [[Computer]RenameComputer]
AUSFÜHRLICH: [WIN-513GCONKL5D]: [[Computer]RenameComputer] Setting
computer state for 'DC01'.
WARNUNG: [WIN-513GCONKL5D]: [[Computer]RenameComputer] Die Änderungen
werden nach einem Neustart des Computers WIN-513GCONKL5D wirksam.
AUSFÜHRLICH: [WIN-513GCONKL5D]: [[Computer]RenameComputer] Renamed
computer to 'DC01'.
AUSFÜHRLICH: [WIN-513GCONKL5D]: LCM: [ BeendenFestlegen] [[Computer]RenameComputer] in 0.2030
Sekunden.
AUSFÜHRLICH: [WIN-513GCONKL5D]: LCM: [ BeendenRessource] [[Computer]RenameComputer]
AUSFÜHRLICH: [WIN-513GCONKL5D]: [] Zum Fortsetzen des Vorgangs ist ein
Neustart erforderlich. Starten Sie das System neu.
WARNUNG: [WIN-513GCONKL5D]: [] Zum Fortsetzen des Vorgangs ist ein
Neustart erforderlich. Starten Sie das System neu.
AUSFÜHRLICH: [WIN-513GCONKL5D]: LCM: [ BeendenFestlegen]
AUSFÜHRLICH: [WIN-513GCONKL5D]: LCM: [ BeendenFestlegen] in 1.6710 Sekunden.
AUSFÜHRLICH: Vorgang "CIM-Methode aufrufen" wurde abgeschlossen.
AUSFÜHRLICH: Die Ausführung des Konfigurationsauftrags hat 2.194 Sekunden gedauert.
So basically the scripts runs fine without any errors and reports back, that a reboot is needed ("WARNUNG"). But it just does not reboot.
Outputting $global:DSCMachineStatus to the console returns an empty variable, too.
Already tried to add this to the configuration, but with no success.
PendingReboot RebootComputer
{
Name = 'RebootComputer'
DependsOn = '[Computer]RenameComputer'
}
Script RebootWhenSet
{
GetScript = {
# TestScript = $true
return @{ Result = "Some value" };
# TestScript = $false
# return @{ Result = $null };
}
SetScript = {
$global:DSCMachineStatus = 1;
}
TestScript = {
$GetScript = Get-Host
$result = (Invoke-Expression -Command $GetScript)["Result"];
if($result)
{
return $true;
}
return $false;
}
}
After manually rebooting everything is fine. How can I debug this?
Set-DscLocalConfigurationManager -Path ".\PrepareVM" -Force
After adding this line to the script it works now perfektly.