One thing I have found with System Center Configuration Manager is that the client cache folder can take up a lot space on the hard drive. Filled with updates or applications source files that no longer are needed.
Only way is to set the Cache size to smaller value using a vbs script (or powershell) that runs these commands...
set oUIResManager = createobject("UIResource.UIResourceMgr")
set oCache=oUIResManager.GetCacheInfo()
oCache.TotalSize=4096
set oCache=oUIResManager.GetCacheInfo()
oCache.TotalSize=4096
However, if you were to install a program like AutoCAD that requires more than 4GB of cache storage, it would likely fail.
The PowerShell script listed at the bottom of this post (based on Kaido Järvemets posting at http://cm12sdk.net) will clean up the "old" content in ccmcache based on the LastReferenced WMI information.
The '$ReferenceAge.Days -gt 30' section deletes anything not referenced in the last 30 days.
The "#Change Cache size" section is optional and only included for reference.
The 'stop-process $pid -Force' command however is required as there have been cases where the PowerShell script fails to exit.
It can be run on a remote computer using the psexec program from Sysinternals.
Example.
copy the file over to hard drive of the remote system.
psexec.exe -s \\computername powershell -noprofile -file "c:\clear ccmcache.ps1"
Planned implementation... (other than manually running).
Compliance item for harddrives with less than x amount of free space that remediates with a PowerShell command.
or
Task sequence that runs every # of days.
#Based on http://cm12sdk.net/?p=1517
$Today = Get-Date
$CacheInfoQuery = Get-WmiObject -Namespace Root\ccm\SoftMgmtAgent -Class CacheInfoEx
ForEach ($Item in $CacheInfoQuery) {
$LastDate = [Management.ManagementDateTimeConverter]::ToDateTime($Item.LastReferenced)
$CacheElementID = "{" + $Item.CacheID + "}"
$ReferenceAge = $Today - $LastDate
$FolderLocation = $item.location
if ($ReferenceAge.Days -gt 30) {
#Write-Host Found $CacheElementID Last referenced $LastDate That is $ReferenceAge ago in $FolderLocation -ForegroundColor Red
#Based on http://cm12sdk.net/?p=1526
$CacheInfoQuery = Get-WmiObject -Namespace Root\ccm\SoftMgmtAgent -Class CacheInfoEx
ForEach ($Item in $CacheInfoQuery) {
$LastDate = [Management.ManagementDateTimeConverter]::ToDateTime($Item.LastReferenced)
$CacheElementID = "{" + $Item.CacheID + "}"
$ReferenceAge = $Today - $LastDate
$FolderLocation = $item.location
if ($ReferenceAge.Days -gt 30) {
#Write-Host Found $CacheElementID Last referenced $LastDate That is $ReferenceAge ago in $FolderLocation -ForegroundColor Red
#Based on http://cm12sdk.net/?p=1526
Write-Host Too old, deleting folder $FolderLocation -ForegroundColor Red
$CMObject = New-Object -ComObject "UIResource.UIResourceMgr"
$CMCacheObjects = $CMObject.GetCacheInfo()
$CMCacheObjects.DeleteCacheElement($CacheElementID)
}
$CMObject = New-Object -ComObject "UIResource.UIResourceMgr"
$CMCacheObjects = $CMObject.GetCacheInfo()
$CMCacheObjects.DeleteCacheElement($CacheElementID)
}
#Remove number sign from the next 2 lines to allow for more information
#else {
#Write-Host $FolderLocation was last referenced $LastDate That is $ReferenceAge days ago -ForegroundColor Green}
}
#else {
#Write-Host $FolderLocation was last referenced $LastDate That is $ReferenceAge days ago -ForegroundColor Green}
}
#Change Cache size
$CacheQuery = Get-WmiObject -Namespace ROOT\CCM\SoftMgmtAgent -Class CacheConfig
$CacheQuery.Size = 1000
$CacheQuery.Put()
#Restart CcmExec service
Restart-Service -Name CcmExec
$CacheQuery = Get-WmiObject -Namespace ROOT\CCM\SoftMgmtAgent -Class CacheConfig
$CacheQuery.Size = 1000
$CacheQuery.Put()
#Restart CcmExec service
Restart-Service -Name CcmExec
stop-process $pid -Force
More SCCM related posts
No comments:
Post a Comment