Change Collection Refresh Rate
Had some problems with loads of collection refresh taking all of the CPU on the SCCM-server.
So first, to get the SCCM-server to calm down I wrote a small (and somewhat ugly, since it uses SQL) hack:
UPDATE Collections Set Flags = 17 Where CollectionName LIKE '%Something In The Collection Name%' AND Flags=18
This script uncheck the box “Update his collection on a schedule” for the collections.
Then, when the SCCM server did go back to a normal CPU-utilization we used this script to set another refresh-rate on the collections.
Const cSccmProvider = "." Const cWmiUsername = "" Const cWmiPassword = "" Const cCollectionNamePattern = "%Something In The Collection Name%" Const cDoUpdate = True ' Set to false to test Const cRefreshDays = 0 ' 0 - 31 Const cRefreshHours = 12 ' 0 - 23 Const cRefreshMinutes = 0 ' 0-59 Set oLocator = CreateObject("WbemScripting.SWbemLocator") ' --- Get SCCM Site Code WScript.Echo "Connecting to: " & cSccmProvider Set oSccmWmi = oLocator.ConnectServer(cSccmProvider, "root\sms", cWmiUsername, cWmiPassword) Set oWmiQuery = oSccmWmi.ExecQuery("SELECT SiteCode FROM SMS_ProviderLocation WHERE ProviderForLocalSite=true") For each currentSite in oWmiQuery sSccmSiteCode = currentSite.SiteCode Exit For Next ' --- Connect to site WScript.Echo "Connecting to: " & cSccmProvider & " - root\sms\site_" & sSccmSiteCode Set oSccmWmi = oLocator.ConnectServer(cSccmProvider, "root\sms\site_" & sSccmSiteCode, cWmiUsername, cWmiPassword) ' --- Create interval WScript.Echo "Creating Interval: " & cRefreshDays & " days, " & cRefreshHours & " hours, " & cRefreshMinutes & " minutes." Set oInterval = oSccmWmi.Get("SMS_ST_RecurInterval") oInterval.DaySpan = cRefreshDays oInterval.HourSpan = cRefreshHours oInterval.MinuteSpan = cRefreshMinutes oInterval.isGmt = False oInterval.StartTime = "20090101000000.000000+***" ' --- List all collection set oCollections = oSccmWmi.ExecQuery("SELECT * FROM SMS_Collection WHERE Name LIKE '" & cCollectionNamePattern & "'") For Each oCollection In oCollections ' --- Update interval on Collection If cDoUpdate Then WScript.Echo "Updating: " & oCollection.CollectionID & " - " & oCollection.Name Set oCollectionToChange = oSccmWmi.Get("SMS_Collection.CollectionID='" & oCollection.CollectionID & "'") oCollectionToChange .RefreshSchedule = Array(oInterval) oCollectionToChange .RefreshType = 2 '1 = Manual, 2 = Periodic refresh oCollectionToChange .Put_ Else WScript.Echo "Testing: " & oCollection.CollectionID & " - " & oCollection.Name End if Next
The script is attached here: changeCollectionRefresh.vbs