I’ll See You at the Midwest Management Summit!


Just in case you haven’t heard the news yet, my friends over at the Minnesota System Center User Group are sponsoring the inaugural Midwest Management Summit (MMS)!  This is going to be a great conference. Think old-school Microsoft Management Summit, remove the keynote, as well as the 100, 200, and most 300-level sessions. Oh yea, remove the marketing pitch too!

MMS 2014 will be a deep dive into the products you know and love – System Center 2012 (ConfigMgr, OpsMgr, SvcMgr, etc), Windows PowerShell, Service Management Automation.  These sessions are fresh, deep, and interactive.

Fresh – This is new content – not content that you’ve already viewed on Channel9, attended at Microsoft Official Curriculum courses, or anywhere else.

Deep – We’re talking as deep as 500 level stuff here (watch my blog for a few of my hot picks later this week).

Interactive – Have you ever heard of Birds of a Feather (BoF) sessions? These were always very popular at MMS in previous years, and were often fully booked, and you were unable to attend. MMS 2014 has a BoF session for every single presentation. That’s right-for every session, you will see 60 minutes for presentation, and 50 minutes for BoF, Q&A, and interactive discussion.

Here’s a list of the sessions that I’ll be presenting (review full session list):

ConfigMgr Applications and PowerShell – In Depth – My friend Trevor Sullivan and I will take you “to the deep end” of using PowerShell to manage ConfigMgr Applications, end-to-end. We’ll discuss and demonstrate native cmdlets, as well as diving into WMI to handle things that are not yet supported by the cmdlets.

PowerShell and ConfigMgr – Most Requested Scenarios and Procedures – My friend Kaido Jarvmets and I will take you through the most-requested items from our blog posts, for leveraging PowerShell with ConfigMgr. Send me any special requests too!

PowerShell DSC vs. ConfigMgr Settings Management (Compliance Settings) – You’ve heard a lot about PowerShell DSC in the past year. How is it different than ConfigMgr Settings Managment? What’s the right tool for the job? In this session, I’ll dive into scenarios and advantages of one vs. the other.

Server OS Deployment Deep Dive (with ConfigMgr 2012 R2) – You’ve ‘mastered’ OS Deployment (let’s face it, we all have room to grow in this space – but regardless, you’re pretty good with OSD in deploying workstation operating systems). This session will dive into the scenarios and nuances of deploying Server OS. Managing server firmware and hardware, handling static IP addresses, safety precautions, and more.

In addition to the sessions I’m presenting, I’m also excited to sit down and learn from all the other brilliant speakers! Stay tuned – I’ll post some of my hot pick sessions soon!


This post first appeared on http://www.gregramsey.net

How To: Initiate the “Validate” Action on all DPs for a Package in ConfigMgr 2012

ConfigMgr 2012 has a feature that allows you to validate content of a distribution point on a schedule, which works great for normal business. However, if you encounter an issue on a package and need to validate content immediately for each DP, it does require a bit of effort, as you have to go to the object in question, view the properties, then on the Content Locations tab, select a DP and click “Validate” – rinse and repeat–you must do this for each DP  to validate content, as described in the documentation. This post will describe how to enable a right-click option on any content in the Monitoring tab of the admin console.


You can download the .zip file and follow the directions in the included ‘info.txt’ file for a fast deployment to your admin console. You can review additional details below.

First you must create the proper r-click context menu. Copy the following .xml, save it as “ValidateContent.xml”, and copy it to C:\Program Files (x86)\Microsoft Configuration Manager\AdminConsole\XmlStorage\Extensions\Actions\14214306-59f0-46cf-b453-a649f2a249e1\ValidateContent.xml. (Adjust the path as appropriate to your ConfigMgr Admin Console installation path).

<ActionDescription DisplayName="Validate Content on All DPs" MnemonicDisplayName="Validate Content on All DPs" Description = "Validate Content on All DPs" RibbonDisplayType="TextAndSmallImage">
-ExecutionPolicy RemoteSigned -File C:\PowerShell\CM12RClickTools\ValidatePackage.ps1 "##SUB:__Server##" "##SUB:__Namespace##" "##SUB:PackageID##"

Notice in the .xml we specify the -ExeuctionPolicy RemoteSigned parameter. Best practice would be to sign your scripts, but if that’s not something you can manage easily, you can use the parameter as shown to modify the execution policy for the specific instance you’re launching, instead of changing the execution policy for all script execution. Next, copy the PowerShell code below, and save it to C:\PowerShell\CM12RClickTools\ValidatePackage.ps1 (although it’s named ValidatePackage, it does work for all content–Application, OS Image, Package, etc).

#capturing arguments:
$SiteServer = $args[0]
$SiteNamespace = $args[1]
$SiteCode = ($args[1]).Substring(14)
$PackageID = $args[2]

"{0} {1} {2} {3}" -f $SiteServer, $SiteNamespace, $SiteCode, $PackageID

$myFilter = "PackageID='$PackageID'"

$dps = gwmi sms_distributionpoint -namespace $SiteNamespace -ComputerName $SiteServer -filter $myFilter

if (($dps | measure-object).Count -ge 1) {
$dps | % {
"Initiating 'Validate Content' on {0}..." -f $_.ServerNALPath
if ($env:Computername -eq $SiteServer) {  #if running directly on the site server, omit the -computername argument

invoke-cimmethod -ClassName sms_distributionPoint -namespace $SiteNamespace -methodname "VerifyPackage" -arguments @{ PackageID=$_.PackageID; Nalpath=$_.ServerNALPath}
else {
invoke-cimmethod -ClassName sms_distributionPoint -namespace $SiteNamespace -ComputerName $SiteServer -methodname "VerifyPackage" -arguments @{ PackageID=$_.PackageID; Nalpath=$_.ServerNALPath}
"Validation initiated - Review Content Status for more information."
Write-Host "Press any key to continue ..."
$x = $host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown")

else {
"0 DPs found with this package. Content must be distributed in order to validate."
Write-Host "Press any key to continue ..."
$x = $host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown")


Now re-launch your ConfigMgr Admin console to use the new r-click->Validate Content on All DPs feature. As you can see from the code, this scritpt uses WMI, as SP1 does not contain cmdlets to perform this action. We use the Get-WMIobject (gwmi) cmdlet for the SMS_DistributionPoint class, filtered to only receive DPs for the desired PackageID. We then execute the VerifyPackage method for each DP.

**Important note: As of ConfigMgr 2012 SP1, only content in the content library (single instance store) will be validated. There is currently no ability to verify content on a package share (e.g. \\mydp\smspkgd$\CAS00023\).

For more information about Content Validation:

Happy Scripting!