Search This Blog

Showing posts with label SCCM Automation. Show all posts
Showing posts with label SCCM Automation. Show all posts

06 December, 2024

Automation with SCCM: A Tale of Scripts and Efficiency

Automation with SCCM: A Tale of Scripts and Efficiency

It was a brisk Monday morning, and the IT office hummed with the usual chaos—phones ringing, keyboards clattering, and an administrator muttering something about an uncooperative application install. Enter Alex, a seasoned SCCM administrator, with a steaming cup of herbal tea in hand (coffee isn't everyone’s thing). Alex had a mission: to automate the mundane, minimize errors, and save time with SCCM, all while keeping things fun.

This story isn’t just about Alex, though—it’s about you, the reader, and the magical powers of automation through PowerShell and scripting tools. Whether you’re an SCCM novice or a seasoned pro, automation can transform your work, freeing you from the mundane and letting you focus on innovation.

The Problem: Mundane Tasks Are Draining

Every SCCM admin knows the pain: deploying the same applications, updating collections, or pushing out configurations one repetitive click at a time. Alex often thought, Why do this manually when I can make SCCM work for me?

The tipping point came after Alex spent three hours clicking through a hundred devices to push a simple application update. That day, automation became more than a buzzword—it became the goal.

But the road to automation wasn’t without obstacles. Alex faced a mountain of tasks, a steep learning curve, and a stack of to-do lists taller than the office printer. The first step? Learning to wield PowerShell like a pro.

Step One: PowerShell to the Rescue

PowerShell isn’t just another scripting language; it’s a gateway to productivity. With its ability to interact seamlessly with SCCM, Alex quickly realized it was the key to achieving true automation.

Application Deployment Made Easy

One of Alex’s first challenges was deploying applications. Previously, this required manually clicking through the SCCM console, selecting devices, and setting deployment purposes. With PowerShell, Alex reduced hours of work to mere seconds:

# Import the SCCM module Import-Module ($env:SMS_ADMIN_UI_PATH.Substring(0,$env:SMS_ADMIN_UI_PATH.Length-5) + '\ConfigurationManager.psd1') # Set SCCM site code cd CAS: # Deploy an application to a collection $AppName = "7-Zip" $App = Get-CMApplication -Name $AppName $Collection = Get-CMDeviceCollection -Name "All Workstations" Start-CMApplicationDeployment -CollectionName $Collection.Name -Name $App.LocalizedDisplayName -DeployPurpose Available

This simple script allowed Alex to deploy applications to collections with minimal effort. The team’s response? Amazement—and maybe a little envy.

Automating Collection Updates

Dynamic collections were Alex’s next target. Keeping collections updated manually was tedious and prone to human error. With a few lines of PowerShell, Alex automated this process:

# Add devices to a collection based on a query $CollectionName = "HR Workstations" $Query = "SELECT * FROM SMS_R_System WHERE SMS_R_System.Department = 'HR'" Set-CMDeviceCollectionQueryMembershipRule -CollectionName $CollectionName -QueryExpression $Query Update-CMCollectionMembership -Name $CollectionName

Now, HR collections updated themselves daily, without Alex lifting a finger.

Step Two: Mastering Patch Management

Patching is the bane of many administrators’ existence. Alex knew that keeping systems secure without disrupting productivity required a balance of timing, precision, and reporting. With PowerShell, patching became manageable:

# Schedule software updates $DeploymentPackage = Get-CMSoftwareUpdateDeploymentPackage -Name "Windows Updates" $Collection = Get-CMDeviceCollection -Name "All Servers" $Schedule = Get-Date -Hour 22 -Minute 0 Start-CMSoftwareUpdateDeployment -Name "Monthly Updates" -CollectionName $Collection.Name -DeploymentPackage $DeploymentPackage -DeploymentAvailableDateTime $Schedule

By automating deployment schedules and ensuring compliance, Alex saved hours previously spent wrangling updates.

Step Three: Reports That Write Themselves

Reporting was another time sink. Alex often had to generate compliance reports manually, a task that consumed precious hours each month. Enter the magic of scripting:

# Generate a compliance report $ComplianceReport = Get-CMComplianceSetting -Name "Antivirus Status" | Export-Csv -Path "C:\Reports\ComplianceReport.csv" -NoTypeInformation Write-Host "Compliance report generated at C:\Reports\ComplianceReport.csv"

With this script, Alex delivered compliance reports to management with the click of a button.

Beyond PowerShell: Third-Party Tools and Advanced Integration

While PowerShell formed the backbone of Alex’s automation journey, it wasn’t the only tool in the arsenal. Third-party tools like Orchestrator expanded SCCM’s capabilities, enabling workflows that tied together multiple systems.

Integrating Slack Notifications

To keep the team informed, Alex added Slack notifications to automation scripts. A quick webhook ensured everyone knew when a deployment or patch cycle was complete:

# Send a Slack notification $WebhookUrl = "https://hooks.slack.com/services/XXX/XXX/XXX" $Payload = @{text="Deployment completed successfully!"} | ConvertTo-Json -Depth 10 Invoke-RestMethod -Uri $WebhookUrl -Method Post -Body $Payload

Now, instead of fielding constant status inquiries, Alex let the scripts do the talking.

Troubleshooting: Turning Hiccups into Learning Opportunities

Automation isn’t without its challenges. Alex learned the hard way that even the best scripts need testing. One infamous bug caused a deployment to target the wrong collection. The fix? Adding validation steps to scripts:

# Validate collection before deployment if (-not (Get-CMDeviceCollection -Name "Critical Servers")) { Write-Host "Collection does not exist. Deployment aborted." exit }

This small adjustment saved Alex from future headaches—and a few awkward meetings.

The Outcome: A Well-Oiled SCCM Machine

By the end of the month, Alex had transformed SCCM into a powerhouse of automation. Application deployments, patch schedules, and compliance reports were no longer daunting tasks. The result? More time for strategic planning and fewer late nights in the office.

Key Takeaways

  • Start Small: Identify one repetitive task to automate, then build from there.
  • Leverage PowerShell: SCCM’s PowerShell module is incredibly powerful and user-friendly.
  • Learn from Mistakes: Automation isn’t perfect, but every misstep is a learning opportunity.
  • Experiment with Third-Party Tools: Tools like Orchestrator and webhooks can expand your automation capabilities.

A Call to Action

Automation isn’t just a time-saver—it’s a game-changer. With a little scripting knowledge and the right tools, you can transform SCCM into a productivity machine.

So grab your tea (or water), fire up your editor, and start scripting your way to a more efficient IT environment. The only question left is, What will you automate first?

04 December, 2024

The Curious Case of the Incomplete SCCM Request

The Curious Case of the Incomplete SCCM Request

It was another Monday morning, and you’d barely settled into your chair when the email popped up: “Hey, can you automate the install of [Insert Application of the Week]? Thanks!”

Simple enough, right? Except experience told you that “simple” was a trap. Behind every “simple install” lurked unspoken dependencies, forgotten configurations, and that one obscure setting buried in a 200-page admin guide. This time, though, you were ready. You’d developed a system—a foolproof way to gather all the prerequisites and turn chaos into a smooth, automated masterpiece.

Here’s how you do it.

Start With a Gentle Interrogation

Your first move? Respond to the request with some polite but pointed questions. You’re not grilling a suspect—you’re just… clarifying.

  • What exactly do you want this to do?
    Is the goal to install the app and call it a day, or are there follow-ups like configurations, license activations, or mysterious registry keys?
  • What does “working” look like to you?
    Is it just sitting there quietly installed, or does it need to hum a specific tune on startup?
  • What could go wrong?
    If you’ve ever been told, “It works fine on the test machine,” you know this question is worth its weight in log files.

Asking the right questions upfront saves you from playing a game of “Who Broke It?” later.

Gather the Sacred Prerequisites

Every automation project has its holy relics—those bits of information and tools you must collect before starting your quest.

  1. The Installer
    Is it an MSI, an EXE, or something rarer, like a proprietary installer with no silent mode (cue dramatic sigh)? If it's an MSI, confirm the silent install switches (/quiet /norestart) and any custom properties.

  2. Dependencies
    Does this app need .NET, Java, or the collective hopes and dreams of the IT department? Make a list. Don’t forget drivers, libraries, or network permissions.

  3. Configuration Settings
    Are there configuration files to edit? Registry keys to add? Licensing servers to point to? Clarify if these need to be machine-wide or user-specific.

  4. Testing Criteria
    How will you verify the installation? Write a script or a test plan. Even a basic "open the app and poke at it" plan is better than crossing your fingers.

  5. Rollback Plan
    No one likes to think about failure, but it’s better to plan for it than to discover mid-install that your only rollback strategy is "unplug the computer and pray."

Beyond MSI: Tackling Configurations

Let’s say the install is only part of the job. Maybe the app needs some post-install TLC:

  • Configuration Files: You can automate edits to .INI, .JSON, or XML files with PowerShell.
  • Registry Keys: A little Set-ItemProperty action in PowerShell works wonders.
  • Service Connections: Does the app need to talk to a server or database? If yes, automate the setup and test the connection.

The key here is modularity. Each step should work on its own, like a Lego block. If the post-install fails, the install itself should remain intact.

The Magic of Application Groups

Now, what if you need to install not one but several applications, each with its quirks and dependencies? Enter SCCM application groups, the Swiss Army knife of multi-app deployments.

With application groups, you can:

  • Maintain Order: Specify the install sequence to avoid, say, installing the app before its dependencies.
  • Keep It Modular: Each application can have its detection methods and install/uninstall scripts.
  • Make Updates Easy: Need to tweak one component? No problem—you can update it without redoing the whole group.

For example, automating a developer workstation setup might include:

  1. Installing Visual Studio.
  2. Configuring Git.
  3. Setting up Node.js.
  4. Running a custom PowerShell script to pull environment settings.

Each step is managed individually but deployed as a seamless package. Efficiency and control? Check and check.

The PowerShell Angle

PowerShell is your best friend here. Let’s break it down:

  1. Pre-Checks: Before you do anything, make sure the system is ready. Check for disk space, existing dependencies, or incompatible versions.

    if ((Get-Volume -DriveLetter C).SizeRemaining -lt 10GB) { Write-Error "Not enough disk space!" exit }
  2. Silent Installation: Automate the install with Start-Process or SCCM cmdlets.

    Start-Process "msiexec.exe" -ArgumentList "/i MyApp.msi /quiet /norestart" -Wait
  3. Post-Install Tasks: Add configurations, apply registry keys, or start services.

    Set-ItemProperty -Path "HKLM:\Software\MyApp" -Name "ConfigKey" -Value "ConfigValue"
  4. Validation: Always test. Whether it’s as simple as checking for a file or as complex as running a test script, make sure you verify success.

The Final Word

Automation isn’t just about making life easier (though it definitely does that). It’s about creating robust, repeatable processes that reduce errors and free you to tackle more exciting challenges. By asking the right questions, gathering prerequisites, and embracing tools like PowerShell and SCCM application groups, you’ll deliver solutions that go beyond "just works" to "works beautifully."

And the next time someone asks for a “simple install,” you’ll smile, knowing you’re already three steps ahead.