Welcome to MSDN Blogs Sign in | Join | Help

Steve Rachui's Manageability blog - SMS/MOM

Support Escalation Engineer/Microsoft Customer Support Services

Syndication

News

This is provided "AS IS" with no warranties, and confers no rights. Use of included script samples are subject to the terms specified in the Terms of Use.
FQDN Task Sequence username limitation

A common step in imaging is to use the 'Apply Network Settings' task sequence item to configure joining a system to the domain.  As shown in the screenshot, configuring to join a domain requires the administrator to enter credentials to be used in the join process. 

 image

There are two options for supplying a username to use in the join - supply username in the Domain\User format or use a variable.  In this task sequence step, the Domain\User option expects a domain name that is 15 characters or less - anything more will result in an error exclamation marker.  Provided the total domain name is no more than 15 characters you can use either NetBios or FQDN names.  With FQDN names longer than 15 characters it is still possible to configure this task sequence step but you must use a variable as shown above.  When you choose to use a variable there must be a preceding step in the task sequence that sets the value of this variable.  The screenshot below shows the task sequence order and then step where we set the value of our variable, domacct

image

With these settings in place the task sequence should be ready to go and joining the domain will proceed without an issue.

Posted Saturday, July 19, 2008 11:13 PM by steverac | 1 Comments

ConfigMgr and OpsMgr Maintenance Mode

I've seen the question several times now about whether ConfigMgr supports setting OpsMgr agents into maintenance mode during software deployment.  The answer is mixed.  If we take a look at the MOM Maintenance Mode tab for a program we see the options available.

Notice that the text says that setting this option in ConfigMgr will result in any alerts being suppressed for the duration of the program.  When you set these options ConfigMgr WILL stop alert generation ON THE AGENT by simply pausing the health service.  However, there is nothing done to suppress the alerts that may be seen from the various other components that may be interacting with the agent, such as the health service watcher.  We are aware that there needs to be improvement in this area and are anticipating some changes in how this performs so that, when selected, all components will be placed in maintenance mode.

Posted Friday, July 18, 2008 6:45 PM by steverac | 2 Comments

Capturing logs during failed Task Sequence Execution

Every OSD administrator knows the feeling of configuring a complex (or even simple) OSD Deployment, testing and releasing - only to have the deployment fail.  At failure, OSD will begin a countdown to reboot and, on restart, the logs are often lost and we administrators are left wondering what went wrong.  To find out we have to start the deployment again and spend time waiting for the failure.  Wouldn't it be cool if we had a way to automate forcing OSD to collect logs when it fails before exiting?  Good news!  :)

I have spent some time recently working on just how to do that and we have two examples - both use the same approach but one is for generic task sequences (those sent through advertisements,etc) and the other is for OSD deployments.  Lets start with the generic one, explain the needed steps and the show how we incorporate that into OSD.

Take a look at a screenshot of the generic task sequence.  In this screenshot we see two groups - the Main TS Group that contains our TS steps and our Error Catching Group.  To make this work we need to ensure that the Main TS group is set to 'continue on error'' - you don't have to set the individual steps to continue on error - just the group.  From there we need to configur our Error catching group to activate in the event of a problem - note the use of the Task Sequence variable to detect whether an error condition has been flagged when we reach this group.

From here we have 4 steps that make up our error catching group, we will discuss each one followed by a series of screenshots showing how each is configured. 

Connect to folder to contain logs - this step uses the 'Connect to Network Folder' step which will connect to a precreated network share, assign a drive letter and provide credentials for the connect
Erase any pre-existing folder for machine - this step uses the 'Run Command Line' step which will attempt to remove any folders that remain from a previous execution of the error control steps
Create log folder for current machine - this step also uses the 'Run Command Line' step which will create a new folder with a name specific to the machine name running the task sequence.  Depending on where we see a failure, the machine name might be the assigned machine name or it may be a machine name like 'minint-<random string>.  This style of machine name is what you will see if the system failed while in the Windows PE phase of deployment.  For this and the previous step, not the use of the task sequence variable to capture the current machine name.
Copy logs to folder - This step will connect to the share defined above and copy any Task Sequence logs to the share.  Note the use of the task sequence variable to specify the last known logging directory from which to copy. 

 Screenshots showing how each step is configured

How about an OSD example?  The error trapping steps are exactly the same so I won't show that detail again - but the sequence is a bit more complex - take a look at the difference.  Note that the ENTIRE portion of the task sequence that does the work is nexted inside of the Error Catching - Top group.  The Error Catching - Top group is the only one here that requires 'continue on error to be set' - and then, in the event of an error, control is passed to the Error Catching group


The method I've demonstrated is just one way of doing this.  You can choose to use a script or batch file to handle these steps in one single TS step if you like.  The key, however, is that you do have to have a top group with 'continue on error' set and a final group that handles the error catching.

Posted Tuesday, July 15, 2008 10:14 PM by steverac | 2 Comments

Task Sequences and advertisements

Have been working a fair amount lately with task sequences.  Task sequences are traditionally thought of as a part of OSD - which is certainly true - but task sequences can also be deployed as advertisements - similar to standard software distribution.  There are tons of possibilities that open up when using task sequences through advertisements - too many to list here - a few of interest include

-Controlling specific order of software distribution
-Providing a mechanism to handle required reboots during distributions
-Developing diagnostic task sequences - to analyze/fix problems/collect logging info/respond to DCM 'out of compliance findings/etc.

 One particularly interesting option is the ability to reboot a system from the running OS into windows PE - a process that is done all the time for OSD deployments but hasn't been used much for non-OSD purposes.  All sorts of possibilities for diagnostic/maintenance task sequences are available if we reboot to PE.  It would be possible to build task sequences to run scandisk and fix errors, change or update system files (would need to be very careful), etc. 

If you haven't taken a look at the power of task sequences outside of OSD, it definately is worth a few minutes to consider the possibilities!

Posted Tuesday, July 15, 2008 3:49 PM by steverac | 1 Comments

Testing Network Speed - Multiple Applications

A question came up recently about how to determine network speed.  In the specific environment small locations existed with just a handful of ConfigMgr clients at each.  Each location had anywhere from a very slow network link (256 MB or less) to something a bit more beefy (T1 or better)  There was no concrete knowledge of which office had which kind of connection and, for the project under consideration, having that knowledge was beneficial.

 In SMS 2.0 days - and still with SMS 2003 - there was a utility called slownet2.exe (in smsset\bin\i386 folder on SMS 2003 install media) that was used specifically for testing network speed before running a package.  This is a standalone tool and perfect for use in determine network speeds for the current project.  The use of this utility may have multiple applications beyond just ConfigMgr and OpsMgr so, since the question came up, wanted to brush the dust off of the tool and remind that it is still available if needed.

Posted Wednesday, July 02, 2008 7:49 PM by steverac | 1 Comments

The Authoring Console or the Operations Console?

Which tool is best to use for authoring?  The answer 'it depends' is very applicable here.  One key difference that might help you decide - when authoring is done in the Operations Console all changes that are made get applied as they are made - which can cause the RMS to be extremely busy.  If you are only making a couple of changes, no big deal. If you are making bulk changes - this quickly becomes a big deal and can impact performance while the RMS keeps up with the authoring work being done.

