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-IncrementalUpdatesCollectionName “CU Deployment” 

Disable via Collection ID

Disable-IncrementalUpdates -CollectionID PRI0000C

Disable via Collection Name

Disable-IncrementalUpdatesCollectionName “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 PRI0000CServer 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.

001
002
003
004
005
006
007
008
009
010
011
012
013
014
015
016
017
018
019
020
021
022
023
024
025
026
027
028
029
030
031
032
033
034
035
036
037
038
039
040
041
042
043
044
045

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].SiteCode
gwmi 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].SiteCode
gwmi 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