As it turns out, modifying client cache location via app deployment does not work, because you're running the app from the existing cache location.
Rick Jones, a contributor on the ConfigMgr mailing list suggested creating a batch file that copies the VB Script to another folder and calling it from there. It's a nice little workaround!
Here's what I did (details below):
- Create a file called ChangeCacheSettings.cmd
- Create another file called ChangeCacheSettings.vbs
- Use the batch file to call the VBS file
Details of each file:
ChangeCacheSettings.cmd:
@echo off MKDIR "C:\CCMCache" :paths SET loc=%~dp0 COPY "%loc%ChangeCacheSettings.vbs" "C:\CCMCache" /Y cscript "C:\CCMCache\ChangeCacheSettings.vbs"
ChangeCacheSettings.vbs (mostly borrowed elsewhere online):
On Error Resume Next 'Sets cache size and location Dim UIResManager Dim Cache Dim CacheSize Dim CacheLocation CacheSize=20480 CacheLocation="T:\" Set UIResManager = CreateObject("UIResource.UIResourceMgr") Set Cache=UIResManager.GetCacheInfo() Cache.TotalSize=CacheSize Cache.Location=CacheLocation 'Set registry key for detection method const HKEY_LOCAL_MACHINE = &H80000002 strComputer = "." Set StdOut = WScript.StdOut Set oReg=GetObject("winmgmts:{impersonationLevel=impersonate}!\\" &_ strComputer & "\root\default:StdRegProv") strKeyPath = "SOFTWARE\CustomSettings" strValueName = "ConfigMgr-Cache-Config" strValue = "TRUE" oReg.SetStringValue HKEY_LOCAL_MACHINE,strKeyPath,strValueName,strValue 'Sleep 5 minutes to allow time for for this portion of the script to complete WScript.Sleep 300000 'Clean-up - Delete the C:\CCMCache folder strPath = "C:\CCMCache" DeleteFolder strPath Function DeleteFolder(strFolderPath) Dim objFSO, objFolder Set objFSO = CreateObject ("Scripting.FileSystemObject") If objFSO.FolderExists(strFolderPath) Then objFSO.DeleteFolder strFolderPath, True End If Set objFSO = Nothing End Function 'Sleep 30 seconds to allow time for this portion of the script to complete WScript.Sleep 30000
Adding the sleep command ensures everything executes properly. 5 minutes for the first one may seem excessive, but the same guy that offered this method recommended it, it worked for me, so I stuck with it.
Also, note that I did not specify a folder name for the cache folder. It will default to "ccmcache", in this case T:\ccmcache. If I specified T:\ccmcache in the script, it would have ended up being T:\ccmcache\ccmcache.
Building the Application
Create a new application, and set ChangeCacheSettings.cmd as the program in your deployment type. Set your detection method as follows:
- Setting Type: Registry
- Hive: HKLM
- Key: Software\CustomSetttings
- Value: ConfigMgr-Cache-Config
There are other ways to set your detection method. You could use a dummy text file, or a number of other options. This one was just easy for me to do.
Lastly, I added return code "1" as a success, as that is what is returned. By default, it's not included in the return codes.
Deploy to your collection as required, and you're set!