powershelldsc

DSC Node is not restarting


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?


Solution

  • Set-DscLocalConfigurationManager  -Path ".\PrepareVM" -Force
    

    After adding this line to the script it works now perfektly.