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!
