ConfigMgr: The case of the missing asset inventory data aka faulty Server Locator Point

I’ve bumped into an issue where asset inventory data was missing from managed devices. So, I’ve started troubleshooting by examining SCCM Client log files on affected devices. InventoryAgent.log file which records activities of the Hardware (and Software) Inventory Client Agent showed that inventory was running on a scheduled basis without any errors being logged, that the inventory report was created and sent to the Management Point.

Inventory: Collection Task completed in 6.657 seconds
Inventory: 19 Collection Task(s) failed.
Inventory: Temp report = D:\WINDOWS\system32\CCM\Inventory\Temp\c270ec00-8fce-40ce-823b-cd1af0f998ce.xml
Inventory: Starting reporting task.    
Reporting: 17 report entries created.
Inventory: Reporting Task completed in 0.235 seconds
Inventory: Successfully sent report. Destination:mp:MP_HinvEndpoint, ID: {5715713A-8EBD-4F52-A65F-9177CF67474F}, Timeout: 80640 minutes MsgMode: Signed, Not Encrypted
Inventory: Cycle completed in 16.484 seconds
Inventory: Action completed.

This led me to the conclusion that problem was not on the Client side. Next step was to check the server side…

Dataldr.log file on the server side records activities related to processing of sent MIF files and hardware inventory reports to the Site Server. There I’ve realized that there are no records of processing hardware inventory reports from affected clients. So, on one hand there are records on the Client side showing that HW inventory reports are generated and sent to the Management Point. On the other hand, there are no records of HW inventory reports reaching server. Data seems to be lost on the way between the Client and the Server. Let’s try to figure out what is the process in between.

The fact that affected devices were WORKGROUP devices was indication that there is something wrong in the process how workgroup devices locate the Management Point. Workgroup devices, as they are unable to query information that is published in the Active Directory, use Server Locator Points to locate the Management Points.

In order to understand the health state of the Server Locator Point, the following checks were performed initially:

  • Check if the SMS_SERVER_LOCATOR_POINT service is running as expected

  • Check the health status of the SMS_SERVER_LOCATOR_POINT component in the Configuration Manager Console under the Site Database à System Status à Site Status à Primary Site à Component Status.

 

Considering that both checks did not indicate that there were any problems with the SLP, I also wanted to take a look at the IIS log files to see if there are any entries showing HTTP requests reaching the SLP component.

I use SMS Trace utility to parse IIS log files. To narrow all entries to only the ones that I was interested in, I’ve used the following filter – show me all lines which contain “/sms_slp/slp.dll” substring. It shows HTTP requests against the Server Locator Point.

This is where I’ve realized that we are not dealing with the case of the SLP service failure (service not running). Instead, it was the case of the SLP service corruption (service runs, but doesn’t work as expected). Server responded with the 403 Forbidden HTTP status code to all Client requests against the Server Locator Point.

As a quick fix solution, I have removed and reinstalled the Server Locator Point. After successful reinstallation, SLP started to respond to Client requests, Clients were able to find the Management Point and the asset inventory information started to flow in.

For more information about valid SLP queries and responses, you may refer to an article on the TechNet blog: Questions about Service Locator Points (SLP’s)http://blogs.technet.com/b/mwiles/archive/2011/03/21/questions-about-service-locator-points-slp-s.aspx

ConfigMgr: The case of the missing asset inventory data aka faulty Server Locator Point

The limit of Software Inventory rules

On the Inventory Collection tab of the Software Inventory Client Agent Properties recently I have stumbled upon an issue where the New icon has been greyed out and disabled, not allowing me add any new rules defining the software inventory scope.

Image

After some googling around, this behaviour turned out to be documented and by design. In Configuration Manager 2007, there is a maximum limit of 64 rules. I am not sure if it is applicable to Configuration Manager 2012 as well, but it is worth to keep this limit in mind. Sometimes you learn things which are well documented the hard way.

For more information, refer to the Configuring Software Inventory Rules article on Microsoft Technet – http://technet.microsoft.com/en-us/library/cc181215.aspx

The limit of Software Inventory rules

Access is denied when using Configuration Manager Remote Control

When using Configuration Manager Remote Control to manage SCCM Clients, user is asked for credentials. After authenticating, Access Denied error is received even if user is member of Permitted Viewers list specified in the Remote Tools Client Agent properties.

After investigating this issue, it turned out that DCOM was not enabled on affected computers. In order to enable DCOM, use the following procedure on computers that are experiencing this problem:
1. Open Component Services mmc. Start ->Run -> dcomcnfg.
2. Expand Component Services -> Computers -> My Computer.
3. Right click on My Computer and select Properties. Go to the Default Properties tab. Make sure that “Enable Distributed COM on this computer” option is enabled. Set Default Authentication Level to Connect and Default Impersonation Level to Identify.

Access is denied when using Configuration Manager Remote Control

How to force hardware/software inventory on SCCM Client?

In order to force Hardware Inventory on SCCM Client, run the following VBScript:

