Interesting issue with thumbs.db

I’m surprised I just ran into this today – seems easy enough to run into a long time ago.  I was working in ConfigMgr 2012 Beta 2, and was receiving failures when sending content to a distribution point. Looking at distmgr.log, I saw the following errors:

CreateFileW failed for \\servername\sharename\thumbs.db

Failed to add the file. Please check if this file exists. Error 0x80070020

 

Thumbs.db is a hidden file that contains a thumbnail cache for the current directory. I tried to delete the file, and received an error that the file was in use by Windows Explorer. I decided to test this same process in ConfigMgr 2007, and encountered the same issue (which is why I’m surprised I haven’t experienced this issue before). Finally, I terminated and restarted my Windows Explorer process (explorer.exe), and then could successfully delete the evil thumbs.db, and could then update my distribution points successfully.

To prevent this in the future, you need to disable the creation of the thumbnail cache. You can read more for how to disable this using either folder options or group policy. Both links refer to Windows 7, but the same applies to Server 2008R2. You would need to disable this feature on any system you use to browse to the package source. This issue obviously doesn’t occur all the time, but is something to be aware of moving forward.

*Note: this can also affect you if a user who has admin rights browses to a ConfigMgr DP share and thumbs.db is created. Now the hash of this folder if different than ConfigMgr expects, causing a hash mismatch error when running the program.

 

Greg

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