Toast-Notification-Script/Custom Protocols/Run-ApplicationID.ps1
2020-07-03 21:29:26 +02:00

54 lines
No EOL
2 KiB
PowerShell

<#
.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