How to Set Up System Center Configuration Manager Client on Windows Server 2012 R2

System Center Configuration Manager (SCCM, now Microsoft Endpoint Configuration Manager) is Microsoft’s enterprise solution for operating system deployment, software distribution, patch management, hardware and software inventory, and compliance management. The Configuration Manager client installed on each managed Windows Server 2012 R2 instance communicates with the SCCM hierarchy to receive software deployments, report inventory data, apply compliance baselines, and deliver operating system updates.

For organizations using SCCM, the client installation is a standard part of the server build process. This guide covers client installation methods, boundary and site assignment configuration, site code verification, client health monitoring, and common troubleshooting steps for Windows Server 2012 R2 targets. The procedures apply to SCCM 2012 R2 and Current Branch (versions through 1810, which maintains WS2012 R2 support).

Prerequisites

– A functioning SCCM hierarchy with at least one Primary Site Server
– Windows Server 2012 R2 as the target managed node
– Administrative credentials on the target server
– Network connectivity to the SCCM Management Point and Distribution Point
– The target server IP address or subnet must be within a configured SCCM Boundary
– .NET Framework 4.0 or later installed
– Windows Remote Registry service running (for push installation)
– File and Printer Sharing enabled (for push installation)
– BITS (Background Intelligent Transfer Service) enabled

Step 1: Prepare the Server for Client Installation

# Enable required services for SCCM client
Set-Service RemoteRegistry -StartupType Automatic
Start-Service RemoteRegistry

Set-Service BITS -StartupType Automatic
Start-Service BITS

# Enable File and Printer Sharing for push installation
netsh advfirewall firewall set rule group="File and Printer Sharing" new enable=yes

# Verify .NET Framework
(Get-ItemProperty "HKLM:SOFTWAREMicrosoftNET Framework SetupNDPv4Full").Release
# Minimum: 378389 (.NET 4.5)

# Check WMI service
Get-Service winmgmt | Select-Object Status

# Verify disk space (minimum 250MB for client)
Get-PSDrive C | Select-Object @{N="FreeGB"; E={[math]::Round($_.Free/1GB,2)}}

Step 2: Verify Boundary and Boundary Group Configuration

The SCCM client must be in a configured Boundary Group to receive site assignment and content. Verify the server’s IP is in a boundary before installing:

# Check the server's IP addresses
Get-NetIPAddress -AddressFamily IPv4 | Where-Object { $_.PrefixOrigin -ne "WellKnown" } |
    Select-Object InterfaceAlias, IPAddress, PrefixLength

# The subnet (e.g., 192.168.1.0/24) must be configured as an SCCM boundary
# on the Primary Site Server in:
# Administration > Hierarchy Configuration > Boundaries > New Boundary (IP Subnet type)

Step 3: Push Installation from SCCM Console

The most common installation method for domain members is push installation from the SCCM console:

1. In the SCCM console, navigate to Assets and Compliance > Devices
2. If the server is already discovered but has no client, right-click it and select Install Client
3. Alternatively, from All Systems collection, right-click the target > Install Client
4. In the Install Configuration Manager Client Wizard:
– Check “Always install the client software”
– Check “Install the client software from a specified site” and enter your Site Code
– Specify Management Point if needed
5. Click Next and then Install

Monitor installation from the Site Server logs:

# View client push installation logs on the SCCM Site Server
# Log files location: Program FilesMicrosoft Configuration ManagerLogs
# Key logs: ccm.log, ClientInstall.log, smsclientinstall.log

Step 4: Manual Client Installation (ccmsetup.exe)

For servers that cannot receive push installations, copy and run ccmsetup.exe manually:

# ccmsetup.exe is available at:
# \SCCMSiteServerSMS_SITECODEClientccmsetup.exe

# Copy to target server
Copy-Item "\SCCMServer01SMS_PS1Clientccmsetup.exe" "C:Temp"

# Basic installation with site code
C:Tempccmsetup.exe /mp:SCCMServer01.domain.com SMSSITECODE=PS1

# Full installation with all key parameters
C:Tempccmsetup.exe `
    /mp:SCCMServer01.domain.com `
    SMSSITECODE=PS1 `
    SMSMP=SCCMServer01.domain.com `
    FSP=SCCMFallbackStatusPoint.domain.com `
    DNSSUFFIX=domain.com `
    SMSCACHESIZE=8192 `
    /BITSPriority:NORMAL `
    /logon

Monitor ccmsetup.log during installation:

# ccmsetup.log location during installation
Get-Content "C:WindowsccmsetupLogsccmsetup.log" -Wait -Tail 30

Step 5: Verify Client Installation

# Check if the SMS Agent Host service (SCCM client) is running
Get-Service CcmExec | Select-Object Name, DisplayName, Status, StartType

# Verify client version
(Get-WmiObject -Namespace "rootccm" -Class SMS_Client).ClientVersion

# Check client site assignment
(Get-WmiObject -Namespace "rootccm" -Class SMS_Client).AssignedSite

# Check management point communication
(Get-WmiObject -Namespace "rootccmLocationServices" -Class SMS_ActiveMPCandidate) |
    Select-Object MP, SiteCode, Type

Step 6: Review Key Client Log Files

The SCCM client writes detailed log files for every operation. These are essential for troubleshooting:

# SCCM client log directory
$logPath = "C:WindowsCCMLogs"

