# ***************************************************
# Definitions
#
# ***************************************************


function Disable-SPP
{
    # Add test mode to avoid test interrupt by activation prompt
    reg add "HKLM\System\CurrentControlSet\Control\7503491f-4a39-4f84-b231-8aca3e203b94" /f

    # Disable generic taskschedule for Windows activation check.
    Disable-ScheduledTask -TaskName "\Microsoft\Windows\SoftwareProtectionPlatform\SvcRestartTaskNetwork" -ErrorAction SilentlyContinue
    Disable-ScheduledTask -TaskName "\Microsoft\Windows\SoftwareProtectionPlatform\SvcRestartTask" -ErrorAction SilentlyContinue
    Disable-ScheduledTask -TaskName "\Microsoft\Windows\SoftwareProtectionPlatform\SvcRestartTaskLogon" -ErrorAction SilentlyContinue
    
    try{ reg DELETE "HKLM\Software\Microsoft\Windows NT\CurrentVersion\SPP\Clients" /f 2>&1 } catch {}
}


function Disable-BlockingMaintenanceTasks
{
    Disable-ScheduledTask -TaskName "\Microsoft\Windows\Servicing\StartComponentCleanup" -ErrorAction SilentlyContinue
    Disable-ScheduledTask -TaskName "\Microsoft\Windows\SettingSync\BackgroundUploadTask" -ErrorAction SilentlyContinue
    Disable-ScheduledTask -TaskName "\Microsoft\Windows\SettingSync\BackupTask" -ErrorAction SilentlyContinue
    Disable-ScheduledTask -TaskName "\Microsoft\Windows\Work Folders\Work Folders Maintenance Work" -ErrorAction SilentlyContinue
    Disable-ScheduledTask -TaskName "\Microsoft\Windows\Sysmain\HybridDriveCachePrepopulate" -ErrorAction SilentlyContinue
    Disable-ScheduledTask -TaskName "\Microsoft\Windows\Windows Error Reporting\QueueReporting" -ErrorAction SilentlyContinue
}

function Disable-EsifService
{
    if (Get-Service -Name esifsvc -ErrorAction SilentlyContinue) 
    {
        Set-Service esifsvc -StartupType Disabled
        Stop-Service esifsvc
    }
}
function Remove-SkypePreview 
{
    $p = Get-AppxPackage | where { $_.name -match "Skype" }

    if ($p -and ($p.count -eq 1)) 
    {
        Remove-AppxPackage -Package $p.PackageFullName
    }
    else 
    {
        throw "Unable to find Skype Preview package ($($p.count))..."
    }
}


function Disable-OfficeUpdates
{
    reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\ClickToRun\Configuration" /v UpdatesEnabled /t REG_SZ /d "False" /f
}

function Disable-CompatTelRunner
{
	# Disable Schedule Task for "Microsoft Compatibility Appraiser""
	Disable-ScheduledTask -TaskName "\Microsoft\Windows\Application Experience\Microsoft Compatibility Appraiser" -ErrorAction SilentlyContinue
	Disable-ScheduledTask -TaskName "\Microsoft\Windows\Application Experience\ProgramDataUpdater"                -ErrorAction SilentlyContinue

	# Disable PcaSvc : Program Compatibility Assistant Service
	if (Get-Service -Name PcaSvc -ErrorAction SilentlyContinue)
	{
		Set-Service  PcaSvc -StartupType Disabled
		Stop-Service PcaSvc
	} else {
		throw "Unable to find PcaSvc"
	}
}

function DisableSafe-RegistryDwordValue
{
    Param(
        [parameter(Mandatory=$true)][string]$RegLocation,
        [parameter(Mandatory=$true)][string]$RegName,
        [parameter(Mandatory=$true)][int32] $RegDwordValue
    )

    $_RegValue      = Get-ItemProperty -Path "$($RegLocation)" -Name "$($RegName)"        -ErrorAction SilentlyContinue
    $_RegSavedValue = Get-ItemProperty -Path "$($RegLocation)" -Name "$($RegName)__saved" -ErrorAction SilentlyContinue
    if( $_RegValue ){
        # Key is existed.
        if( $_RegSavedValue ){
            # Saved value is already existed.. do not overwrite the key
            # Do Nothing
        } else {
            ## Save Original Value for Restore-operation
            New-ItemProperty -Path "$($RegLocation)" -Name "$($RegName)__saved" -Value "$($_RegValue.($RegName))" -PropertyType DWORD -Force -ErrorAction SilentlyContinue
        }

        # Set Registry New Value
        Set-ItemProperty -Path "$($RegLocation)" -Name "$($RegName)" -Value $RegDwordValue -Force -ErrorAction SilentlyContinue
    }

}

