Today I got a call from a System Center Configuration Manager (SCCM/ConfigMgr) customer that wanted to automate the creation of device collections for each SCCM client version, that was in their environment. I guess summer time means "time to cleanup/fix all the broken clients" :-)

A couple of years ago I create another similar script for CU updates: https://gallery.technet.microsoft.com/SCCM-Creating-Collections-f334c7f0 but this time I wanted to make the script simpler, fully automated and only create the collections that was needed by the customer.

This script will pull a list of all the client versions from the SCCM site server, and create a collection for each of them. That way you don't need to maintain the script every time a new version/update of SCCM are released. Simply just run the script again.

More information: https://www.ronnipedersen.com/2017/07/07/sccm-creating-collections-for-client-versions/ 

/Enjoy

 

 

PowerShell
Edit|Remove
# -----------------------------------------------------------------------------   
# Author: Ronni Pedersen, Microsoft MVP: Enterprise Client Management   
# Blog: http://www.ronnipedersen.com   
# Twitter: @ronnipedersen   
# Date: 26/08-2017   
# -----------------------------------------------------------------------------   
  
##*===============================================  
##* DECLARATIONS  
##*===============================================  
  
# Declaring variables  
$SiteCode = "DAN"   
$LimitingCollectionName = "All Systems"  
   
##*===============================================  
##* IMPORT CONFIGURATION MANAGER MODULE  
##*===============================================   
  
# Import the ConfigurationManager.psd1 module    
Import-Module "$($ENV:SMS_ADMIN_UI_PATH)\..\ConfigurationManager.psd1"    
   
# Set the current location to be the site code.   
Set-Location $SiteCode":\"    
   
##*===============================================  
##* CREATE COLLECTIONS  
##*===============================================  
  
# Create Update Schedules for the collections  
$Schedule = New-CMSchedule -Start "01/01/2017 9:00 PM" -DayOfWeek Sunday -RecurCount 1  
  
# Get All Client Versions  
$ClientVersions = Get-CMDevice -CollectionName "All Desktop and Server Clients" | Group ClientVersion  
  
# Create a Collection for each Client Version  
$ClientVersions | foreach {  
    $CMVersion = $_.Name  
    $CollectionName = "#CLI - Client Version = $CMVersion"  
    $CollectionExist = Get-CMDeviceCollection -Name "$CollectionName"  
  
    If ($CollectionExist) {  
        Write-Host "The collection $CollectionName already exist"  
        }  
    Else {  
        Write-Host "Creating collection"  
        New-CMDeviceCollection -Name $CollectionName -LimitingCollectionName $LimitingCollectionName -RefreshSchedule $Schedule -RefreshType Periodic  
        Add-CMDeviceCollectionQueryMembershipRule -CollectionName $CollectionName -QueryExpression "select SMS_R_SYSTEM.ResourceID,SMS_R_SYSTEM.ResourceType,SMS_R_SYSTEM.Name,SMS_R_SYSTEM.SMSUniqueIdentifier,SMS_R_SYSTEM.ResourceDomainORWorkgroup,SMS_R_SYSTEM.Client from SMS_R_System where SMS_R_System.ClientVersion = '$CMVersion'" -RuleName "Client Version = $CMVersion" 
        Write-Host "Collection $CollectionName created" 
        }  
    }   
  
# -----------------------------------------------------------------------------