# Key log files and their purpose:
# CcmExec.log      - Client service startup and communication
# LocationServices.log - Site/MP discovery and assignment
# ClientIDManagerStartup.log - Client ID registration
# InventoryAgent.log - Hardware/software inventory
# PolicyAgent.log   - Policy download and application
# ScanAgent.log     - Software update scan
# WUAHandler.log    - Windows Update Agent interaction
# CAS.log           - Content access service (downloads)
# ContentTransferManager.log - BITS download management

# View the most recent errors in any log
Get-Content "$logPathLocationServices.log" -Tail 50 | Where-Object { $_ -match "error|fail|warn" }

Step 7: Configure Client Settings and Cache

# Adjust the client cache size (default is 5120 MB)
$cacheManager = New-Object -ComObject UIResource.UIResourceMgr
$cacheDir = $cacheManager.GetCacheInfo()
$cacheDir.TotalSize = 10240  # Set to 10 GB

# Alternatively, via WMI
$sccmClient = Get-WmiObject -Namespace "rootccm" -Class CacheConfig
$sccmClient.Size = 10240
$sccmClient.Put()

# View current cache contents
$cache = New-Object -ComObject UIResource.UIResourceMgr
$cache.GetCacheInfo().GetCacheElements() | 
    Select-Object ContentId, ContentVersion, ContentSize, LastReferenceTime

# Clear the cache of items not in use
$cache.GetCacheInfo().GetCacheElements() | 
    Where-Object { (Get-Date) - $_.LastReferenceTime -gt (New-TimeSpan -Days 30) } |
    ForEach-Object { $cache.GetCacheInfo().DeleteCacheElement($_.CacheElementId) }

Step 8: Trigger Client Actions Manually

Trigger SCCM client cycles for immediate action rather than waiting for scheduled intervals:

# Trigger client actions via WMI (ScheduleID values)
$client = [wmiclass]"\.rootccm:SMS_Client"

# Machine Policy Retrieval and Evaluation cycle
$client.TriggerSchedule("{00000000-0000-0000-0000-000000000021}")

# Hardware Inventory cycle
$client.TriggerSchedule("{00000000-0000-0000-0000-000000000001}")

# Software Inventory cycle
$client.TriggerSchedule("{00000000-0000-0000-0000-000000000002}")

# Software Update Scan cycle
$client.TriggerSchedule("{00000000-0000-0000-0000-000000000113}")

# Application Deployment Evaluation cycle
$client.TriggerSchedule("{00000000-0000-0000-0000-000000000121}")

# Discovery Data collection cycle
$client.TriggerSchedule("{00000000-0000-0000-0000-000000000003}")

Step 9: Check Client Health

# Check client health status via WMI
Get-WmiObject -Namespace "rootCCMClientSDK" -Class CCM_ClientUtilities |
    Invoke-WmiMethod -Name DetermineIfRebootPending

# Check if client is in provisioning mode (blocks policy processing)
$provMode = (Get-ItemProperty "HKLM:SOFTWAREMicrosoftCCMCcmExec").ProvisioningMode
Write-Host "Provisioning Mode: $provMode"

# Disable provisioning mode if stuck
if ($provMode -eq "true") {
    Set-ItemProperty "HKLM:SOFTWAREMicrosoftCCMCcmExec" -Name ProvisioningMode -Value "false"
    Invoke-WmiMethod -Namespace "rootccm" -Class SMS_Client -Name SetClientProvisioningMode -ArgumentList @($false)
}

# View SCCM evaluation results
Get-WmiObject -Namespace "rootCCMSoftwareUpdatesUpdatesStore" -Class CCM_UpdateStatus |
    Select-Object Article, Bulletin, Status, Title |
    Where-Object Status -eq "ciDetectStateInstallable" |
    Sort-Object Title

Step 10: Uninstall and Reinstall the Client

# Uninstall SCCM client (use ccmsetup /uninstall)
Start-Process "C:Windowsccmsetupccmsetup.exe" -ArgumentList "/uninstall" -Wait

# Verify uninstall complete
Get-Service CcmExec -ErrorAction SilentlyContinue

# Clean up residual files if doing a clean reinstall
Remove-Item "C:WindowsCCM" -Recurse -Force -ErrorAction SilentlyContinue
Remove-Item "C:WindowsCCMSETUP" -Recurse -Force -ErrorAction SilentlyContinue
Remove-Item "C:WindowsCCMCACHE" -Recurse -Force -ErrorAction SilentlyContinue

# Remove registry entries
Remove-Item "HKLM:SOFTWAREMicrosoftCCM" -Recurse -Force -ErrorAction SilentlyContinue
Remove-Item "HKLM:SOFTWAREMicrosoftSMS" -Recurse -Force -ErrorAction SilentlyContinue

# Clean reinstall
C:Tempccmsetup.exe /mp:SCCMServer01.domain.com SMSSITECODE=PS1

Summary

The Configuration Manager client on Windows Server 2012 R2 enables comprehensive endpoint management including software deployment, patch compliance, hardware inventory, and configuration baseline enforcement. Whether deployed via push installation from the SCCM console for domain-joined servers or via manual ccmsetup.exe installation for more controlled deployments, the client’s CcmExec service maintains continuous communication with the SCCM hierarchy. Understanding the key log files, how to trigger client cycles manually, and how to check and maintain client health ensures that the SCCM client remains functional and the server stays within management boundaries — a prerequisite for maintaining patch compliance and software standardization across the server estate.