function RestoreSafe-RegistryDwordValue
{
    Param(
        [parameter(Mandatory=$true)][string]$RegLocation,
        [parameter(Mandatory=$true)][string]$RegName
    )

    $_RegValue      = Get-ItemProperty -Path "$($RegLocation)" -Name "$($RegName)"        -ErrorAction SilentlyContinue
    $_RegSavedValue = Get-ItemProperty -Path "$($RegLocation)" -Name "$($RegName)__saved" -ErrorAction SilentlyContinue
    if( $_RegSavedValue ){
        # Saved Key is existed.
        $RegName2 = "$($RegName)__saved"
        if( $_RegValue ){
            # If the current value is existed, restore/overwrite the stored value.
            Set-ItemProperty -Path "$($RegLocation)" -Name "$($RegName)" -Value "$($_RegSavedValue.($RegName2))" -Force -ErrorAction SilentlyContinue
        } else {
            ## Save Original Value from Restored Value
            New-ItemProperty -Path "$($RegLocation)" -Name "$($RegName)" -Value "$($_RegSavedValue.($RegName2))" -PropertyType DWORD -Force -ErrorAction SilentlyContinue
        }

        # Remove the saved registry key & value
        Remove-ItemProperty -Path "$($RegLocation)" -Name "$($RegName)__saved" -Force -ErrorAction SilentlyContinue
    }

}


function Disable-ContentDeliveryManagerRegistry
{
    try {
        $RegLoc = "HKCU:\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager"
        $RegName = "FeatureManagementEnabled";         $RegValue = 0; DisableSafe-RegistryDwordValue -RegLocation "$($RegLoc)" -RegName "$($RegName)" -RegDwordValue $RegValue
        $RegName = "RotatingLockScreenOverlayEnabled"; $RegValue = 0; DisableSafe-RegistryDwordValue -RegLocation "$($RegLoc)" -RegName "$($RegName)" -RegDwordValue $RegValue
        $RegName = "SilentInstalledAppsEnabled";       $RegValue = 0; DisableSafe-RegistryDwordValue -RegLocation "$($RegLoc)" -RegName "$($RegName)" -RegDwordValue $RegValue
        $RegName = "SoftLandingEnabled";               $RegValue = 0; DisableSafe-RegistryDwordValue -RegLocation "$($RegLoc)" -RegName "$($RegName)" -RegDwordValue $RegValue
        $RegName = "SubscribedContentEnabled";         $RegValue = 0; DisableSafe-RegistryDwordValue -RegLocation "$($RegLoc)" -RegName "$($RegName)" -RegDwordValue $RegValue
        $RegName = "OemPreInstalledAppsEnabled";       $RegValue = 0; DisableSafe-RegistryDwordValue -RegLocation "$($RegLoc)" -RegName "$($RegName)" -RegDwordValue $RegValue
        $RegName = "PreInstalledAppsEnabled";          $RegValue = 0; DisableSafe-RegistryDwordValue -RegLocation "$($RegLoc)" -RegName "$($RegName)" -RegDwordValue $RegValue
        $RegName = "RotatingLockScreenEnabled";        $RegValue = 0; DisableSafe-RegistryDwordValue -RegLocation "$($RegLoc)" -RegName "$($RegName)" -RegDwordValue $RegValue
        $RegName = "SystemPaneSuggestionsEnabled";     $RegValue = 0; DisableSafe-RegistryDwordValue -RegLocation "$($RegLoc)" -RegName "$($RegName)" -RegDwordValue $RegValue
        $RegName = "RotatingLockScreenOverlayVisible"; $RegValue = 0; DisableSafe-RegistryDwordValue -RegLocation "$($RegLoc)" -RegName "$($RegName)" -RegDwordValue $RegValue
        $RegName = "ContentDeliveryAllowed";           $RegValue = 0; DisableSafe-RegistryDwordValue -RegLocation "$($RegLoc)" -RegName "$($RegName)" -RegDwordValue $RegValue

    } catch {
        throw "Unable to disable the registry key for ContentDeliveryManager [$($RegLoc)]-[$($RegName)]..."
    }
}