hInventoryActionID = "{00000000-0000-0000-0000-000000000001}"
Set oLocator = CreateObject("WbemScripting.SWbemLocator")
Set oServices = oLocator.ConnectServer( , "root\ccm\invagt")
oServices.Delete "InventoryActionStatus.InventoryActionID=""" & hInventoryActionID & """"
wscript.sleep 3000
Set cpApplet = CreateObject("CPAPPLET.CPAppletMgr")
Set actions = cpApplet.GetClientActions
For Each action In actions
If Instr(action.Name,"Hardware Inventory") > 0 Then
action.PerformAction
End if
Next

For more information, refer to the following MSDN article: http://msdn.microsoft.com/en-us/library/cc144592.aspx

 

In order to force Software Inventory on SCCM Client, run the following VBScript:

sInventoryActionID = "{00000000-0000-0000-0000-000000000002}"
Set oLocator = CreateObject("WbemScripting.SWbemLocator")
Set oServices = oLocator.ConnectServer( , "root\ccm\invagt")
oServices.Delete "InventoryActionStatus.InventoryActionID=""" & sInventoryActionID & """"
wscript.sleep 3000
Set cpApplet = CreateObject("CPAPPLET.CPAppletMgr")
Set actions = cpApplet.GetClientActions
For Each action In actions
If Instr(action.Name,"Software Inventory") > 0 Then
action.PerformAction
End if
Next

For more information, refer to the following MSDN article: http://msdn.microsoft.com/en-us/library/cc145432.aspx

How to force hardware/software inventory on SCCM Client?

An error when performing Software Update Point synchronization

When performing Software Update Point synchronization on the child primary site, the following error was logged in the wsyncmgr.log file:

Sync failed: WSUS server not configured. Source: CWSyncMgr::DoSync

In my case, affected primary site was child-site of the central primary site which is configured to perform synchronization with the Microsoft Update.
First thing I have stumbled upon was the following TechNet article: Troubleshooting Software Updates Synchronization Failureshttp://technet.microsoft.com/en-us/library/bb735874.aspx which also contains possible solutions for the exact problem I was experiencing. However, none of the suggested solutions worked for me.

After spending some time troubleshooting, it turned out that there was a problem with the synchronization between the central (parent) and the affected primary (child) site. In order to fix the problem, I had to make sure that:
1. Standard Sender Address is configured appropriately on both sites and that
2. Public keys between the sites are manually exchanged (How to Manually Exchange Public Keys Between Siteshttp://technet.microsoft.com/en-us/library/bb693690.aspx)

Once synchronization between sites was successfully established, error in the wsyncmgr.log file was gone and Software Update Point synchronization works as expected.

An error when performing Software Update Point synchronization

Configuration Manager: empty Asset Intelligence Hardware Inventory views

Recently I’ve had an issue with Configuration Manager that information about the installed software applications on Configuration Manager Clients was missing from reports. After digging deeper, it turned out that data was missing because v_GS_INSTALLED_SOFTWARE view in the Configuration Manager database was empty. In order to resolve this issue, make sure that Asset Intelligence Reporting Class Settings are enabled appropriately.

To do that, open Configuration Manager Console and navigate to System Center Configuration Manager -> Site Database -> Computer Management -> Asset Intelligence. Right-click Asset Intelligence, and click Edit Asset Intelligence Reporting Class Settings. I’ve enabled options as shown on the following screenshot:

Edit Asset Intelligence Reporting Class Settings window
Edit Asset Intelligence Reporting Class Settings window

Keep in mind that enabling Asset Intelligence reporting classes will increase computer resource usage during Configuration Manager Client hardware inventory so therefore it is not recommended to enable all Asset Intelligence reporting classes. Changes in the GUI will be reflected in the SMS_DEF.MOF file.

After applying changes, Asset Intelligence reports that depend on the hardware inventory classes enabled using this procedure will not display data until clients have performed hardware inventory using the new hardware inventory reporting policy based on the contents of the updated SMS_def.mof hardware inventory file.

This has solved issue in my case, but it is still unclear to me how come that reporting classes became unchecked.

For more information, refer to the following articles:

Configuration Manager: empty Asset Intelligence Hardware Inventory views

HTTP 500 Internal Server Error when accessing SCCM Reports

If you are receiving HTTP 500 Internal Server Error when accessing SCCM Reports via web browser, check the following settings:

1. Make sure that you are not hitting the limit of maximum rows returned by a report query. By default, report viewer in SCCM 2007 is configured to limit the results returned by a report query to 10 000 rows.

To change the number of rows returned by a report query, create the Rowcount DWORD value under the HKEY_LOCAL_MACHINE\Software\Microsoft\SMS\Reporting registry key.

Set its value to the number of rows that you want returned in the report query. If you want to return all rows, set the value to 0xffffffff, which is the hexadecimal equivalent of –1.

For more information, refer to the following TechNet article: How to Configure the Maximum Rows Returned by a Report Query, available at the: http://technet.microsoft.com/en-us/library/bb680885.aspx

     

2. Increase the ASP response buffer limit size (aspbufferinglimit).

In IIS 6.0 change has been introduced which limits a default ASP response buffer to 4 MB. Increasing the buffer limit might help you in resolving this problem. To increase the buffer limit, follow these steps:

  • Click Start, click Run, type cmd, and then click OK.
  • Type the following command, and then press ENTER:

cd /d %systemdrive%\inetpub\adminscripts

  • Type the following command, and then press ENTER:

cscript.exe adsutil.vbs SET w3svc/aspbufferinglimit LimitSize

LimitSize represents the buffering limit size in bytes. For example, the number 67108864 sets the buffering limit size to 64 MB.

To confirm that the buffer limit is set correctly, follow these steps:

  •   Click Start, click Run, type cmd, and then click OK.
  • Type the following command, and then press ENTER:

cd /d %systemdrive%\inetpub\adminscripts

  • Type the following command, and then press ENTER:

cscript.exe adsutil.vbs GET w3svc/aspbufferinglimit

In my case, setting the limit to the value of 12582912 (12 MB) did the trick in the Configuration Manager environment of approximately 10 000 managed devices (SCCM Clients).

For more information about the ASP response buffer limit, refer to the following article: Error message when a Web browser sends a request for an active server page to a Web server that is running IIS 6.0: “Response buffer limit exceeded”, available at the: http://support.microsoft.com/kb/925764

HTTP 500 Internal Server Error when accessing SCCM Reports