Script - Create Collection - v 1.0.0.0

A Script that you can use to create a single SCCM Device Collection or create multiple Device Collections based on a file with Collection names in it. The script will also allow you to set the refresh schedule for the collections.



<#
.SYNOPSIS
Creates a SCCM Device Collection

.DESCRIPTION
Creates a SCCM Device Collection from imput or a list of names in a text file and allows you to set the refresh type

.PARAMETER CollectionName
Name of the collection you want to create 

.PARAMETER CollectionsFile
Use this parameter to specify a list of collection names to create, must be full file path

.PARAMETER LimitingCollection
The Collection you want to limmit the collection members from

.PARAMETER LoadLocal
When used will load the Powershell Module from the local system rather then the server

.PARAMETER SiteServer
Set the SCCM Site Server

.PARAMETER SiteCode
Sets the SCCM Site Code

.PARAMETER ScheduleType
Weeks - Sets the Collection to update every x weeks on a spesific days of the week
Days - Sets the Collection to update every x days
Hours - Sets the Collection to update every x Hours
Minutes - Sets teh Collection to update every x Minutes
Continuous - sets the Collection to update Incrementally

.EXAMPLE
Create-Collection.ps1 -SiteServer -Collctionname "Testing Collection" SRV-SCCM -SiteCode MSN -LimmitingCollection "All Desktops" -ScheduleType "Hours"
Creates a Collection Named Testing Collection with alimmiting Collection of All Desktops that will refresh hourly. 

.NOTES
Created By: Kris Gross
Email: KrisGross@jackofalltech.org
Twitter: @kmgamd
Version: 1.0.0.0

.LINK
http://sccmtst.com

#>

Param(  
        $CollectionName,
        $CollectionsFile,
        [Parameter(Mandatory=$True)]
        $LimitingCollection,
        [switch]$LoadLocal,
        [Parameter(Mandatory=$True)]
        $SiteServer,
        [Parameter(Mandatory=$True)]
        $SiteCode,
        [Parameter(Mandatory=$True)]
        [ValidateSet('Weeks','Days','Hours','Minutes','Continuous')]
        [string]$ScheduleType 
        )
#checks to see if CollectionName and CollectionsFile are both being used 
if (($CollectionName) -and ($CollectionsFile)) {Write-Error "Cannot use both CollectionName and CollectionsFile paramiters"}
#checks is the script should load the local PowerShell Module
if ($LoadLocal -eq "$True") 
{
    Set-Location 'C:\Program Files (x86)\Microsoft Configuration Manager\AdminConsole\bin\'
    Import-Module .\ConfigurationManager.psd1 -verbose:$false   
}
else 
{
    Import-Module \\$SiteServer\SMS_$SiteCode\AdminConsole\bin\ConfigurationManager.psd1 -verbose:$false
}
#Sets the loacation to the SCCM Site so the script can run
$site = $SiteCode + ":"
Set-Location $site
#Sets the Schedule based on the ScheduleType parameter
If ($Scheduletype -eq "Hours") 
{   
    $Hours = Read-Host "How many hourse between refreshe"
    $Schedule = New-CMSchedule -RecurInterval Hours -RecurCount $Hours
}

If ($Scheduletype -eq "Days") 
{   
    $Days = Read-Host "How many days between refreshe"
    $Schedule = New-CMSchedule -RecurInterval Days -RecurCount $Days
}

If ($Scheduletype -eq "Weeks") 
{   
    $DayOfWeek = Read-Host "Day of the week for reshresh"
    $WeeksBetween = Read-Host "Weeks between refresh"
    $Schedule = New-CMSchedule -Start "01/01/2014 9:00 PM" -DayOfWeek $DayOfWeek -RecurCount $WeeksBetween
}

If ($Scheduletype -eq "Minutes") 
{   
    $Minutes = Read-Host "How many minutes between refreshe"
    $Schedule = New-CMSchedule -RecurInterval Minutes -RecurCount $Minutes
}
#If ether the CollectionName or CollectionsFile parameter are used then will run
if ((!($CollectionName)) -or (!($CollectionsFile)))
{
        If ($CollectionsFile)
        {
            $CollectionsFromFile = Get-Content "$CollectionsFile"
            If ($ScheduleType -eq "Continuous")
            {
                Foreach ($Collection in ($CollectionsFromFile))
                {
                    New-CmDeviceCollection -Name "$Collection" -LimitingCollectionName "$LimitingCollection" -RefreshType Continuous
                }
            }
            else 
            {
                Foreach ($Collection in ($CollectionsFromFile))
                {
                    New-CmDeviceCollection -Name "$Collection" -LimitingCollectionName "$LimitingCollection" -RefreshSchedule $Schedule
                }
            }
        }

        IF (!($CollectionsFile))
        {
            If ($ScheduleType -eq "Continuous") 
            {
                New-CmDeviceCollection -Name "$CollectionName" -LimitingCollectionName "$LimitingCollection" -RefreshType Continuous
            }       
            else 
            {
                New-CmDeviceCollection -Name "$CollectionName" -LimitingCollectionName "$LimitingCollection" -RefreshSchedule $Schedule
            }
        }
}
#Changes the location back to where the script was ran from
Set-Location $PSScriptRoot

Comments

Popular posts from this blog

SCCM Task Sequence GUI - How to set up the TS to work with a GUI

SCCM Applications vs. SCCM Packages: Understanding the Key Differences

How to Deploy a Windows 10 Servicing update as a Application