DSCResources/RestartSystem/RestartSystem.schema.psm1

configuration RestartSystem
{
    [Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSAvoidGlobalVars')]
    [Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSUseDeclaredVarsMoreThanAssignments')]

    param (
        [Parameter()]
        [Boolean]
        $ForceReboot = $false,

        [Parameter()]
        [Boolean]
        $PendingReboot = $false,

        [Parameter()]
        [Boolean]
        $SkipComponentBasedServicing = $false,

        [Parameter()]
        [Boolean]
        $SkipWindowsUpdate = $false,

        [Parameter()]
        [Boolean]
        $SkipPendingFileRename = $false,

        [Parameter()]
        [Boolean]
        $SkipPendingComputerRename = $false,

        [Parameter()]
        [Boolean]
        $SkipCcmClientSDK = $true
    )

    Import-DscResource -ModuleName PSDesiredStateConfiguration
    Import-DscResource -ModuleName ComputerManagementDsc

    if ($PendingReboot -eq $true)
    {
        PendingReboot CheckPendingReboot
        {
            Name                        = 'CheckPendingReboot'
            SkipComponentBasedServicing = $SkipComponentBasedServicing
            SkipWindowsUpdate           = $SkipWindowsUpdate
            SkipPendingFileRename       = $SkipPendingFileRename
            SkipPendingComputerRename   = $SkipPendingComputerRename
            SkipCcmClientSDK            = $SkipCcmClientSDK
        }
    }

    if ($ForceReboot -eq $true)
    {
        $rebootKeyName = 'HKLM:\SOFTWARE\DSC Community\CommonTasks\RebootRequests'
        $rebootVarName = 'Reboot_RestartSystem'

        Script $rebootVarName
        {
            TestScript = {
                $val = Get-ItemProperty -Path $using:rebootKeyName -Name $using:rebootVarName -ErrorAction SilentlyContinue

                if ($null -ne $val -and $val.$using:rebootVarName -gt 0)
                {
                    return $true
                }
                return $false
            }
            SetScript  = {
                if (-not (Test-Path -Path $using:rebootKeyName))
                {
                    New-Item -Path $using:rebootKeyName -Force
                }
                Set-ItemProperty -Path $using:rebootKeyName -Name $using:rebootVarName -value 1
                $global:DSCMachineStatus = 1
            }
            GetScript  = { return `
                @{
                    result = 'result'
                }
            }
        }
    }
}