5 New Year’s Resolutions for Every SCCM Administrator


Maybe you’re like me and you’ve watched the first week of January come and go without giving a single thought to a New Year’s resolution. You already know you’re not going back to the gym and you’ve accepted that you can’t say no to pizza. So this year, instead of picking a resolution you know you won’t stick with, here are five New Year’s resolutions every Configuration Manager administrator could benefit from.

  1. Implement a front end into your task sequence

    Whether it’s TSLaunch, ConfigMgr OSD FrontEnd, or even MDT’s UDI, there is always value in implementing a front end into your OSD task sequence.My personal favorite is UI++, created by Jason Sandys. Its simple XML syntax, clear documentation, and frequent updates make it an easy choice if you’re just getting started.

    What should you do with it? Here are a few easy wins for any environment:

    • Implement a preflight to ensure only supported models are running your task sequence
    • Ask for the domain user name of the end user receiving the device so you can immediately associate that new hardware with a specific user in SCCM
    • Create a department dropdown that decides which applications are installed and which OU the machine is moved to

    If you already have a front end, that’s great! Implement something new that adds value to your service desk or end users. If you can’t think of any, I’m willing to bet your service desk can!

  2. Standardize your packaging process

    Keeping a standardized packaging process makes troubleshooting application installations easier for your frontline, your own team, and you! Implement something like the PowerShell Application Deployment Toolkit and make it a standard across all of the applications you and your team package this year.

    You don’t need to know PowerShell to start using PSAppDeployToolkit. The included Word document and simple cmdlet names make transitioning from batch files easy. Rich and automatic logging cranks out a verbose MSI installer log by default and paints a picture of what state the machine was in when the install began. Present prompts to end users and give them the option to defer application installations, all under a company branded banner.

    Whatever you choose to use to package with this year, put in the extra effort to package everything that way, no matter how simple the install.

  3. Eliminate Windows 7 and Windows Server 2008/R2 in your environment

    January 14th, 2020 is almost exactly a year away. If you already finished your Windows 10 migration a couple years ago, ensure the last handful of Windows 7 machines you have in your environment disappear. You know, that one sitting under the desk of the untouchable user no one wants to work with. It’s time to get management involved and kick that thing off your network.

    Also, don’t forget that Windows Server 2008 and 2008 R2 are also no longer supported on that same date. Work with your infrastructure team to ensure they have everything they need to build new VMs and enroll into your SCCM environment ahead of their big push to spin up new hardware. There’s nothing worse than discovering 100 newly built VMs aren’t in your SCCM environment or boundaries.

  4. Get certified

    In my opinion, the single most important thing you can do to stay relevant in IT is to keep getting certified. Certifications are the continuing education of the IT field. Make them mandatory for yourself to keep your skills sharp and relevant in the workplace.

    I’m personally studying for the new 70-703 to replace my older 70-243 and round out my MCSE. The 70-703 has been around long enough now that there is some great content on PluralSight you can get through in just about two weeks. Channel your inner Shia LaBeouf and just do it! Don’t let your dreams be dreams!

  5. Take on an apprentice

    See, you were rocking through this list until you hit this one. “I’ve already got a front end! We already use PSAppDeployToolkit! What even is Windows 7?!” Yeah, this is the tough one.Stop for a minute and think back to how you started working with ConfigMgr. Think about the very first time you learned what “/q” did to that installer you double-clicked a hundred times. And think about how appreciative you are towards those individuals that taught you those skills you use every single day.

    This doesn’t need to be anything formal. You don’t need a company sponsored internship or an interview process. Find that one guy or gal on your help desk that shows some passion in their work and take them out to lunch. Teach them how to silence an installer or, heck, how to read one of those PSAppDeployToolkit logs you just standardized all of your packaging around. Whatever it is, don’t forget that you’re in your current role because someone took you under their wing and made you a better tech.

Have a better SCCM-related New Year’s resolution in mind? Comment and share it below!

Cody Clements

