How To Update Configuration Manager Site Code With PowerShell

System Center 1 Reply

Did you move domains recently or reconfigure your System Center Configuration Manager (SCCM)?  Maybe you’ve found your Config Manager site code broken.  Here’s a one-liner that shows you How to update a sitecode for SCCM with PowerShell.

This assumes that you’ve got SCCM running, and installed on the client.  I found this problem hanging around on our machines after a migration from an old domain into the new domain.  Each domain had Microsoft Configuration Manager installed on it, and each domain had a different site code.  A domain wide group policy was used to install the client in each domain, but I had problems with the site code for the old domain still on the Configuration Manager client after domain migration was complete.

Luckily, we can use PowerShell to change the site code, and we can even use PowerShell to discover published site codes. 

Advertisement

 

First we need to grab hold of our SMS client.  In PowerShell, it couldn’t be easier:

$sms = new-object –comobject “Microsoft.SMS.Client”

We can use the methods of the Microsoft.SMS.Client class by using PowerShell to directly work with the SMS client object:

$sms.SetAssignedSite(“ABC”)

or find out what the site code is currently set to:

$sms.GetAssignedSite()       # This returns a string value

Since the GetAssignedSite() method returns a string, it can be used in scripts to verify the site code is correct.  I use this on scripts (pushed via Group Policy on the domain roots) to verify the site code is correct, and correct the site code automatically if it is wrong.

Since I know the site code, let’s say “ABC” is the new domain and “XYZ” is the old domain, I would use this:

$sms = new-object –comobject “Microsoft.SMS.Client”

if ($sms.GetAssignedSite() –ne “ABC”) { $sms.SetAssignedSite(“ABC”) }

Finally, I’ll call attention to another method of the SMS Client object:  AutoDiscoverSite()

AutoDiscoverSite returns a site code for the Active Directory Domain (if published)

$sms = new-object –comobject “Microsoft.SMS.Client”

if ($sms.GetAssignedSite() –ne $sms.AutoDiscoverSite() ) { $sms.SetAssignedSite($sms.AutoDiscoverSite()) }

Now just a little clean up here…

Write-host “Thanks for reading.  Subscribe! Or, connect via Twitter  or Facebook.  Ask questions to twitter using #poshhelp or #powershell to get q’s answered fast!”

$null = $thisBlogPost

One thought on “How To Update Configuration Manager Site Code With PowerShell

  1. Daniel Albig

    You can also enforce a new AutoDiscovery by simply removing all instances (it should only be one though) of SMS_Authority:

    (Get-WmiObject -Namespace root\ccm -Class SMS_Authority) | Remove-WmiObject
    $WMIObj = Get-WmiObject -Namespace root\ccm -Class SMS_Client
    $WMIObj.EnableAutoAssignment = $true
    $WMIObj.Put()
    Restart-Service CcmExec

    I once also had issues with PendingSiteAssigments.
    To get rid of them, I had to close with a client repair:

    $SMSClient = [wmiclass]”\\.\root\ccm:sms_client”
    Get-WmiObject -Namespace root\ccm -Class SMS_PendingSiteAssignment | Remove-WmiObject
    Get-WmiObject -Namespace root\ccm -Class SMS_PendingReRegistrationOnSiteReAssignment | Remove-WmiObject
    $WMIObj = Get-WmiObject -Namespace root\ccm -Class SMS_Client
    $WMIObj.EnableAutoAssignment = $true
    $null = $WMIObj.Put()
    $null = $SMSClient.RepairClient()

    compared to the com-object, this also works remotely (use -computername for all methods)

    Reply

Whats Your Take?