SetUpBasic.Install.ps1

function Private-IsAdmin {
    [Diagnostics.CodeAnalysis.SuppressMessageAttribute("PSUseApprovedVerbs", "")]
    [OutputType([bool])]
    param()
    $currentPrincipal = New-Object Security.Principal.WindowsPrincipal([Security.Principal.WindowsIdentity]::GetCurrent())
    $IsAdmin = $currentPrincipal.IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)
    return $IsAdmin
}

function Private-IsNotAdminWarning {
    [Diagnostics.CodeAnalysis.SuppressMessageAttribute("PSUseApprovedVerbs", "")]
    [OutputType([bool])]
    param()

    $IsAdmin = Private-IsAdmin
    if ($IsAdmin -eq $false)
    {
        Write-Error "This command can only be executed with elevated administrator rights."
    }

    return $IsAdmin
}

function Private-Install-SubWeeklyDefrag {
    [Diagnostics.CodeAnalysis.SuppressMessageAttribute("PSUseApprovedVerbs", "")]
    param()

    New-SubTemplateFullScriptFile -FileName "Defrag.cmd" -Location "C:\SetUpBasic\TaskScheduler"
    New-SubTask -Name "SetUpBasic Weekly Defrag" -Program "C:\SetUpBasic\TaskScheduler\Defrag.cmd" -Time (New-TimeSpan -Hours 4 -Minutes 30) -day ("Sunday") -LogonUserType SYSTEM -ScheduleType TIME
}

function Private-Install-SubDailyReboot {
    [Diagnostics.CodeAnalysis.SuppressMessageAttribute("PSUseApprovedVerbs", "")]
    param()
    New-SubTemplateFullScriptFile -FileName "Reboot.ps1" -Location "C:\SetUpBasic\TaskScheduler"
    New-SubTask -Name "SetUpBasic Daily Reboot" -Program "C:\SetUpBasic\TaskScheduler\Reboot.ps1" -Time (New-TimeSpan -Hours 4) -LogonUserType SYSTEM -ScheduleType TIME
}

function Private-Install-SubDailyWindowsUpdate {
    [Diagnostics.CodeAnalysis.SuppressMessageAttribute("PSUseApprovedVerbs", "")]
    param()
    New-SubTemplateFullScriptFile -FileName "WindowsUpdates.ps1" -Location "C:\SetUpBasic\TaskScheduler"
    New-SubTask -Name "SetUpBasic Daily Windows Updates" -Program "C:\SetUpBasic\TaskScheduler\WindowsUpdates.ps1" -Time (New-TimeSpan -Hours 3 -Minutes 30) -LogonUserType SYSTEM -ScheduleType TIME
}

function Private-Install-SubDailyModuleUpdate {
    [Diagnostics.CodeAnalysis.SuppressMessageAttribute("PSUseApprovedVerbs", "")]
    param()
    New-SubTemplateFullScriptFile -FileName "UpdateModules.ps1" -Location "C:\SetUpBasic\TaskScheduler"
    New-SubTask -Name "SetUpBasic Daily Modul Updates" -Program "C:\SetUpBasic\TaskScheduler\UpdateModules.ps1" -Time (New-TimeSpan -Hours 3 -Minutes 20) -LogonUserType SYSTEM -ScheduleType TIME
}