function Restore-ContentDeliveryManagerRegistry
{
    try {
        $RegLoc = "HKCU:\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager"
        $RegName = "FeatureManagementEnabled";                        RestoreSafe-RegistryDwordValue -RegLocation "$($RegLoc)" -RegName "$($RegName)"
        $RegName = "RotatingLockScreenOverlayEnabled";                RestoreSafe-RegistryDwordValue -RegLocation "$($RegLoc)" -RegName "$($RegName)"
        $RegName = "SilentInstalledAppsEnabled";                      RestoreSafe-RegistryDwordValue -RegLocation "$($RegLoc)" -RegName "$($RegName)"
        $RegName = "SoftLandingEnabled";                              RestoreSafe-RegistryDwordValue -RegLocation "$($RegLoc)" -RegName "$($RegName)"
        $RegName = "SubscribedContentEnabled";                        RestoreSafe-RegistryDwordValue -RegLocation "$($RegLoc)" -RegName "$($RegName)"
        $RegName = "OemPreInstalledAppsEnabled";                      RestoreSafe-RegistryDwordValue -RegLocation "$($RegLoc)" -RegName "$($RegName)"
        $RegName = "PreInstalledAppsEnabled";                         RestoreSafe-RegistryDwordValue -RegLocation "$($RegLoc)" -RegName "$($RegName)"
        $RegName = "RotatingLockScreenEnabled";                       RestoreSafe-RegistryDwordValue -RegLocation "$($RegLoc)" -RegName "$($RegName)"
        $RegName = "SystemPaneSuggestionsEnabled";                    RestoreSafe-RegistryDwordValue -RegLocation "$($RegLoc)" -RegName "$($RegName)"
        $RegName = "RotatingLockScreenOverlayVisible";                RestoreSafe-RegistryDwordValue -RegLocation "$($RegLoc)" -RegName "$($RegName)"
        $RegName = "ContentDeliveryAllowed";                          RestoreSafe-RegistryDwordValue -RegLocation "$($RegLoc)" -RegName "$($RegName)"

    } catch {
        throw "Unable to restore the registry key for ContentDeliveryManager [$($RegLoc)]-[$($RegName)]..."
    }
}


Export-ModuleMember -Function Disable-OfficeUpdates
Export-ModuleMember -Function Remove-SkypePreview
Export-ModuleMember -Function Disable-EsifService
Export-ModuleMember -Function Disable-BlockingMaintenanceTasks
Export-ModuleMember -Function Disable-SPP
Export-ModuleMember -Function Disable-CompatTelRunner
Export-ModuleMember -Function Disable-ContentDeliveryManagerRegistry
Export-ModuleMember -Function Restore-ContentDeliveryManagerRegistry

