If you are having problems with collections taking a long time to refresh membership, it is very possible that you have incremental updates or collection membership evaluation schedule set of happen frequently on a large number of collections.
Rule of thumb:
- limit incremental collection evaluation to no more than 200Â collections
- limit colection evaluation schedule to no more than 1 time in 4 hours.
See: https://technet.microsoft.com/en-us/library/gg699372.aspx
Ads disabled for Justin
Google AdSense 250x250
Â
So now you have 1600 collections set at incremental updates, what do you do? You could manually change each and every collection... that will take days, so I slapped together a powershell script to do it for you. In this script it does not change the Membership Evaluation for the default collection or "*All Systems" since I need those to stay incremental. you will need to set the $SMSProvider variable in the beginning of the script to the server that has the SMS provider. Normally this is the Primary site server or SQL server. Also change the  $SiteCode variable to your SCCM site code. :
Â
$SMSProvider="<SMSPrivider ServerName>"
$SiteCode="<SiteCode>"
Function create-ScheduleToken {
$SMS_ST_RecurInterval = "SMS_ST_RecurInterval"
$class_SMS_ST_RecurInterval = [wmiclass]""
$class_SMS_ST_RecurInterval.psbase.Path ="\\$SMSProvider\ROOT\SMS\Site_$($SiteCode):$($SMS_ST_RecurInterval)"
 
$script:scheduleToken = $class_SMS_ST_RecurInterval.CreateInstance()
if($scheduleToken)
{
$scheduleToken.DayDuration = 0
$scheduleToken.DaySpan = 1
$scheduleToken.HourDuration = 0
$scheduleToken.HourSpan = 0
$scheduleToken.IsGMT = $false
$scheduleToken.MinuteDuration = 0
$scheduleToken.MinuteSpan = 0
$scheduleToken.StartTime = (Convert-NormalDateToConfigMgrDate $startTime)
}
 
}
 
Function Convert-NormalDateToConfigMgrDate {
[CmdletBinding()]
param (
[parameter(Mandatory=$true, ValueFromPipeline=$true)]
[string]$starttime
)
return [System.Management.ManagementDateTimeconverter]::ToDMTFDateTime($starttime)
}
[datetime]$startTime = [datetime]::Today
import-module ($Env:SMS_ADMIN_UI_PATH.Substring(0,$Env:SMS_ADMIN_UI_PATH.Length-5) + '\ConfigurationManager.psd1')
Get-WmiObject sms_collection -computer "$SMSProvider" -namespace "root\SMS\Site_$($SiteCode)" | foreach {
 
$Coll = [wmi] $_.__Path
if (($Coll.RefreshType -eq 4 -or $Coll.RefreshType -eq 6) -and $coll.Name -notlike "*All Systems" -and $coll.CollectionID -notlike "SMS*") {
 
write-host $Coll.CollectionID "`t" $Coll.Name
 
$coll.RefreshType =2
create-ScheduleToken
$coll.RefreshSchedule=$scheduleToken
$coll.put()
}
}
Â
Comments