this vbs run on the client machine will do it.
******************************************************************** ' ' Rerunadvertisement.vbs ' ' Syntax: ' cscript.exe Rerunadvertisement.vbs <packageid> <programID> <advertid> [machine] ' wscript.exe Rerunadvertisement.vbs <packageid> <programID> <advertid> [machine] ' '******************************************************************** const HKEY_LOCAL_MACHINE = &H80000002 const KEY_EXECUTION_HISTORY = "SOFTWARE\Microsoft\SMS\Mobile Client\Software Distribution\Execution History\" const QUERY_SCHEDULES = "select ScheduledMessageID from CCM_Scheduler_ScheduledMessage where ScheduledMessageID LIKE " dim sMachine dim oNamespace dim bCscript dim oRegProvider dim oInParam dim sPackageID dim sProgramID dim sAdvertID '******************************************************************** ' ' OUT function ' '******************************************************************** sub OUT(sText) if (bCscript = true) then WScript.Echo(sText) end if end sub '******************************************************************** ' ' Main ' '******************************************************************** ' ' Determine script host ' if (InStr(lcase(WScript.FullName), "cscript") > 0) then bCScript = true else bCScript = false end if if (WScript.Arguments.Count < 3) then OUT "Usage : cscript/wscript Rerunadvertisement.vbs <PackageID> <ProgramID> <AdvertID> [Machine]" WScript.Quit -1 end if ' ' Get advert to rerun and the target machine name ' sPackageID = WScript.Arguments(0) sProgramID = WScript.Arguments(1) sAdvertID = WScript.Arguments(2) if (WScript.Arguments.Count > 3) then sMachine = WScript.Arguments(3) OUT "Connecting to machine " & sMachine else sMachine = "." OUT "Connecting to local machine" end if ' ' we first connect to the registry and delete the program history ' OUT "Deleting program history for program " & sProgramID & " from package " & sPackageID on error resume next set oNamespace = GetObject("winmgmts://" & sMachine & "/root/default") if (Err.number <> 0) then OUT "Failed to connect to WMI on " & sMachine & ": " & Err.Description & " (" & Err.number & ")" WScript.Quit -1 end if OUT "Successfully connected to WMI" Set oRegProvider = oNamespace.Get("StdRegProv") if (Err.number <> 0) then OUT "Failed to get the StdRegProv class on " & sMachine & ": " & Err.Description & " (" & Err.number & ")" WScript.Quit -1 end if ' ' search the system subkeys for the program. we will not look in the user subkey ' dim arrSubKeys dim sSubKey dim sValue dim bFound dim dwRet oRegProvider.EnumKey HKEY_LOCAL_MACHINE, KEY_EXECUTION_HISTORY & "System\" & sPackageID, arrSubKeys if (Err.number <> 0) then OUT "Failed to EnumKey on " & sMachine & ": " & Err.Description & " (" & Err.number & ")" WScript.Quit -1 end if bFound = false for each sSubKey in arrSubKeys oRegProvider.GetStringValue HKEY_LOCAL_MACHINE, KEY_EXECUTION_HISTORY & "System\" & sPackageID & "\" & sSubKey, "_ProgramID", sValue if (Err.number <> 0) then OUT "Failed to GetStringValue for subkey " & sSubKey & " on " & sMachine & ": " & Err.Description & " (" & Err.number & ")" WScript.Quit -1 end if if (LCase(sProgramID) = LCase(sValue)) then ' we've found the required key, delete and exit the loop oRegProvider.DeleteKey HKEY_LOCAL_MACHINE, KEY_EXECUTION_HISTORY & "System\" & sPackageID & "\" & sSubKey if (Err.number <> 0) then OUT "Failed to Delete history for subkey " & sSubKey & " on " & sMachine & ": " & Err.Description & " (" & Err.number & ")" WScript.Quit -1 end if bFound = true exit for end if Next ' ' may want to change this logic and run it even if it was never run before ' if (bFound = true) then OUT "Succesfuly deleted program history for program " & sProgramID & " from package " & sPackageID else OUT "Failed to locate the given advertisement in the system history." OUT "Advertisement will not rerun." WScript.Quit -1 end if ' ' Now connect to the policy namespace on the machine and retrieve the schedule message id ' on error resume next set oNamespace = GetObject("winmgmts://" & sMachine & "/root/ccm/policy/machine") if (Err.number <> 0) then OUT "Failed to connect to WMI on " & sMachine & ": " & Err.Description & " (" & Err.number & ")" WScript.Quit -1 end if OUT "Successfully connected to WMI" dim oSet dim oObj dim sTriggerID dim sPattern sPattern = sAdvertID & "-" & sPackageID & "%" OUT("Executing query " & QUERY_SCHEDULES & sPattern) Set oSet = oNamespace.ExecQuery(QUERY_SCHEDULES & "'" & sPattern & "'" ) if (Err.number <> 0) then OUT "Failed to Query schedules on " & sMachine & ": " & Err.Description & " (" & Err.number & ")" WScript.Quit -1 end if ' ' there should only ever be 1 object ' if (oSet.Count <> 1) then OUT "Unable to identify the trigger ID. Program will not rerun." WScript.Quit -1 end if for each oObj in oSet sTriggerID = oObj.ScheduledMessageID exit for Next OUT "Successfuly retrieved schedule trigger " & sTriggerID ' ' Invoke SMS_Client.TriggerSchedule method ' OUT "Executing program rerun" set oNamespace = GetObject("winmgmts://" & sMachine & "/root/ccm") if (Err.number <> 0) then OUT "Failed to connect to WMI on " & sMachine & ": " & Err.Description & " (" & Err.number & ")" WScript.Quit -1 end if OUT "Successfully connected to WMI" dim oSMSClient Set oSMSClient = oNamespace.Get("SMS_Client") if (Err.number <> 0) then OUT "Failed to get the SMS_Client class " & Err.Description & " (" & Err.number & ")" WScript.Quit -1 end if oSMSClient.TriggerSchedule sTriggerID if (Err.number <> 0) then OUT "Method failed: " & Err.Description & " (" & Err.number & ")" WScript.Quit -1 else OUT "Successfully triggered program for rerun." end if