# SIG # Begin signature block
# MIIPFgYJKoZIhvcNAQcCoIIPBzCCDwMCAQExDzANBglghkgBZQMEAgEFADB5Bgor
# BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG
# KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCB+jdzbFTuWzMhI
# gVYfg0ajIM3Aak4xbRsVLC5oGryS3KCCDBEwggV2MIIEXqADAgECAhMzAAAFdY/t
# ZZABUyRhAAEAAAV1MA0GCSqGSIb3DQEBCwUAMHkxCzAJBgNVBAYTAlVTMRMwEQYD
# VQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNy
# b3NvZnQgQ29ycG9yYXRpb24xIzAhBgNVBAMTGk1pY3Jvc29mdCBUZXN0aW5nIFBD
# QSAyMDEwMB4XDTIzMDIxNjE4MzM0MloXDTI0MDUxNjE4MzM0MlowdDELMAkGA1UE
# BhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAc
# BgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEeMBwGA1UEAxMVTWljcm9zb2Z0
# IENvcnBvcmF0aW9uMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAorUr
# gCj5FlJ+7vhjx+0mGUFTOka+WKbcrK7B95uaztftwdrnWN27Jslwy9AWtQJY3826
# OWRV4ajdLBVUB94DUgcw2heDY71cYIC7jcMwpwV6N8FHJN+OwTBzkAUWWwVarEPb
# 957z09miEYlJtASbQ8Sf61Beo2h0h82SRLPU4Q1F4CRN9WlXyn+6u5kulYIUUC0c
# bQP6qe+yukueASohANo9BRI/M6bAebYfvFookHLdybZdNFMo7sr1Bt6mCYdHPlyO
# sFYBXyZd+iQ3P6LQnjeZl9aFXXp6aFW88QawMKk/8ce2YTKAFG8y31/0IQWsAZw/
# iyhPJ9e9f9z8xdAWAQIDAQABo4IB+jCCAfYwPAYJKwYBBAGCNxUHBC8wLQYlKwYB
# BAGCNxUIg8+JTa3yAoWhnwyC+sp9geH7dIFPi/M4gp/5IgIBZAIBFTApBgkrBgEE
# AYI3FQoEHDAaMAwGCisGAQQBgjcKAxUwCgYIKwYBBQUHAwMwDgYDVR0PAQH/BAQD
# AgeAMB8GA1UdJQQYMBYGCCsGAQUFBwMDBgorBgEEAYI3CgMVMB0GA1UdDgQWBBTR
# /PEuPn+0r5mHo7syx14SmaNUSDAfBgNVHSMEGDAWgBS/ZaKrb3WjTkWWVwXPOYf0
# wBUcHDBcBgNVHR8EVTBTMFGgT6BNhktodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v
# cGtpb3BzL2NybC9NaWNyb3NvZnQlMjBUZXN0aW5nJTIwUENBJTIwMjAxMCgxKS5j
# cmwwaQYIKwYBBQUHAQEEXTBbMFkGCCsGAQUFBzAChk1odHRwOi8vd3d3Lm1pY3Jv
# c29mdC5jb20vcGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMFRlc3RpbmclMjBQQ0El
# MjAyMDEwKDEpLmNydDBDBgkrBgEEAYI3FAIENh40AE0AUwBJAFQAVABlAHMAdABD
# AG8AZABlAFMAaQBnAG4AaQBuAGcAUwBoAGEAMgAtAEMAUzAMBgNVHRMBAf8EAjAA
# MA0GCSqGSIb3DQEBCwUAA4IBAQAg7Ej3KuUo0ndCL+pCb2eqn8rz77O2j90YQr2Y
# MhMsinWGq1OTp3LZfPNeI3G2BXFtvjIE++ZXjLRa/bnReVrq2p/PikV7zq0WpWzS
# gb1TBvmg80mt7Pgq/RcuNfBlO5t1wRKnmmoR3zZLHmJrXCKKSL55CyL2ZYvi+ilO
# UgcBn4E7fTGAGr41x2aKt7BhnUbiYaVwGdyYKnJv9q+6AC+fI7xnoX2mbO63zWl8
# Se9LfD7P4S/03jwAafqPiHXgkAmw4cgsK4kX9pTS/sYb336dvlilbmcAhtGf1cQ0
# /5h279IUhQb53WulhCAZ3H42KxtetiyNi8MNLoEWK9wh/hb2MIIGkzCCBHugAwIB
# AgITMwAAAC01ekaIyQdx2AAAAAAALTANBgkqhkiG9w0BAQsFADCBkDELMAkGA1UE
# BhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAc
# BgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE6MDgGA1UEAxMxTWljcm9zb2Z0
# IFRlc3RpbmcgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgMjAxMDAeFw0yMDEy
# MTAyMDQzMjBaFw0zNTA2MTcyMTA0MTFaMHkxCzAJBgNVBAYTAlVTMRMwEQYDVQQI
# EwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3Nv
# ZnQgQ29ycG9yYXRpb24xIzAhBgNVBAMTGk1pY3Jvc29mdCBUZXN0aW5nIFBDQSAy
# MDEwMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvzxggau+7P/XF2Py
# pkLRE2KcsBfOukYaeyIuVXOaVLnG1NHKmP53Rw2OnfBezPhU7/LPKtRi8ak0CgTX
# xQWG8hD1TdOWCGaF2wJ9GNzieiOnmildrnkYzwxj8Br/gampQz+pC7lR8bNIOvxE
# Ll8RxVY6/8oOzYgIwf3H1fU+7+pOG3KLI71FN54fcMGnybggc+3zbD2LIQXPdxL+
# odwH6Q1beAlsMlUQR9A3yMf3+nP+RjTkVhaoN2RT1jX7w4C2jraGkaEQ1sFK9uN6
# 1BEKst4unhCX4IGuEl2IAV3MpMQoUpxg8ArmiK9L6VeK7KMPNx4p9l0h09faXQ7J
# TtuNbQIDAQABo4IB+jCCAfYwDgYDVR0PAQH/BAQDAgGGMBIGCSsGAQQBgjcVAQQF
# AgMBAAEwIwYJKwYBBAGCNxUCBBYEFOqfXzO20F+erestpsECu0A4y+e1MB0GA1Ud
# DgQWBBS/ZaKrb3WjTkWWVwXPOYf0wBUcHDBUBgNVHSAETTBLMEkGBFUdIAAwQTA/
# BggrBgEFBQcCARYzaHR0cDovL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9Eb2Nz
# L1JlcG9zaXRvcnkuaHRtMBkGCSsGAQQBgjcUAgQMHgoAUwB1AGIAQwBBMA8GA1Ud
# EwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUowEEfjCIM+u5MZzK64V2Z/xltNEwWQYD
# VR0fBFIwUDBOoEygSoZIaHR0cDovL2NybC5taWNyb3NvZnQuY29tL3BraS9jcmwv
# cHJvZHVjdHMvTWljVGVzUm9vQ2VyQXV0XzIwMTAtMDYtMTcuY3JsMIGNBggrBgEF
# BQcBAQSBgDB+ME0GCCsGAQUFBzAChkFodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v
# cGtpL2NlcnRzL01pY1Rlc1Jvb0NlckF1dF8yMDEwLTA2LTE3LmNydDAtBggrBgEF
# BQcwAYYhaHR0cDovL29uZW9jc3AubWljcm9zb2Z0LmNvbS9vY3NwMA0GCSqGSIb3
# DQEBCwUAA4ICAQAntNCFsp7MD6QqU3PVbdrXMQDI9v9jyPYBEbUYktrctPmvJuj8
# Snm9wWewiAN5Zc81NQVYjuKDBpb1un4SWVCb4PDVPZ0J87tGzYe9dOJ30EYGeiIa
# aStkLLmLOYAM6oInIqIwVyIk2SE/q2lGt8OvwcZevNmPkVYjk6nyJi5EdvS6ciPR
# mW9bRWRT4pWU8bZIQL938LE4lHOQAixrAQiWes5Szp2U85E0nLdaDr5w/I28J/Z1
# +4zW1Nao1prVCOqrosnoNUfVf1kvswfW3FY2l1PiAYp8sGyO57GaztXdBoEOBcDL
# edfcPra9+NLdEF36NkE0g+9dbokFY7KxhUJ8WpMiCmN4yj9LKFLvQbctGMJJY9Ew
# HFifm2pgaiaafKF1Gyz+NruJzEEgpysMo/f9AVBQ/qCdPQQGEWp3QDIaef4ts9QT
# x+RmDKCBDMTFLgFmmhbtUY0JWjLkKn7soz/LIcDUle/p5TiFD4VhfZnAcvYQHXfu
# slnyp+yuhWzASnAQNnOIO6fc1JFIwkDkcM+k/TspfAajzHooSAwXkrOWrjRDV6wI
# 0YzMVHrEyQ0hZ5NnIXbL3lrTkOPjf3NBu1naSNEaySduStDbFVjV3TXoENEnZiug
# JKYSwmhzoYHM1ngipN5rNdqJiK5ukp6E8LDzi3l5/7XctJQY3+ZgHDJosjGCAlsw
# ggJXAgEBMIGQMHkxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAw
# DgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24x
# IzAhBgNVBAMTGk1pY3Jvc29mdCBUZXN0aW5nIFBDQSAyMDEwAhMzAAAFdY/tZZAB
# UyRhAAEAAAV1MA0GCWCGSAFlAwQCAQUAoIGcMBkGCSqGSIb3DQEJAzEMBgorBgEE
# AYI3AgEEMBwGCisGAQQBgjcCAQsxDjAMBgorBgEEAYI3AgEVMC8GCSqGSIb3DQEJ
# BDEiBCC35CbJJIv/40RYJbqHN38ugJJikTCT7XTNPBO9D3gbrjAwBgorBgEEAYI3
# AgEMMSIwIKAegBwAUwBTAEMAXABXAGkAbgBSAFQATQBwAGIAbABkMA0GCSqGSIb3
# DQEBAQUABIIBAAxWBCvqt0uWhwUr0z3pZ4RihDU1J1l4ojFcAcQnM98oM6T8qog+
# /U6VsayVPrvmMtON37CtituGteT9rTBLEB6JfpOBdjIy3O4/pcCJRj1o/w20ZHpg
# EbNUiYq9HUktb10tcFE3qrbqz6sdEDFXeQ9hld81u3n+nKdikBe2GKidjItWXgtd
# mog/2Y9Nu01O4swdYsboijZpaw3Fejas/J1kV3rkFLIm7XPhOmji+Afs751XmF0P
# 8t6eIrPHXjUeHdJqTkBu3An/sUqPMOP3h5S8yM1pt5Hm36R65lBUX09BOW3AdJXO
# N9tO1U+sSnIL03eV/hnG3TOxdo9LlHvxqWE=
# SIG # End signature block
