<#
.SYNOPSIS
    Script used to execute applications directly from my Windows 10 Toast Notification Script
   
.NOTES
    Filename: Run-ApplicationID.ps1
    Version: 1.0
    Author: Martin Bengtsson
    Blog: www.imab.dk
    Twitter: @mwbengtsson

.LINKS
    https://www.imab.dk/windows-10-toast-notification-script
#> 

# Function for triggering the installation or reparing of applications
# Parts of this function is heavily inspired by Timmy's post at: https://timmyit.com/2016/08/08/sccm-and-powershell-force-installuninstall-of-available-software-in-software-center-through-cimwmi-on-a-remote-client/
# Function is modified to cater for a scenario where the application needs repairing instead of installing
# Also removed bits and pieces which I don't need :-)
function Trigger-AppInstallation() {
    param(
        [String][Parameter(Mandatory=$true)] $appID
    )
 
    Begin {
        $application = (Get-CimInstance -ClassName CCM_Application -Namespace "root\ccm\clientSDK" | Where-Object {$_.Id -eq $appID})
        $args = @{EnforcePreference = [UINT32] 0
        Id = "$($application.Id)"
        IsMachineTarget = $application.IsMachineTarget
        IsRebootIfNeeded = $false
        Priority = 'High'
        Revision = "$($application.Revision)"}
     }
 
    Process {
        if ($application.InstallState -eq "NotInstalled") {
            try {
                Invoke-CimMethod -Namespace "root\ccm\clientSDK" -ClassName CCM_Application -MethodName Install -Arguments $args
            }
            catch { }
        }
        elseif ($application.InstallState -eq "Installed") {
            try {
                Invoke-CimMethod -Namespace "root\ccm\clientSDK" -ClassName CCM_Application -MethodName Repair -Arguments $args
            }
            catch { }
        }
    }
 
    End { }
}
$registryPath = "HKCU:\SOFTWARE\ToastNotificationScript"
$applicationID = (Get-ItemProperty -Path $RegistryPath -Name "RunApplicationID").RunApplicationID
Trigger-AppInstallation -appID $applicationID