For bulk rule creation there are a couple of options to avoid the performance hit on the RMS

-Author all rules from a console in a development environment.  When done, export the modified management pack and import into production.
-Use the authoring console.  One key advantage to this - when management pack objects (MPOs) -rules/monitors/etc - are created in the Operations Console the name of the MPOs as saved in the management pack do not have a user friendly name - they all start with UI Generated.....  If the management pack is opened with the authoring console it will be difficult to know which MPOs you are looking at.  This won't be the case when authoring MPOs directly in the authoring console.

 My preference - use the authoring console for all MPO authoring - this is what it was designed for and if you are planning to do any somewhat serious management pack work it is a crucial tool to learn.  The operations console is fine for overrides and such but is not ideal for authoring.

Posted Sunday, June 29, 2008 5:45 AM by steverac | 2 Comments

Relationships and Grouping

In a recent blog post (http://blogs.technet.com/kevinholman/archive/2008/02/01/configuring-notifications-to-include-specific-alerts-from-specific-groups-and-classes.aspx) Kevin Holman discusses how to configure notification subscriptions to hone in on just the alerts of interest.  He references the idea of using the 'windows computer' class when building a group as a way to subscribe to all alerts that may be generated by the 'windows computer' class itself or any child objects.  This works without doubt - many of us have used it routinely.  While I know it works, the fact it does went against the grain of my understanding of inheritance elsewhere - such as AD.

 In AD we start with a top level OU - the domain OU.  From there we create child OU's and the various policies defined on each flow down to child objects.  The parent OU really doesn't know anything about the child OU but the child OU knows about the parent.  Trying to force this thinking on OpsMgr it didn't make sense to me that the 'windows computer' parent object would know anything about the child objects...so, how does it work that we choose the 'windows computer' object in a group and, as part of that selection, get all of the related objects as well?  I posed this question to the product group to clear up my understanding - the reply was a good one and is included below.....

Containment relationships in our system are significant in that they create a path that state traverses, in one direction. When you group something, really what is happening is a containment relationship (that is, a relationship class which has System.Contaiment as its base) is created between the group container and the contained member. Hosting is also significant here, as it also derives from containment.

 

So think of everything as a container as long it has a compatible containment relationship class, including hosting relationship classes. Groups are containers, and hosts (e.g. computers) are containers.

 

Look at that Exchange group as the top node of a graph, with edges as containment relationships. Every container is a node. It is directed, and for state, it points from hosted to host, and from group member to group. So state traverses up this graph, from hosted nodes, through the host computer node, to the top level group.

 

If you just group the hosted Exchange instances, the computer node is excluded, hence state cannot traverse a path that includes the computer.

 

Posted Sunday, June 22, 2008 5:44 PM by steverac | 1 Comments

Understanding relationships in OpsMgr 2007

Ever wonder how objects are related to each other in OpsMgr?  Certainly would be helpful when targeting to understand which objects relate to Windows Computer, which objects relate to the Computer Role object, etc.  Much of the time it's intuitive how items relate but sometimes it isn't.  Using the Distributed Application Designer you can see a mapping of how objects relate to each other.  From the authoring node right click on Distributed Application Designer, select 'Create a new distributed application'.  In the Template box select 'Blank (advanced) and then give the template a name and destination management pack and click OK.  From there the designer window will populate - simply click 'Add Component' and a window similar to the following will be displayed. Note that the list of objects in your window will differ as different management pack objects are imported.

Posted Monday, June 09, 2008 6:21 PM by steverac | 1 Comments

Heartbeat detection in OpsMgr 2007

A questionc came up today regarding heartbeating in OpsMgr 2007 - specifically, whether we can easily group systems and deliver missing heartbeat notifications based on specific computers and teams that manage those computers.  The answer is yes - but the process of heartbeating and setting this up is different in OpsMgr 2007.

Watcher node - In OpsMgr you have the agent node and the watcher node.  The agent node is the system with the installed OpsMgr agent that performs data collection, evaluation, etc. The watcher node is a designated system external to the agent that can perform monitoring to ensure the actual agent of interest is healthy.  A good example would be an IIS server.  An agent running on the IIS server is fully able to monitor providing the IIS server is running.  If the IIS server goes down there would be no way to continue monitoring web page availability, etc.  Enter the watcher node.  A system can be designated to 'watch' the IIS server to ensure it is up and running.  The same can apply in other examples too - such as the Health Service (the agent). 

 

Heartbeat monitoring is handled by the Health Service watcher node (RMS/Management servers).  The watcher nodes expect heartbeats from agents - if they don't get one appropriate rules will fire to indicate the problem.  This works perfectly because, like in MOM 2005, heartbeat issues must be detected at the management server level.

 

Splitting out systems so that notifications can be sent based on computer group membership is also fairly straight forward - just create a new computer group whose target is 'Health Service watcher'.  The further criteria for the group can be whatever expression you need to uniquely identify your systems – simple pattern matching/wildcarding or full regular expressions.  From there, you create subscripts for alerts generated by systems in these computer groups and the problem is solved!  More detail is available in the PSS teams blog at http://blogs.technet.com/smsandmom/archive/2008/03/25/opsmgr-2007-monitoring-health-service-availability.aspx

 

Posted Thursday, May 15, 2008 11:31 PM by steverac | 0 Comments

To obsolete or not to obsolete

I wrote a blog post a while back detailing heartbeat discovery in SMS 2003....

http://blogs.msdn.com/steverac/archive/2006/08/03/687874.aspx 

The information in that blog post equally applies to ConfigMgr.  Heartbeat discovery is critical for SMS and ConfigMgr clients as it is the only user accessible discovery method that reports a client GUID - because a client actually has to be installed in order to generate a GUID (registration discovery records also show the GUID but, like the heartbeat record, they come from the client and are basically the first 'heartbeat' like record a ConfigMgr client sends at install.  Registration discovery is not configurable b the user).  In SMS 2003, the client GUID was THE key attribute that flags a system as being unique - no other attribute mattered as much as the client GUID.  In ConfigMgr the client GUID is still important but the ConfigMgr client HARDWARE ID has now become the focus for determining whether a client is unique.  From time to time, the ConfigMgr or SMS client will need to be removed and reinstalled - or a system reimaged.  The resulting system will have the same attributes as before - NetBIOS name, MAC address AND hardware ID but, because of the fresh client install - the GUID will be changed.  When the GUID changes but the hardware ID stays the same, ConfigMgr has to be able to figure out whether the system really is a new computer or if one of the scenarios just mentioned might have occurred and the computer actually is one that was pre-existing in the database and we need to make some adjustments.  In SMS 2003, the process happened automatically - mostly without issue.  In ConfigMgr we have added the ability to manually determine what will happen in these situations through 'conflicting records' management.

Lets take a look at a couple of scenarios to understand how heartbeat discovery processing is handled behind the scenes.  For the following examples, we will use ConfigMgr - the items discussed here generally apply to SMS 2003 as well - just understand, SMS 2003 handles this all automatically (which is an option in the UI for ConfigMgr as you will see shortly).  Before we get started - what exactly does a heartbeat discovery record look line.  Below is an example of one that I captured from my lab - all discovery records appear similar but have different attributes available/reported.  Remember, the heartbeat DDR is THE key discovery record and MUST be enabled for ConfigMgr to function properly....

    FV      <System>
BEGIN_PROPERTY
<8><SMS Unique Identifier><11><64><GUID:457A82D2-164B-4563-A083-BA1C5E8BE8FB>
END_PROPERTY
BEGIN_PROPERTY
<0><Client Version><11><32><4.00.5931.0001>
END_PROPERTY
BEGIN_PROPERTY
<0><Client Type><8><8><1>
END_PROPERTY
BEGIN_PROPERTY
<0><Client><8><8><1>
END_PROPERTY
BEGIN_PROPERTY
<8><NetBIOS Name><11><64><STEVERACDC3>
END_PROPERTY
BEGIN_PROPERTY
<0><Resource Domain OR Workgroup><11><255><STARTREKE>
END_PROPERTY
BEGIN_PROPERTY
<0><AD Site Name><11><128><Default-First-Site-Name>
END_PROPERTY
BEGIN_PROPERTY
<17><IP Addresses><11><64>
BEGIN_ARRAY_VALUES
<65.53.93.1>
END_ARRAY_VALUES
END_PROPERTY
BEGIN_PROPERTY
<25><MAC Addresses><11><18>
BEGIN_ARRAY_VALUES
<00:B0:D0:C4:B0:8A>
END_ARRAY_VALUES
END_PROPERTY
BEGIN_PROPERTY
<17><IP Subnets><11><64>
BEGIN_ARRAY_VALUES
<65.53.92.0>
END_ARRAY_VALUES
END_PROPERTY
BEGIN_PROPERTY
<25><Resource Names><11><256>
BEGIN_ARRAY_VALUES
<steveracdc3.startreke.com>
END_ARRAY_VALUES
END_PROPERTY
BEGIN_PROPERTY
<17><SMS Assigned Sites><11><128>
BEGIN_ARRAY_VALUES
<CEN>
END_ARRAY_VALUES
END_PROPERTY
BEGIN_PROPERTY
<0><Operating System Name and Version><11><128><Microsoft Windows NT Advanced Server 5.2>
END_PROPERTY
BEGIN_PROPERTY
<0><Previous SMS UUID><11><64><GUID:9EDC312A-62D1-42F1-85B5-4BAE2B2EEF98>
END_PROPERTY
BEGIN_PROPERTY
<0><SMS UUID Change Date><12><19><05/25/2008 08:09:49>
END_PROPERTY
BEGIN_PROPERTY
<0><Hardware ID><11><64><2:696CE24FCE01B66DC350470BC4FAEB3F96BC9B65>
END_PROPERTY
BEGIN_PROPERTY
<0><SMBIOS GUID><11><38><4C4C4544-B45A-3710-8030-CAC04F473031>
END_PROPERTY
BEGIN_PROPERTY
<17><SMS Installed Sites><11><128>
BEGIN_ARRAY_VALUES
<CEN>
END_ARRAY_VALUES
END_PROPERTY
AGENTINFO<Heartbeat Discovery><CEN><05/25/2008 14:15:35>
FEOF
  FV  FVðÞ  Õ    ) ” GUID:457A82D2-164B-4563-A083-BA1C5E8BE8FB   $  RSA1     a1¿–mF2NñêÍ%`гï?
å®û‘4†  UŒ0FË€W Û@nH}z™äJu”ã³ä%¥1{«PÞñH´³ïHû+mŠå•´´*³“ß,X´1Erس-µ¨¤³„4C+`(^s[®¯–¿™”ß–±ÀöIõ   FV

In ConfigMgr, the first decision you have to make is whether you want the system to handle conflicting records for you, on the fly, like was done in SMS 2003 - or if you want to have direct control of the decision making.  This option is configured in the UI as shown

What happens when automatic processing is enabled?  To describe, let's take a couple of scenarios.  Before we start the scenarios it's worth noting that the content of the log files as shown in the examples below is not this way by default.  To get this level of detail you have to enable DDM verbose logging and you also have to enable SQL tracing   After making the registry edits below, restart the SMS_Executive service.
     DDM Verbose logging - HKLM/Software/Microsoft/Components/SMS_Discovery_Data_Manager/Verbose
     logging = 1
     SQL Tracing - HKLM/Software/Microsoft/Tracing/SQLEnabled=1

Scenario 1
Computer A has been installed at some point previously - as a part of normal processing, Computer A submits a heartbeat discovery record.  That discovery record contains a client GUID and hardware ID that matches a record previously written to the ConfigMgr database and, since we have a match, the existing record is simply updated.  Here is a recording of that transation in the DDM.LOG.  A few key lines are highlighted in BOLD with comments.

Processing file N17SPZ3L.DDR
SQL>>>select d1.DiscArchKey,d1.DiscArchName,d1.BaseTableName,d1.Flags,d2.PropertyName,d2.ColumnName,d2.ValueType,d2.MaxWidth,d2.Flags,d2.ArrayTableName FROM DiscoveryArchitectures AS d1 LEFT JOIN  DiscPropertyDefs AS d2 ON d1.DiscArchKey = d2.DiscArchKey where d1.DiscArchName = 'System'  order by d1.DiscArchKey
SQL>>>>> Done. 
SQL>>>select MachineID from MachineIdGroupXRef where GUID = 'GUID:29D11342-0534-43C7-A7A5-C1AEC17F8192' and ArchitectureKey = 5
     We have the GUID reported in the hearbeat DDR - we are querying the database to see if
     we have any existing record containing that GUID.  Note here that it is not shown whether
     we find a match or we don't - but you see in the next line that we are processing System
     6 - this means that we found an existing system and are simply proceeding to update it. 
     The value of 6 comes from the ITEMKEY of that system in the System_DISC table of
     the database - more about tables in a bit. 
SQL>>>>> Done.
Processing <System> #6...
    We have found an existing system so now we need to go about scanning related tables
    for this system and determining whether we need to add/change any of the existing detail
    of the system as compared to the new values we see in the currently processing heartbeat
    record.

SQL>>>>>select convert(varchar(255),IP_Addresses0) from System_IP_Address_ARR where ItemKey = 6 
SQL>>>>> Done. 
SQL>>>select convert(varchar(255),IP_Subnets0) from System_IP_Subnets_ARR where ItemKey = 6
SQL>>>>> Done.
SQL>>>select convert(varchar(255),IPv6_Addresses0) from System_IPv6_Addre_ARR where ItemKey = 6
SQL>>>>> Done. 
SQL>>>select convert(varchar(255),IPv6_Prefixes0) from System_IPv6_Prefi_ARR where ItemKey = 6
SQL>>>>> Done. 
SQL>>>select convert(varchar(255),IPX_Addresses0) from System_IPX_Addres_ARR where ItemKey = 6
SQL>>>>> Done.
SQL>>>select convert(varchar(255),MAC_Addresses0) from System_MAC_Addres_ARR where ItemKey = 6
SQL>>>>> Done. 
SQL>>>select convert(varchar(255),Resource_Names0) from System_Resource_N_ARR where ItemKey = 6
SQL>>>>> Done. 
SQL>>>select convert(varchar(255),SMS_Assigned_Sites0) from System_SMS_Assign_ARR where ItemKey = 6
SQL>>>>> Done. 
SQL>>>select convert(varchar(255),SMS_Installed_Sites0) from System_SMS_Instal_ARR where ItemKey = 6
SQL>>>>> Done. 
SQL>>>select convert(varchar(255),System_Container_Name0) from System_System_Container_Name_A where ItemKey = 6
SQL>>>>> Done. 
SQL>>>select convert(varchar(255),System_Group_Name0) from System_System_Group_Name_ARR where ItemKey = 6
SQL>>>>> Done. 
SQL>>>select convert(varchar(255),System_OU_Name0) from System_System_OU_Name_ARR where ItemKey = 6
SQL>>>>> Done. 
SQL>>>select convert(varchar(255),System_Roles0) from System_System_Rol_ARR where ItemKey = 6
SQL>>>>> Done. 
SQL>>>select convert(varchar(255),Active0),convert(varchar(255),AD_Domain_Name0),convert(varchar(255),AD_Site_Name0),convert(varchar(255),AlwaysInternet0),convert(varchar(255),Client0),convert(varchar(255),Client_Type0),convert(varchar(255),Client_Version0),convert(varchar(255),CPUType0),convert(char(10),Creation_Date0,101) +' '+ convert(char(8),Creation_Date0,8),convert(varchar(255),Decommissioned0),convert(varchar(255),Hardware_ID0),convert(varchar(255),InternetEnabled0),convert(varchar(255),User_Domain0),convert(varchar(255),User_Name0),convert(varchar(255),Name0),convert(varchar(255),Netbios_Name0),convert(varchar(255),Obsolete0),convert(varchar(255),Operating_System_Name_and0),convert(varchar(255),Previous_SMS_UUID0),convert(varchar(255),Resource_Domain_OR_Workgr0),convert(varchar(255),SMBIOS_GUID0),convert(varchar(255),SMS_Unique_Identifier0),convert(char(10),SMS_UUID_Change_Date0,101) +' '+ convert(char(8),SMS_UUID_Change_Date0,8),convert(varchar(255),Community_Name0) from System_DISC where ItemKey = 6
SQL>>>>> Done.
SQL>>>select AgentID,AgentTime,AgentSite from DiscItemAgents where ItemKey = 6 and DiscArchKey = 5 
SQL>>>>> Done. 
SQL>>>set quoted_identifier off;set ansi_warnings off;set ansi_padding off;set ansi_nulls off;set concat_null_yields_null off;set arithabort on;set numeric_roundabort off;set DATEFORMAT mdy; 
SQL>>>>> Done. 
SQL>>>exec sp_GetPublicKeyForSMSID "GUID:29D11342-0534-43C7-A7A5-C1AEC17F8192"
SQL>>>>> Done. 
     Note that all you see in the block above - from where we detected we were updating an
     existing system and now - is a series of select statements.  This means that none of the
     data items actually changed since the previous row was inserted.  If there had been changes
     you would also see SQL statements to update the changed values.  We see this fact is true
     by the highlighted section two lines below - no values have changed.

==>Name = <STEVERACDC3> 
Info: The DDR contains 26 properties, but none has new values 
     We are almost done - now we have to update or add the record to a related table -
     DiscItemAgents which is beyond the scope of this discussion.  Suffice it to say that
     there are multiple discovery methods that could potentially discover a system.  Each
     discovery method is referred to as a discovery agent - the DiscItemAgents table keeps
     track of all discovery agents in operation and the last time the particular discovery
     agent discovered a particular item (in this case, system).  The agent info field of the
     discovery record directly relates to the DiscItemAgents table.

insert agent information: DiscItemAgents : execute sql IF EXISTS (select ItemKey from DiscItemAgents where ItemKey = 6 and DiscArchKey = 5 and AgentID = 9 and AgentSite = 'CEN') update DiscItemAgents set AgentTime = '05/25/2008 02:33:00'  where ItemKey = 6 and DiscArchKey = 5 and AgentID = 9 and AgentSite = 'CEN'~ ELSE insert into DiscItemAgents (AgentTime, ItemKey, DiscArchKey, AgentID, AgentSite) values ('05/25/2008 02:33:00', 6, 5, 9, 'CEN')
SQL>>>IF EXISTS (select ItemKey from DiscItemAgents where ItemKey = 6 and DiscArchKey = 5 and AgentID = 9 and AgentSite = 'CEN') update DiscItemAgents set AgentTime = '05/25/2008 02:33:00'  where ItemKey = 6 and DiscArchKey = 5 and AgentID = 9 and AgentSite = 'CEN'~ ELSE insert into DiscItemAgents (AgentTime, ItemKey, DiscArchKey, AgentID, AgentSite) values ('05/25/2008 02:33:00', 6, 5, 9, 'CEN') 
SQL>>>>> Done. 
Database operations finished. 
CDiscoverDataManager::FilterDDR - Will not create CCR.  The Remote Client is already installed on this resource. 
CDiscoverDataManager::ProcessDDRs_PS - finished processing file C:\Program Files\Microsoft Configuration Manager\inboxes\auth\ddm.box\N17SPZ3L.DDR.

OK, now that we've seen what it looks like when we simply process a DDR for an existing system with no changes - lets see what happens when the GUID DOES change but the hardware ID remains the same

Scenario 2 - For this scenario we have the same Computer A that has been installed and reported a heartbeat DDR previously.  In this case, however, Computer A has been reimaged by the helpdesk with the same version of the OS, etc.  Nothing has changed except the client now has a new GUID because it has a new client installed. So, how does ConfigMgr handle processing this DDR?  I show you below - but please note that I'm only showing you the specific portions of the DDM.log that are key to handling our record conflict.  There is also now a portion of the log that records changes with client registration.  Client registration is a new process in ConfigMgr and is used to ensure systems in the ConfigMgr database are valid (and approved) systems.  Further discussion of client registration is beyond the scope of our purpose here...

 Processing file G9M8S2YG.RDR 
     We are processing an RDR - this is a registration discovery record and will be submitted whenever
     the client GUID changes - either a new GUID or when the client is instructed to change GUID as can
     be the case using the TRANGUID utility from the resource kit (SMS 2003 TRANGUID still works with
     ConfigMgr).  This 'registration' process must be completed before further information from the client is
     allowed into the database.

ApprovalMethod = 1 
SQL>>>exec spUpdateClientRegistration "CEN", "GUID:9EDC312A-62D1-42F1-85B5-4BAE2B2EEF98", NULL, NULL, NULL, 0x308201DE3082014BA003020102021011B839AE2D015EBF457B1F507C90E464300906052B0E03021D05003024311430120603550403130B5354455645524143444333310C300A06035504031303534D533020170D3038303532353037333733345A180F32313038303530313037333733345A3024311430120603550403130B5354455645524143444333310C300A06035504031303534D5330819F300D06092A864886F70D010101050003818D0030818902818100D10F8958A46E4A8DE9DA035CB0AD1FEF8940E4494BD7FF73B0BC398CDB676CF9F196C6AF3BFE8145EB2099A1E85ADB977779978A17A74A1B29E8EECE84EC9B728717CB00AD26D7593B0C032080AEBE9AF7486E7EE5573FAF725B1577A57329738C79FFAC11EEE44680565F852EC90B55BC656BA9BA9A67AB64F8D47DE9F4961D0203010001A317301530130603551D25040C300A06082B06010401823765300906052B0E03021D0500038181001BA7D4F85F4F998FF4C317807EB5F186141297F63D685F2A5F1FD527D60DBC19269EDBD8ED58030FA5DE52A0201474AA9CD92BA8F1F1A1C906E98506BCAAF89D63BABE256848D8F7152CFA5FAE0A7C36D3BE341134DEDE525F02EB4B4B286C90F8C73BC494574C30AD53EF409AFA4F88959E13E69D0D184337D90CB11CC396C5, 0x11CA61CC5F39A12B5E998494C82511C77E7429C6, 0x308201DF3082014CA003020102021003808D6BDD102BA3480FCDC554F2C99D300906052B0E03021D05003024311430120603550403130B5354455645524143444333310C300A06035504031303534D533020170D3038303532353037333733345A180F32313038303530313037333733345A3024311430120603550403130B5354455645524143444333310C300A06035504031303534D5330819F300D06092A864886F70D010101050003818D0030818902818100B54E77AA1A4C909FA022DE0A76C14FB2459644874E5D8547A0157E12BF90893E23082437DABC28A8D01485EE6867BF73CF260D2E7A7CDF79F678A6DA143CEE64F411B62B154286C3864D998EB023E15AAF91EB528BD34A557D6C2AAA071F9BA85B2F39AACAF0AE983A43C8FBC5BAD01A3E8FBECB3EEE089B5C3FD30B36629E2F0203010001A318301630140603551D25040D300B06092B0601040182376502300906052B0E03021D050003818100A1FECE4BED86EA848E84E9ACA4ACDCA93C1CBA98F0A582583755022619D31A3EAC900969E2623A3674BE509BA9EE0E358A68C753BE2A7E743FE73976C62DC7EF1FA222B547A1DAA8E7BE4C6EDA86BA4F8B78000BFED61C58E9E2A45442B7CB61236EFF763DDC8D21F52A621D9B321A8E1AB7151B3B677FED4F1B5395FF205F32,0xAA10604544FB7A32B7A419E416953A16C3776DFB,1, 0x06020000002400005253413100040000010001001D96F4E97DD4F864AB679ABAA96B65BC550BC92E855F568046E4EE11ACFF798C732973A577155B72AF3F57E57E6E48F79ABEAE8020030C3B59D726AD00CB1787729BEC84CEEEE8291B4AA7178A97797797DB5AE8A19920EB4581FE3BAFC696F1F96C67DB8C39BCB073FFD74B49E44089EF1FADB05C03DAE98D4A6EA458890FD1, "2008-05-25 07:37:34.000", "2108-05-01 07:37:34.000", 0,NULL ,NULL ,"2:696CE24FCE01B66DC350470BC4FAEB3F96BC9B65",NULL ,0,0,0,1,0, 1, "4.00.5931.0001","STEVERACDC3","steveracdc3.startreke.com", 0
     Note that the first bolded entry above is the new GUID of the system being registered.  The
     second bolded entry is the hardware ID for the system.  The hardware ID should be the same
     as it was before - we just have a new GUID.  This will come into play shortly.

exec spUpdateClientRegistration "CEN", "GUID:9EDC312A-62D1-42F1-85B5-4BAE2B2EEF98", NULL, NULL, NULL, 0x308201DE3082014BA003020102021011B839AE2D015EBF457B1F507C90E464300906052B0E03021D05003024311430120603550403130B5354455645524143444333310C300A06035504031303534D533020170D3038303532353037333733345A180F32313038303530313037333733345A3024311430120603550403130B5354455645524143444333310C300A06035504031303534D5330819F300D06092A864886F70D010101050003818D0030818902818100D10F8958A46E4A8DE9DA035CB0AD1FEF8940E4494BD7FF73B0BC398CDB676CF9F196C6AF3BFE8145EB2099A1E85ADB977779978A17A74A1B29E8EECE84EC9B728717CB00AD26D7593B0C032080AEBE9AF7486E7EE5573FAF725B1577A57329738C79FFAC11EEE44680565F852EC90B55BC656BA9BA9A67AB64F8D47DE9F4961D0203010001A317301530130603551D25040C300A06082B06010401823765300906052B0E03021D0500038181001BA7D4F85F4F998FF4C317807EB5F186141297F63D685F2A5F1FD527D60DBC19269EDBD8ED58030FA5DE52A0201474AA9CD92BA8F1F1A1C906E98506BCAAF89D63BABE256848D8F7152CFA5FAE0A7C36D3BE341134DEDE525F02EB4B4B286C90F8C73BC494574C30AD53EF409AFA4F88959E13E69D0D184337D90CB11CC396C5, 0x11CA61CC5F39A12B5E998494C82511C77E7429C6, 0x308201DF3082014CA003020102021003808D6BDD102BA3480FCDC554F2C99D300906052B0E03021D05003024311430120603550403130B5354455645524143444333310C300A06035504031303534D533020170D3038303532353037333733345A180F32313038303530313037333733345A3024311430120603550403130B5354455645524143444333310C300A06035504031303534D5330819F300D06092A864886F70D010101050003818D0030818902818100B54E77AA1A4C909FA022DE0A76C14FB2459644874E5D8547A0157E12BF90893E23082437DABC28A8D01485EE6867BF73CF260D2E7A7CDF79F678A6DA143CEE64F411B62B154286C3864D998EB023E15AAF91EB528BD34A557D6C2AAA071F9BA85B2F39AACAF0AE983A43C8FBC5BAD01A3E8FBECB3EEE089B5C3FD30B36629E2F0203010001A318301630140603551D25040D300B06092B0601040182376502300906052B0E03021D050003818100A1FECE4BED86EA848E84E9ACA4ACDCA93C1CBA98F0A582583755022619D31A3EAC900969E2623A3674BE509BA9EE0E358A68C753BE2A7E743FE73976C62DC7EF1FA222B547A1DAA8E7BE4C6EDA86BA4F8B78000BFED61C58E9E2A45442B7CB61236EFF763DDC8D21F52A621D9B321A8E1AB7151B3B677FED4F1B5395FF205F32,0xAA10604544FB7A32B7A419E416953A16C3776DFB,1, 0x06020000002400005253413100040000010001001D96F4E97DD4F864AB679ABAA96B65BC550BC92E855F568046E4EE11ACFF798C732973A577155B72AF3F57E57E6E48F79ABEAE8020030C3B59D726AD00CB1787729BEC84CEEEE8291B4AA7178A97797797DB5AE8A19920EB4581FE3BAFC696F1F96C67DB8C39BCB073FFD74B49E44089EF1FADB05C03DAE98D4A6EA458890FD1, "2008-05-25 07:37:34.000", "2108-05-01 07:37:34.000", 0,NULL ,NULL ,"2:696CE24FCE01B66DC350470BC4FAEB3F96BC9B65",NULL ,0,0,0,1,0, 1, "4.00.5931.0001","STEVERACDC3","steveracdc3.startreke.com", 0
SQL>>>>> Done. 
SQL>>>select d1.DiscArchKey,d1.DiscArchName,d1.BaseTableName,d1.Flags,d2.PropertyName,d2.ColumnName,d2.ValueType,d2.MaxWidth,d2.Flags,d2.ArrayTableName FROM DiscoveryArchitectures AS d1 LEFT JOIN  DiscPropertyDefs AS d2 ON d1.DiscArchKey = d2.DiscArchKey where d1.DiscArchName = 'System'  order by d1.DiscArchKey
SQL>>>>> Done. 
SQL>>>select MachineID from MachineIdGroupXRef where GUID = 'GUID:9EDC312A-62D1-42F1-85B5-4BAE2B2EEF98' and ArchitectureKey = 5
     You will recall this SQL statement.  In the previous log snip we executed this statement and then
     proceeded with our updates - because we had found an existing record with the GUID in the
     database.  In this case, the GUID has changed and we will have no existing entry - so see what
     statement is executed next....

SQL>>>>> Done. 
SQL>>>select  top 1 t1.ItemKey, convert(varchar(255),t1.Netbios_Name0), convert(varchar(255),tbla.Resource_Names0)~ from System_DISC t1~ join DiscItemAgents dia on t1.ItemKey=dia.ItemKey ~ left join System_Resource_N_ARR tbla on t1.ItemKey=tbla.ItemKey ~ where t1.SMS_Unique_Identifier0 is NULL~ and (~t1.Netbios_Name0="STEVERACDC3"~ and (tbla.Resource_Names0 in ("steveracdc3.startreke.com") or tbla.Resource_Names0 is NULL)~~) group by t1.ItemKey, convert(varchar(255),t1.Netbios_Name0), convert(varchar(255),tbla.Resource_Names0), t1.Obsolete0~ order by t1.Obsolete0 asc, MAX(dia.AgentTime) desc
     In short, we are trying to decide whether we are dealing with a completely NEW system or
     just a changed system.  When we don't match the GUID we may still match enough of the other
     attributes to be flagged as the same system as one currently in the database.  If the later is true,
     we simply introduce changes to the database to accomodate and make adjustment.

SQL>>>>> Done. 
Processing NEW <System>... 
     So, we flag this as a NEW system - but don't interpret this as the total decision yet.
==>Name = <STEVERACDC3> 
SQL>>>set quoted_identifier off;set ansi_warnings off;set ansi_padding off;set ansi_nulls off;set concat_null_yields_null off;set arithabort on;set numeric_roundabort off;set DATEFORMAT mdy; 
SQL>>>>> Done. 
SQL>>> exec sp_SMSGetNextID 'NextMachineID',1 
SQL>>>>> Done. 
SQL>>>set quoted_identifier off;set ansi_warnings off;set ansi_padding off;set ansi_nulls off;set concat_null_yields_null off;set arithabort on;set numeric_roundabort off;set DATEFORMAT mdy; 
SQL>>>>> Done. 
SQL>>>declare @nObs int~select @nObs=count(*) from System_DISC where Hardware_ID0="2:696CE24FCE01B66DC350470BC4FAEB3F96BC9B65" and Obsolete0=0~if (@nObs=1)~begin~ update System_DISC set Obsolete0=1, Active0=0 where Hardware_ID0="2:696CE24FCE01B66DC350470BC4FAEB3F96BC9B65" and Obsolete0=0~ select @@ROWCOUNT~end~else~ select 0 
     Aha - so here is the key area where we see that we actually did detect an existing system and
     are starting the process of making database adjustments to accomodate.  Essentially, we are
     taking the previous system - that had the same hardware ID - and marking it as obsolete - and
     creating a new record that will become the active record for the machine.  Obsolete records
     will still show in the collection but will be marked as obsolete - no software distributions will be
     sent to any machine that is marked obsolete.

SQL>>>>> Done. 
1 records with Hardware ID 2:696CE24FCE01B66DC350470BC4FAEB3F96BC9B65 were obsoleted by STEVERACDC3. 
     And here we see the result of our obsolete processing and send a status message indicating
     what was done

STATMSG: ID=2639 SEV=I LEV=M SOURCE="SMS Server" COMP="SMS_DISCOVERY_DATA_MANAGER" SYS=STEVERACCEN SITE=CEN PID=3148 TID=2708 GMTDATE=Sun May 25 07:38:08.914 2008 ISTR0="STEVERACDC3" ISTR1="2:696CE24FCE01B66DC350470BC4FAEB3F96BC9B65" ISTR2="GUID:9EDC312A-62D1-42F1-85B5-4BAE2B2EEF98" ISTR3="1" ISTR4="" ISTR5="" ISTR6="" ISTR7="" ISTR8="" ISTR9="" NUMATTRS=0 
     So, now that we have obsoleted the old record we have to fill out the new record with the same
      information we had for the old.  That takes place in the next few lines.
SQL>>>insert into MachineIdGroupXRef (MachineID, ArchitectureKey, GroupKey, GUID) values (7, 5, 1, 'GUID:9EDC312A-62D1-42F1-85B5-4BAE2B2EEF98')
SQL>>>>> Done. 
SQL>>>insert into System_Resource_N_ARR (ItemKey, Resource_Names0) values (7, 'steveracdc3.startreke.com') 
SQL>>>>> Done. 
insert base table: System_DISC : execute sql insert into System_DISC (ItemKey, DiscArchKey, SMS_Unique_Identifier0, Client_Version0, Client0, Netbios_Name0, Hardware_ID0, Client_Type0, InternetEnabled0, AlwaysInternet0, Name0, Creation_Date0, Active0, Obsolete0, Decommissioned0) values (7, 5, 'GUID:9EDC312A-62D1-42F1-85B5-4BAE2B2EEF98', '4.00.5931.0001', 1, 'STEVERACDC3', '2:696CE24FCE01B66DC350470BC4FAEB3F96BC9B65', 1, 0, 0, 'STEVERACDC3', '05/25/2008 02:38:08', 1, 0, 0) 
SQL>>>insert into System_DISC (ItemKey, DiscArchKey, SMS_Unique_Identifier0, Client_Version0, Client0, Netbios_Name0, Hardware_ID0, Client_Type0, InternetEnabled0, AlwaysInternet0, Name0, Creation_Date0, Active0, Obsolete0, Decommissioned0) values (7, 5, 'GUID:9EDC312A-62D1-42F1-85B5-4BAE2B2EEF98', '4.00.5931.0001', 1, 'STEVERACDC3', '2:696CE24FCE01B66DC350470BC4FAEB3F96BC9B65', 1, 0, 0, 'STEVERACDC3', '05/25/2008 02:38:08', 1, 0, 0)
SQL>>>>> Done. 
insert agent information: DiscItemAgents : execute sql insert into DiscItemAgents (ItemKey, DiscArchKey, AgentID, AgentTime, AgentSite) values (7, 5, 8, '05/25/2008 02:38:06', 'CEN') 
SQL>>>insert into DiscItemAgents (ItemKey, DiscArchKey, AgentID, AgentTime, AgentSite) values (7, 5, 8, '05/25/2008 02:38:06', 'CEN')
SQL>>>>> Done. 
Database operations finished. 
CDiscoverDataManager::FilterDDR - Will not create CCR.  The Remote Client is already installed on this resource. 
CDiscoverDataManager::ProcessDDRs_PS - finished processing file C:\Program Files\Microsoft Configuration Manager\inboxes\auth\ddm.box\regreq\G9M8S2YG.RDR.
     Now, notice that all of this was done simply in response to a registration discovery record - the
     heartbeat discovery record hasn't shown up yet - it will show up right after the client gets
     'approval' back from the registration process and it knows it is clear to proceed.

     Now we see the first DDR processed after the registration record completed.  Note that we
     continue to make adjustments to the database and end up with one system showing as
     obsolete and one not - as noted in the screenshot following the log snip

Processing file BR1XW68G.DDR 
SQL>>>select d1.DiscArchKey,d1.DiscArchName,d1.BaseTableName,d1.Flags,d2.PropertyName,d2.ColumnName,d2.ValueType,d2.MaxWidth,d2.Flags,d2.ArrayTableName FROM DiscoveryArchitectures AS d1 LEFT JOIN  DiscPropertyDefs AS d2 ON d1.DiscArchKey = d2.DiscArchKey where d1.DiscArchName = 'System'  order by d1.DiscArchKey
SQL>>>>> Done. 
SQL>>>select MachineID from MachineIdGroupXRef where GUID = 'GUID:9EDC312A-62D1-42F1-85B5-4BAE2B2EEF98' and ArchitectureKey = 5
SQL>>>>> Done. 
Processing <System> #7...
SQL>>>select convert(varchar(255),IP_Addresses0) from System_IP_Address_ARR where ItemKey = 7 
SQL>>>>> Done. 
SQL>>>select convert(varchar(255),IP_Subnets0) from System_IP_Subnets_ARR where ItemKey = 7
SQL>>>>> Done.
SQL>>>select convert(varchar(255),IPv6_Addresses0) from System_IPv6_Addre_ARR where ItemKey = 7
SQL>>>>> Done. 
SQL>>>select convert(varchar(255),IPv6_Prefixes0) from System_IPv6_Prefi_ARR where ItemKey = 7 
SQL>>>>> Done. 
SQL>>>select convert(varchar(255),IPX_Addresses0) from System_IPX_Addres_ARR where ItemKey = 7 
SQL>>>>> Done. 
SQL>>>select convert(varchar(255),MAC_Addresses0) from System_MAC_Addres_ARR where ItemKey = 7
SQL>>>>> Done. 
SQL>>>select convert(varchar(255),Resource_Names0) from System_Resource_N_ARR where ItemKey = 7 
SQL>>>>> Done. 
SQL>>>select convert(varchar(255),SMS_Assigned_Sites0) from System_SMS_Assign_ARR where ItemKey = 7 
SQL>>>>> Done. 
SQL>>>select convert(varchar(255),SMS_Installed_Sites0) from System_SMS_Instal_ARR where ItemKey = 7
SQL>>>>> Done. 
SQL>>>select convert(varchar(255),System_Container_Name0) from System_System_Container_Name_A where ItemKey = 7
SQL>>>>> Done. 
SQL>>>select convert(varchar(255),System_Group_Name0) from System_System_Group_Name_ARR where ItemKey = 7
SQL>>>>> Done. 
SQL>>>select convert(varchar(255),System_OU_Name0) from System_System_OU_Name_ARR where ItemKey = 7
SQL>>>>> Done. 
SQL>>>select convert(varchar(255),System_Roles0) from System_System_Rol_ARR where ItemKey = 7 
SQL>>>>> Done. 
SQL>>>select convert(varchar(255),Active0),convert(varchar(255),AD_Domain_Name0),convert(varchar(255),AD_Site_Name0),convert(varchar(255),AlwaysInternet0),convert(varchar(255),Client0),convert(varchar(255),Client_Type0),convert(varchar(255),Client_Version0),convert(varchar(255),CPUType0),convert(char(10),Creation_Date0,101) +' '+ convert(char(8),Creation_Date0,8),convert(varchar(255),Decommissioned0),convert(varchar(255),Hardware_ID0),convert(varchar(255),InternetEnabled0),convert(varchar(255),User_Domain0),convert(varchar(255),User_Name0),convert(varchar(255),Name0),convert(varchar(255),Netbios_Name0),convert(varchar(255),Obsolete0),convert(varchar(255),Operating_System_Name_and0),convert(varchar(255),Previous_SMS_UUID0),convert(varchar(255),Resource_Domain_OR_Workgr0),convert(varchar(255),SMBIOS_GUID0),convert(varchar(255),SMS_Unique_Identifier0),convert(char(10),SMS_UUID_Change_Date0,101) +' '+ convert(char(8),SMS_UUID_Change_Date0,8),convert(varchar(255),Community_Name0) from System_DISC where ItemKey = 7
SQL>>>>> Done. 
SQL>>>select AgentID,AgentTime,AgentSite from DiscItemAgents where ItemKey = 7 and DiscArchKey = 5
SQL>>>>> Done. 
SQL>>>set quoted_identifier off;set ansi_warnings off;set ansi_padding off;set ansi_nulls off;set concat_null_yields_null off;set arithabort on;set numeric_roundabort off;set DATEFORMAT mdy; 
SQL>>>>> Done. 
SQL>>>exec sp_GetPublicKeyForSMSID "GUID:9EDC312A-62D1-42F1-85B5-4BAE2B2EEF98"
SQL>>>>> Done. 
==>Name = <STEVERACDC3> 
SQL>>>set quoted_identifier off;set ansi_warnings off;set ansi_padding off;set ansi_nulls off;set concat_null_yields_null off;set arithabort on;set numeric_roundabort off;set DATEFORMAT mdy; 
SQL>>>>> Done. 
SQL>>>update System_DISC set Obsolete0=1, Active0=0 where SMS_Unique_Identifier0="GUID:29D11342-0534-43C7-A7A5-C1AEC17F8192" and IsNULL(Obsolete0,0)=0; select @@ROWCOUNT 
SQL>>>>> Done. 
SQL>>>delete System_IP_Address_ARR from System_IP_Address_ARR where ItemKey = 7
SQL>>>>> Done. 
SQL>>>insert into System_IP_Address_ARR (ItemKey, IP_Addresses0) values (7, '65.53.93.1')
SQL>>>>> Done. 
SQL>>>delete System_MAC_Addres_ARR from System_MAC_Addres_ARR where ItemKey = 7 
SQL>>>>> Done.
SQL>>>insert into System_MAC_Addres_ARR (ItemKey, MAC_Addresses0) values (7, '00:B0:D0:C4:B0:8A') 
SQL>>>>> Done. 
SQL>>>delete System_IP_Subnets_ARR from System_IP_Subnets_ARR where ItemKey = 7 
SQL>>>>> Done. 
SQL>>>insert into System_IP_Subnets_ARR (ItemKey, IP_Subnets0) values (7, '65.53.92.0')
SQL>>>>> Done.
SQL>>>delete System_SMS_Instal_ARR from System_SMS_Instal_ARR where ItemKey = 7 
SQL>>>>> Done. 
SQL>>>insert into System_SMS_Instal_ARR (ItemKey, SMS_Installed_Sites0) values (7, 'CEN') 
SQL>>>>> Done. 
SQL>>>delete System_SMS_Assign_ARR from System_SMS_Assign_ARR where ItemKey = 7 
SQL>>>>> Done. 
SQL>>>insert into System_SMS_Assign_ARR (ItemKey, SMS_Assigned_Sites0) values (7, 'CEN') 
SQL>>>>> Done. 
Update base table: System_DISC : execute sql update System_DISC set ItemKey = 7, DiscArchKey = 5, Resource_Domain_OR_Workgr0 = 'STARTREKE', AD_Site_Name0 = 'Default-First-Site-Name', Previous_SMS_UUID0 = 'GUID:29D11342-0534-43C7-A7A5-C1AEC17F8192', SMS_UUID_Change_Date0 = '05/25/2008 07:39:07', SMBIOS_GUID0 = '4C4C4544-B45A-3710-8030-CAC04F473031', Operating_System_Name_and0 = 'Microsoft Windows NT Advanced Server 5.2'  where ItemKey = 7 
SQL>>>update System_DISC set ItemKey = 7, DiscArchKey = 5, Resource_Domain_OR_Workgr0 = 'STARTREKE', AD_Site_Name0 = 'Default-First-Site-Name', Previous_SMS_UUID0 = 'GUID:29D11342-0534-43C7-A7A5-C1AEC17F8192', SMS_UUID_Change_Date0 = '05/25/2008 07:39:07', SMBIOS_GUID0 = '4C4C4544-B45A-3710-8030-CAC04F473031', Operating_System_Name_and0 = 'Microsoft Windows NT Advanced Server 5.2'  where ItemKey = 7
SQL>>>>> Done. 
insert agent information: DiscItemAgents : execute sql IF EXISTS (select ItemKey from DiscItemAgents where ItemKey = 7 and DiscArchKey = 5 and AgentID = 9 and AgentSite = 'CEN') update DiscItemAgents set AgentTime = '05/25/2008 02:39:21'  where ItemKey = 7 and DiscArchKey = 5 and AgentID = 9 and AgentSite = 'CEN'~ ELSE insert into DiscItemAgents (AgentTime, ItemKey, DiscArchKey, AgentID, AgentSite) values ('05/25/2008 02:39:21', 7, 5, 9, 'CEN')
SQL>>>IF EXISTS (select ItemKey from DiscItemAgents where ItemKey = 7 and DiscArchKey = 5 and AgentID = 9 and AgentSite = 'CEN') update DiscItemAgents set AgentTime = '05/25/2008 02:39:21'  where ItemKey = 7 and DiscArchKey = 5 and AgentID = 9 and AgentSite = 'CEN'~ ELSE insert into DiscItemAgents (AgentTime, ItemKey, DiscArchKey, AgentID, AgentSite) values ('05/25/2008 02:39:21', 7, 5, 9, 'CEN')
SQL>>>>> Done. 
Database operations finished. SMS_DISCOVERY_DATA_MANAGER 5/25/2008 2:39:23 AM 2708 (0x0A94)
CDiscoverDataManager::FilterDDR - Will not create CCR.  The Remote Client is already installed on this resource. 
CDiscoverDataManager::ProcessDDRs_PS - finished processing file C:\Program Files\Microsoft Configuration Manager\inboxes\auth\ddm.box\BR1XW68G.DDR.

Now that we have gotten finished with all of this processing, here is what we see as a result in the UI - all systems collection....

 

If we look at the properties of the obsolete entry we will see that it displays with a grey background, meaning that this is basically just a historical record....

The properties of the active record display normally

OK, all of that and we haven't even talked about the manual options yet!!!!  Don't worry, I won't make you go through more log files.  Basically, if you choose the manual option you will have to make the choice when a conflicting record is detected.  Any conflicts will be displayed in the 'conflicting records' node.  When you right-click on a record you will have three choices - merge, new or block - as shown below...

If you choose new, the process you have just seen will take place.  If you choose merge, ConfigMgr will attempt to merge the new data onto the old record - this may be the option of choice if you KNOW the system is the same and you want to preserve all historical records associated with the old record.  The third option of block will create a new record in the database but block it from further use until the block is removed (done through any collection that might contain the blocked record).

So, in ConfigMgr, you have complete control over how all of this works.  Now, just a bit more and we will be done.

It's cool that we know how all of this works, but where would I see this in practice?  One clear example is through our collections.  All of the work we've just described is happening on the System_DISC and related tables.  This table is the source for all collection membership based on systems - but updates to the System_DISC table do not immediately show up in collections.  To see the changes in a collection it is necessary that the collection go through an update and a refresh cycle (assuming it is query based) to have the changes in the System_DISC table reflected in the list - and this assumes that the query criteria are designed so that the changes will be picked up appropriately.  For static membership collections you may have to go back through the wizard and pick the new system before it shows up in the collection - it's important to understand how all of this works together.

If all of this is of interest, take some time in your lab and work through various scenarios of interest - working through a few examples will definately help this become more clear!  Hope this was helpful.

Posted Monday, May 12, 2008 7:10 AM by steverac | 0 Comments

OpsMgr Vista Gadget

Trying to track down that problem with a System Center product but don't know where to look?  A Vista gadget has been created to search specific sites for help instead of the entire web.  The gadget is a must for every System Center administrator!  Download the gadget at

http://blogs.technet.com/momteam/archive/2008/05/07/searching-for-operations-manager-help.aspx

Posted Monday, May 12, 2008 7:07 AM by steverac | 1 Comments

OpsMgr 2007 Security Hardening Guide

Security seems to be a common stumbling block - particularly for those who need to harden security beyond what we provide in the default setup.  The Security Hardening Guide has just released and is a great reference for those of you in the security trenches! 

 http://www.microsoft.com/downloads/details.aspx?FamilyID=244512ab-7419-4c93-8046-9c8e47e0f780&DisplayLang=en

Posted Monday, May 12, 2008 7:01 AM by steverac | 0 Comments

OpsMgr Authoring Console has released!

We've been working with the release candidate for a while - the official release has recently been posted - download from

http://www.microsoft.com/downloads/details.aspx?FamilyId=6C8911C3-C495-4A03-96DF-9731C37AA6D7&displaylang=en 

I've also been working a bit with MP Studio Lite (fre edition) from Silect Software.  It is a pretty slick tool that is a good companion to the authoring console.  Take a look at

http://rorymccaw.spaces.live.com/Blog/cns!2C4CD58BB2826E21!3139.entry

Posted Monday, May 12, 2008 6:53 AM by steverac | 0 Comments

Service Level Dashboard for OpsMgr 2007 now in beta!
Looking for a single view into your OpsMgr environment that will allow near real time end-to-end reporting of performance and availability for LOB apps?  The Service Level Dashboard is your solution - currently in beta, this solution accelerator can be downloaded from http://go.microsoft.com/fwlink/?LinkId=110337

Posted Monday, May 12, 2008 6:45 AM by steverac | 0 Comments

OpsMgr cross-platform extender
At MMS this week we announced the pending release (currently beta) of the cross platform extender.  This addition will allow OpsMgr to NATIVELY provide monitoring support for heterogenous environments (unix, linux).  There are many details to digest but we will have a native agent running on Unix/Linux and be able to view the monitoring data in the Ops console just as you can with Windows systems today - our reporting structure will include Unix/Linux systems and the discovery feature has been adjusted to automatically push the agent to Unix/Linux systems.  Very exciting times as Windows only monitoring becomes history and we take on a heterogenous world!

Posted Thursday, May 01, 2008 9:08 AM by steverac | 0 Comments

More Posts Next page »
Page view tracker