Add task sequence dependencies to DP group

, , , , , ,

We’re working on adding new distribution points that are used exclusively for imaging.  This motivated me to create a script to make sure all dependent packages are assigned to the proper distribution point group.  (You are using distribution point groups right?)

Change the site code in the script and it will prompt you for the task sequence and then prompt for the distribution point group.  After that, magic!  🙂

I wasn’t planning on posting this one yet as it could use a lot of polish but I’m sure it’ll evolve as time goes on and I’ll do my best to keep this updated.

On to the code…


$siteCode = "CM1"

Import-Module ConfigurationManager
Set-Location "$($siteCode):"

$site = (Get-CMSite -SiteCode $siteCode)
$sequences = Get-CMTaskSequence | Select-Object -Property Name | Out-GridView -Title "Select task sequences for DG" -PassThru
$dg = Get-CMDistributionPointGroup | Out-GridView -Title "Select a distribution point group." -PassThru

if($ConfirmPreference -eq 'Low') {$conf = @{Confirm = $true}}

foreach ($tsname in $sequences)
    $ts = Get-CMTaskSequence -Name $tsname.Name
    Write-Host "References $($ts.References.Count)"
    foreach ($ref in $ts.References)
        $pkgContentServer = $null
        $pkgId = $null

        if ($ref.Type -eq 0)
            $pkgContentServer = Get-WmiObject -ComputerName $site.ServerName -Namespace "rootSMSsite_$($site.SiteCode)" -Class SMS_PackageContentServerInfo -Filter "PackageID = '$($ref.Package)' AND ContentServerID = '$($dg.GroupID)'"
            $pkgId = $ref.Package
        elseif ($ref.Type -eq 1)
            $app = Get-CMApplication -ModelName $ref.Package
            $pkgContentServer = Get-WmiObject -ComputerName $site.ServerName -Namespace "rootSMSsite_$($site.SiteCode)" -Class SMS_PackageContentServerInfo -Filter "PackageID = '$($app.PackageID)' AND ContentServerID = '$($dg.GroupID)'"
            $pkgId = $app.PackageID

        if ($pkgContentServer -eq $null)
            Write-Host "Adding distribution point group $($dg.Name) to package $($ref.Package)."
            if ($PSCmdlet.ShouldProcess("$($ref.Package)", "Distribute package"))
                if ($ref.Type -eq 0)
                    $baseObject = Get-WmiObject -ComputerName $site.ServerName -Namespace "rootSMSsite_$($site.SiteCode)" -Class SMS_PackageBaseClass -Filter "PackageID = '$pkgId'"
                    Start-CMContentDistribution -InputObject ($baseObject | ConvertTo-CMIResultObject) -DistributionPointGroupName $dg.Name #-WhatIf:([bool]$WhatIfPreference.IsPresent) #@conf
                elseif ($ref.Type -eq 1)
                    Start-CMContentDistribution -ApplicationId $app.CI_ID -DistributionPointGroupName $dg.Name

    $bootImage = Get-CMBootImage -Id $ts.BootImageID
    $pkgContentServer = Get-WmiObject -ComputerName $site.ServerName -Namespace "rootSMSsite_$($site.SiteCode)" -Class SMS_PackageContentServerInfo -Filter "PackageID = '$($bootImage.PackageID)' AND ContentServerID = '$($dg.GroupID)'"
    if ($pkgContentServer -eq $null)
        Write-Host "Adding distribution point group $($dg.Name) to package $($bootImage.PackageID)."
        if ($PSCmdlet.ShouldProcess("$($bootImage.PackageID)", "Distribute package"))
            $baseObject = Get-WmiObject -ComputerName $site.ServerName -Namespace "rootSMSsite_$($site.SiteCode)" -Class SMS_PackageBaseClass -Filter "PackageID = '$($bootImage.PackageID)'"
            Start-CMContentDistribution -InputObject ($baseObject | ConvertTo-CMIResultObject) -DistributionPointGroupName $dg.Name