Identifying vPro clients and their AMT status in SCCM


SCCM has two methods for tracking the provisioning status of AMT on vPro clients.  The first method is a port-based discovery method where SCCM will connect to a target client and attempt to connect to AMT ports to detect AMT capabilities.  The second method is through the hardware inventory provided by the SCCM agent.  If you have the vPro drivers installed on your clients, the SCCM agent will be able to detect the AMT version and provisioning state, and roll this information up during your regular inventory cycles.

Building queries for collections and reports

There are two locations you can get AMT data from:

  • SMS_R_System
  • SMS_G_System_AMT_AGENT

SMS_R_System contains data about AMT that is updated by the SCCM server itself.  This information is updated when SCCM provisions AMT on a vPro client, or when you perform the discover out-of-band management controllers function against a client.  There are two string values that you can use: AMTFullVersion & AMTStatus.  Take a look at the following link for more detail on this WMI class:

AMTFullVersion will report back the full firmware version in the standard major.minor.micro format.

AMTStatus will report back the provisioning status of the client with a range of values.

Null for unknown

0 for not supported

1 for detected

2 for not provisioned

3 for provisioned

SMS_G_System_AMT_AGENT contains the data rolled up during the SCCM hardware inventory process.  This is a mirror of the data from the SCCM client WMI class SMS_AMTObject.  You can learn more about this WMI class at  There are two fields here that I will focus on: AMT and ProvisionState.

AMT will report back the full AMT version in the major.minor.micro format.

ProvisionState will give you a range of values.

0 for factory set-up mode (not provisioned)

1 for set-up mode (in the process of being provisioned)

2 for operational mode (provisioned)

So, the bottom line here is that SCCM stores AMT version information and provisioning status information in two places.  You may think this is redundant, but it’s actually beneficial.  Having both a “server view” and “client view” of AMT information can be very useful in identifying potential problems in your environment.  For instance, you could use these fields to track down clients that claim to be provisioned, but SCCM says they are not, or, the reverse.

The data in SMS_G_System_AMT_AGENT is also useful for creating reports or collections in SCCM for clients you may have provisioned with another tool, like the Intel Setup and Configuration Service.  You could build collections in SCCM and reference them in other tools, PowerShell, and use the PowerShell Module for Intel vPro Technology to leverage AMT capabilities.

Let’s finish this off with a couple of simple example queries.

The following is a query I use to create a collection of AMT systems that are unprovisioned based on the hardware inventory:


SMS_R_SYSTEM.ResourceID,SMS_R_SYSTEM.ResourceType,SMS_R_SYSTEM.Name,SMS_R_SYSTEM.SMSUniqueIdentifier,SMS_R_SYSTEM.ResourceDomainORWorkgroup,SMS_R_SYSTEM.Client from SMS_R_System inner join SMS_G_System_AMT_AGENT on SMS_G_System_AMT_AGENT.ResourceID = SMS_R_System.ResourceId where SMS_G_System_AMT_AGENT.AMT >= "0" and (SMS_R_System.AMTStatus != "3" or SMS_R_System.AMTStatus is NULL)

The logic in the query identifies vPro clients that have any AMT version that do not have a provisioning status of operational/provisioned (SMS_R_System.AMTStatus != "3") or have a null AMT status (SMS_R_System.AMTStatus is NULL).

Here’s a similar query that will pull data from the SCCM server itself:


SMS_R_System.ResourceId, SMS_R_System.ResourceType, SMS_R_System.Name, SMS_R_System.SMSUniqueIdentifier, SMS_R_System.ResourceDomainORWorkgroup, SMS_R_System.Client from  SMS_R_System where SMS_R_System.AMTStatus != "3" or SMS_R_System.AMTStatus is null

The logic in this query will identify vPro clients the SCCM server has discovered where the AMT provisioning status is not provisioned (where SMS_R_System.AMTStatus != "3") or is null (SMS_R_System.AMTStatus is null).