Last week we got a new set of cmdlets for Configuration Manager and now we have the ability to create Servicing Plans with PowerShell. I put together end-to-end example and with this script you can:

  1. Create a folder called Software Updates (cant move Device Collections into a folder because Move-CMObject is broken in latest release)
  2. Create 5 Device Collections
  3. Create Software Updates Deployment Package
  4. Download the necessary upgrade package
  5. Distribute the package to a Distribution Point
  6. Create 5 different Servicing Plans

 

############ WINDOWS 10 SERVICING ###############################

    Get-CMWindowsServicingPlan
    New-CMWindowsServicingPlan

#These cmdlets require Configuration Manager 1511 or newer.

$DeploymentPackageName = ‘Windows 10 1511 Education’
New-Item -Path CTP:\DeviceCollection -Name ‘Software Updates’

New-CMCollection -Name ‘SUM – RING1’ -CollectionType Device -LimitingCollectionName ‘All Systems’
New-CMCollection -Name ‘SUM – RING2’ -CollectionType Device -LimitingCollectionName ‘All Systems’
New-CMCollection -Name ‘SUM – RING3’ -CollectionType Device -LimitingCollectionName ‘All Systems’
New-CMCollection -Name ‘SUM – RING4’ -CollectionType Device -LimitingCollectionName ‘All Systems’
New-CMCollection -Name ‘SUM – RING5’ -CollectionType Device -LimitingCollectionName ‘All Systems’

### Move-CMObject is broken

New-CMSoftwareUpdateDeploymentPackage `
    -Name $DeploymentPackageName `
    -Path "\\CMTP\Sources\Updates\$DeploymentPackageName"

$DeploymentPackage = Get-CMSoftwareUpdateDeploymentPackage `
    -Name $DeploymentPackageName

$UpgradePackge = Get-CMWindowsUpdate `
    -Name ‘Upgrade to Windows 10 Education, version 1511, 10586 – en-us, Volume’ `
    -Fast

Save-CMSoftwareUpdate `
    -SoftwareUpdate $UpgradePackge `
    -DeploymentPackageName $DeploymentPackageName `
    -Verbose

Start-CMContentDistribution `
    -DeploymentPackage $DeploymentPackageName `
    -DistributionPointName ‘CMTP.corp.viamonstra.com’

New-CMWindowsServicingPlan `
    -Name ‘SUM – RING1’ `
    -CollectionName ‘SUM – RING1’ `
    -EnabledAfterCreate $True `
    -Language English `
    -VerboseLevel AllMessages `
    -SendWakeupPacket $True `
    -RunType RunTheRuleAfterAnySoftwareUpdatePointSynchronization `
    -DeploymentRing CB `
    -DeploymentPackage $DeploymentPackage `
    -UpdateDeploymentWaitDay 10 `
   

New-CMWindowsServicingPlan `
    -Name ‘SUM – RING2’ `
    -CollectionName ‘SUM – RING2’ `
    -EnabledAfterCreate $True `
    -Language English `
    -VerboseLevel AllMessages `
    -SendWakeupPacket $True `
    -RunType RunTheRuleAfterAnySoftwareUpdatePointSynchronization `
    -DeploymentRing CB `
    -DeploymentPackage $DeploymentPackage `
    -UpdateDeploymentWaitDay 15

New-CMWindowsServicingPlan `
    -Name ‘SUM – RING3’ `
    -CollectionName ‘SUM – RING3’ `
    -EnabledAfterCreate $True `
    -Language English `
    -VerboseLevel AllMessages `
    -SendWakeupPacket $True `
    -RunType RunTheRuleAfterAnySoftwareUpdatePointSynchronization `
    -DeploymentRing Cbb `
    -DeploymentPackage $DeploymentPackage `
    -UpdateDeploymentWaitDay 50

New-CMWindowsServicingPlan `
    -Name ‘SUM – RING4’ `
    -CollectionName ‘SUM – RING4’ `
    -EnabledAfterCreate $True `
    -Language English `
    -VerboseLevel AllMessages `
    -SendWakeupPacket $True `
    -RunType RunTheRuleAfterAnySoftwareUpdatePointSynchronization `
    -DeploymentRing Cbb `
    -DeploymentPackage $DeploymentPackage `
    -UpdateDeploymentWaitDay 75

New-CMWindowsServicingPlan `
    -Name ‘SUM – RING5’ `
    -CollectionName ‘SUM – RING5’ `
    -EnabledAfterCreate $True `
    -Language English `
    -VerboseLevel AllMessages `
    -SendWakeupPacket $True `
    -RunType RunTheRuleAfterAnySoftwareUpdatePointSynchronization `
    -DeploymentRing Cbb `
    -DeploymentPackage $DeploymentPackage `
    -UpdateDeploymentWaitDay 100

 

Have fun!

Download the script from here [download id="278"]