Enable or Disable Incremental Collection Updates via PowerShell
Hi Gang.
Here is a couple of functions I’ve written to enable or disable Incremental Collection updates by Collection Name or Collection ID.
Enable via Collection ID
Enable-IncrementalUpdates -CollectionID PRI0000C
Enable via Collection Name
Enable-IncrementalUpdates –CollectionName “CU Deployment”
Disable via Collection ID
Disable-IncrementalUpdates -CollectionID PRI0000C
Disable via Collection Name
Disable-IncrementalUpdates –CollectionName “CU Deployment”
I’ve also added an optional parameter to specify the Server Name, so this can be run remotely by adding the SMS Provider name to your cmdlet
Enable-IncrementalUpdates -CollectionID PRI0000C –Server PRI
And of course it’s pipeline enabled
Import-CSV -Path .\collections.csv | % {Enable-IncrementalUpdates -CollectionName $_.Collection}
Here’s the code
Edit: Thanks to our commenter below, I’ve updated the script to perform the change depending on the membership schedule setting.
001002003004005006007008009010011012013014015016017018019020021022023024025026027028029030031032033034035036037038039040041042043044045 | function Disable-IncrementalUpdates { [CmdletBinding(DefaultParameterSetName="CollectionID")] Param ( [Parameter(Mandatory=$true,ParameterSetName="collectionID", Position=0)] [String]$CollectionID, [Parameter(Mandatory=$true,ParameterSetName="collectionName", Position=0)] [String]$CollectionName, [Parameter(Mandatory=$false,ParameterSetName="collectionName", Position=1)] [Parameter(Mandatory=$false,ParameterSetName="collectionID", Position=1)] [String]$Server )if(!$server){ $server = '.'}$siteCode = @(Get-WmiObject -Namespace root\sms -Class SMS_ProviderLocation -ComputerName $server)[0].SiteCodegwmi sms_collection -ComputerName $server -Namespace root\sms\site_$siteCode -Filter "CollectionID = '$collectionID' or Name = '$collectionName'" | % {$collection = [wmi] $_.__Path If($collection.RefreshType -eq 4) {$collection.RefreshType = 1}If($collection.RefreshType -eq 6) {$Collection.RefreshType = 2}$collection.Put() | Out-Null} }function Enable-IncrementalUpdates { [CmdletBinding(DefaultParameterSetName="CollectionID")] Param ( [Parameter(Mandatory=$true,ParameterSetName="collectionID", Position=0)] [String]$CollectionID, [Parameter(Mandatory=$true,ParameterSetName="collectionName", Position=0)] [String]$CollectionName, [Parameter(Mandatory=$false,ParameterSetName="collectionName", Position=1)] [Parameter(Mandatory=$false,ParameterSetName="collectionID", Position=1)] [String]$Server )if(!$server){ $server = '.'}$siteCode = @(Get-WmiObject -Namespace root\sms -Class SMS_ProviderLocation -ComputerName $server)[0].SiteCodegwmi sms_collection -ComputerName $server -Namespace root\sms\site_$siteCode -Filter "CollectionID = '$collectionID' or Name = '$collectionName'" | % {$collection = [wmi] $_.__Path If($collection.RefreshType -eq 1) {$collection.RefreshType = 4}If($collection.RefreshType -eq 2) {$Collection.RefreshType = 6}$collection.Put() | Out-Null } } |
Happy POSHing!
Matt
Comments
- Anonymous
January 01, 2003
Hey Ryan,
Nope, wasn't intentionally left out... just missed the logic! Thanks, updated.
Matt - Anonymous
May 27, 2015
There are two refresh types you missed.
Refresh Type 1: Manual, No Incremental
Refresh Type 2: Schedule, No Incremental
Refresh Type 4: Manual, Incremental
Refresh Type 6: Schedule Incremental
In my scripts to change incremental updates, I first check to see what the current schedule is and change the setting based on whatever it's current set to. For instance, if the collection is set to Manual - Incremental, I change it to simply Manual. If the collection is set to Schedule - No Incremental, I'll switch it to Schedule - Incremental.
I'm not sure if that was intentionally left out or not.