How To: Enable the “Suppress Program Notifications” Checkbox for all Programs in a Package

In a previous post, I wrote how to enable the “Suppress Program Notifications” Checkbox for Program Properties for all programs in your environment. By request, in this post we’re going to modify the script slightly to modify all programs for one package, given the PackageID.

#Select all programs for one package
#(Update MySiteServer and LAB with your ConfigMgr Server name and Site code, and PackageID with a valid packageID)
$prgs = get-wmiobject sms_program -computername MySiteServer -namespace root\sms\site_LAB -filter "PackageID='LAB0023C'"
$prgs | foreach {
#ProgramFlags are a lazy property, so make explicit call.
$prg = [wmi] $_.__Path
if ($prg.ProgramFlags -band ([math]::pow(2,10)))
{
# Suppress already enabled
}
else
{
# Not suppressed - display programname and packageID
$prg.Programname + "`t" + $prg.PackageiD
# flip the programflags bit to enable suppression
$prg.ProgramFlags = $prg.ProgramFlags -bor ([math]::pow(2,10))
# use Put to save changes
$prg.put()
}
#rinse and repeat
}

The only change we had to make was to add the filter command to the get-wmiobject cmdlet. -filter “PackageID=’LAB0023C'”

 Read more about SMS_Program and ProgramFlags.

Greg

How To: Enable the “Suppress Program Notifications” Checkbox for Program Properties

After rebuilding our ConfigMgr 2012 site to RC2, we had to run the Migration Tool to migrate Packages from ConfigMgr 2007. One of the site-wide settings that we took advantage of in ConfigMgr 2007 was to hide the “New Program is Available” systray notification. This works slightly different in ConfigMgr 2012, so we had to enable this checkbox for all programs. We’ll save the details on ConfigMgr systray notifications for a separate post, but for now, here’s a quick PowerShell script to enable the “Suppress program notifications” checkbox for every program in  your ConfigMgr 2012 (or ConfigMgr 2007) environment.

(mouse over code and click the “view source” icon to copy the code)

#Select all programs (Update MySiteServer and LAB with your ConfigMgr Server name and Site code)
$prgs = get-wmiobject sms_program -computername MySiteServer -namespace root\sms\site_LAB
$prgs | foreach {
#ProgramFlags are a lazy property, so make explicit call.
$prg = [wmi] $_.__Path
if ($prg.ProgramFlags -band ([math]::pow(2,10)))
{
# Suppress already enabled
}
else
{
# Not suppressed - display programname and packageID
$prg.Programname + "`t" + $prg.PackageiD
# flip the programflags bit to enable suppression
$prg.ProgramFlags = $prg.ProgramFlags -bor ([math]::pow(2,10))
# use Put to save changes
$prg.put()
}
#rinse and repeat
}

Read more about SMS_Program and ProgramFlags.

Greg