A friend of mine (you know who you are) asked help (kind of) ,how to clean up the content inside ccmcache folder in better way instead of using script to deploy it as application/package/task sequence .
I would recommended to use compliance settings(configuration item/configuration baseline) to deploy the script on schedule basis (monthly once or how you want) to Clients.
One advantage of using compliance settings is that, you do not need use source files to implement this solution and it would be easier to discovery and remediate if any content found older than x days.
In this blog post, we will see, how to use simple PowerShell script (can get from many sources on internet) to create configuration item and configuration baseline and deploy to clients.
If you do not want to follow all the steps outlined here ,jump to end of the post, to see how you can achieve this task in just 2 to 3 steps.
How to create Configuration Item:
launch SCCM console –>go to Assets and compliance—right click on Configuration Items—create Configuration Item
Give meaning full name something like clean ccmcache content
Leave the default settings and click next
Create new compliance rule
Follow the settings as outlined below .
You need to have 2 PowerShell scripts 1) Discovery to check the count of folders that are older than x days for deletion 2) To remediate (delete) these folders if any exist older than x days
For Discovery script ,click on edit script and use the following PowerShell script.
This script will tell us ,the count of folders inside the ccmcache older than X days which will help us to clean the content.
Change the number of days that you want to delete content older than.
#discovery script
$MinDays = 14
$UIResourceMgr = New-Object -ComObject UIResource.UIResourceMgr
$Cache = $UIResourceMgr.GetCacheInfo()
($Cache.GetCacheElements() |
where-object {[datetime]$_.LastReferenceTime -lt (get-date).adddays(-$mindays)} |
Measure-object).Count
For remediation script, use the following PowerShell script to clean the content older than 14 days:
This script will clean the content (folders) older than 14 days.
#remediate script
$MinDays = 14
$UIResourceMgr = New-Object -ComObject UIResource.UIResourceMgr
$Cache = $UIResourceMgr.GetCacheInfo()
$Cache.GetCacheElements() |
where-object {[datetime]$_.LastReferenceTime -lt (get-date).adddays(-$mindays)} |
foreach {
$Cache.DeleteCacheElement($_.CacheElementID)
}
click on compliance rules and click New
Enter the name that you wish to use for the rule name and select the return value by the discovery script 0.
The setting must comply rule used ,if the content returns by the discovery script is 0 ,there is no content to clean up ,if at all the discovery script return count value other than 0 then perform the content cleanup using the remediation script.
Click Ok, Ok and Next
verify once if the settings are configured correctly below.
Click next,next,next to see the summary page:
with this ,we have completed ,how to create Configuration Item which includes all the settings like discovery ,remediation .
How to create Configuration Baseline:
Right click on Configuration Baseline and select Create configuration Baseline
Give a Name,description and click on Add Configuration Item
Select the configuration item that we created above ,add and click ok .
we are now created configuration baseline and ready to deploy to collection that you are interested in with schedule.
How to deploy Configuration Baseline to Collection:
Right click on the configuration baseline that we created earlier and click on deploy
Adjust the below settings according to your environment like collection and schedule .
Under the deployment tab ,you will see the configuration baseline deployed to collection and its compliance %
Wait the clients to receive the policy (trigger machine policy retrieval ,if you want to speed up the process) and let remediation happen..
Go to any SCCM client ,open configuration manager applet, look at configurations tab ,you will there is no ccmcache cleanup available.
As soon as you refresh the machine policy ,client will poll and get the newly created policy which will appear in configurations tab ,click on evaluate.
Evaluate will take few seconds to run the discovery script and if it find the count other than 0 ,perform the remediation script that we used .
Click on view report to see a nice html report with compliance status
After a while ,client evaluate the baseline and report the status to SCCM ,which you can see in console ,configuration baseline.
With this ,we have completed task of how to clean up content in ccmcache older than 14 days.
How to avoid following these steps and create all in 3 steps ?
To make this task easier for you ,I have exported the Configuration baseline into cab file . So all you need is ,download the cab file from here ,go to configuration baseline ,import the cab file and change the settings how you want in the PowerShell using above steps.
Below are client the logs (C:\windows\ccm\logs) which will help you to check and troubleshoot compliance setting issues:
CIDownloader.log –>Records details about configuration item definition downloads.
DcmWmiProvider.log—>Records information about reading configuration item synclets from Windows Management Instrumentation (WMI).
DCMReporting.log—>Records information about reporting policy platform results into state messages for configuration items.
CIAgent.log—>Records details about the process of remediation and compliance for compliance settings, software updates, and application management.