Monday, May 19, 2014

SCCM WQL Query: Dealing with X86 and X64 Systems

This one actually comes by request in the comments section of a previous post. I haven't bothered to post on this subject because I was of the opinion that plenty of other blogs had already covered this scenario. However, you asked so I suppose it doesn't hurt to go over how I address OS Architecture in my WQL queries. As with my WQL queries for Windows 8-2012 I just create a series of basic core queries that I then just "tweak" to fit my needs. Here they are:

Basic "OS Architecture" Queries (returns All Systems for specified architecture):

select distinct 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_COMPUTER_SYSTEM on SMS_G_System_COMPUTER_SYSTEM.ResourceID = SMS_R_System.ResourceID where SMS_G_System_COMPUTER_SYSTEM.SystemType = "x86-based PC"

select distinct 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_COMPUTER_SYSTEM on SMS_G_System_COMPUTER_SYSTEM.ResourceID = SMS_R_System.ResourceID where SMS_G_System_COMPUTER_SYSTEM.SystemType = "X64-based PC"

OS Architecture Queries filtered by OS Type (Client/Server):
Note how we look for any systems that are NOT servers to get our list of clients.

select distinct 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_COMPUTER_SYSTEM on SMS_G_System_COMPUTER_SYSTEM.ResourceID = SMS_R_System.ResourceID inner join SMS_G_System_OPERATING_SYSTEM on SMS_G_System_OPERATING_SYSTEM.ResourceID = SMS_R_System.ResourceID where SMS_G_System_COMPUTER_SYSTEM.SystemType = "x86-based PC" and SMS_G_System_OPERATING_SYSTEM.Caption not like "%Server%"

select distinct 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_COMPUTER_SYSTEM on SMS_G_System_COMPUTER_SYSTEM.ResourceID = SMS_R_System.ResourceID inner join SMS_G_System_OPERATING_SYSTEM on SMS_G_System_OPERATING_SYSTEM.ResourceID = SMS_R_System.ResourceID where SMS_G_System_COMPUTER_SYSTEM.SystemType = "x64-based PC" and SMS_G_System_OPERATING_SYSTEM.Caption like "%Server%"

OS Architecture Queries filtered by OS Version:

select distinct 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_COMPUTER_SYSTEM on SMS_G_System_COMPUTER_SYSTEM.ResourceID = SMS_R_System.ResourceID inner join SMS_G_System_OPERATING_SYSTEM on SMS_G_System_OPERATING_SYSTEM.ResourceID = SMS_R_System.ResourceID where SMS_G_System_COMPUTER_SYSTEM.SystemType = "x86-based PC" and SMS_G_System_OPERATING_SYSTEM.Caption like "%Windows 7%"

In the above code just specify desired OS Architecture for "SMS_G_System_COMPUTER_SYSTEM.SystemType" and substitute desired OS version for "SMS_G_System_OPERATING_SYSTEM.Caption". For example:

  • Use "%2000%" for Windows 2000
  • Use "%Windows XP%" for Windows XP
  • Use "%Server 2003%" for Windows 2003
  • Use "%Vista%" for Windows Vista
  • Use "%Serverr 2008%" for Windows 2008 Non-R2 (No, the extra "r" is not a typo)
  • Use "%Windows 7%" for Windows 7
  • Use "%Server 2008 R2%" for Windows Server 2008 R2
  • Use "%Windows 8%" for Windows 8
  • Use "%Server 2012%" for Windows 2012

Hope you guys find this useful, and if anyone knows a better method feedback is always welcome.

Wednesday, March 19, 2014

TechEd 2014 is almost upon us...

Wow, amazing that another year has just flown by and we find ourselves on the cusp of another TechEd event. This year the conference is being held in Houston and (per usual) I plan to be there. One item of particular interest this year is the fact that Microsoft has chosen to combine TechEd with MMS (which was traditionally a stand-alone conference devoted to Systems Management). I've been mapping out my schedule and things are filling up fast (no room left in anything Wally Mead is doing, ha ha). It sort of amazes me that I've gone to 4 of these conferences and still not managed to do any meaningful networking. This year I hope to try a few different approaches to hopefully meet some people and make some real connections in the industry I've worked in since the mid-90's. Also (as a sign of the times) my supervisors want me to tune into some Azure sessions this go-round. Cloud cloud cloud right? Should be interesting! Here's the link to the TechEd North America website:

http://northamerica.msteched.com/

Maybe I'll see some of you there!

SCCM: Another Log File Reference

Can't take credit for this one. I found it as a blog posting on MSDN by a guy named Liuxiang Chen. I've actually stated using my blog as a personal reference for things I find online that I want to remember so I've copied it here for everyone else to see as well. Chen's original post was dated April of 2009, and (as of this posting) it appears to have been 5 years since he published anything there. Hope this doesn't count as plagiarism but I didn't want to take the chance that this excellent post might get wiped out at some point because his blog is no longer being updated. Also (since its a 2009 posting) some of the info may be a little out of date. I plan to pick through it later and update it as needed (thereby making it my own). For how here is a copy of Chen's post as it originally appeared on MSDN:


The SCCM client logs are located at %WINDIR%\CCM\Logs.

The SCCM server log files are located in the <INSTALL_PATH>\Logs or SMS_CCM\Logs folder. IIS logs can be found in %WINDIR%\System32\logfiles\W3SVC1 folder.

Client Log Files

  • CAS - Content Access Service. Maintains the local package cache.
  • Ccmexec.log - Records activities of the client and the SMS Agent Host service.
  • CertificateMaintenance.log - Maintains certificates for Active Directory directory service and management points.
  • ClientIDManagerStartup.log - Creates and maintains the client GUID.
  • ClientLocation.log - Site assignment tasks.
  • ContentTransferManager.log - Schedules the Background Intelligent Transfer Service (BITS) or the Server Message Block (SMB) to download or to access SMS packages.
  • DataTransferService.log - Records all BITS communication for policy or package access.
  • Execmgr.log - Records advertisements that run.
  • FileBITS.log - Records all SMB package access tasks.
  • Fsinvprovider.log (renamed to FileSystemFile.log in all SMS 2003 Service Packs) - Windows Management Instrumentation (WMI) provider for software inventory and file collection.
  • InventoryAgent.log - Creates discovery data records (DDRs) and hardware and software inventory records.
  • LocationServices.log - Finds management points and distribution points.
  • Mifprovider.log - The WMI provider for .MIF files.
  • Mtrmgr.log - Monitors all software metering processes.
  • PolicyAgent.log - Requests policies by using the Data Transfer service.
  • PolicyAgentProvider.log - Records policy changes.
  • PolicyEvaluator.log - Records new policy settings.
  • Remctrl.log - Logs when the remote control component (WUSER32) starts.
  • Scheduler.log - Records schedule tasks for all client operations.
  • Smscliui.log - Records usage of the Systems Management tool in Control Panel.
  • StatusAgent.log - Logs status messages that are created by the client components.
  • SWMTRReportGen.log - Generates a usage data report that is collected by the metering agent. (This data is logged in Mtrmgr.log.)

Server Log Files

  • Ccm.log - Client Configuration Manager tasks.
  • Cidm.log - Records changes to the client settings by the Client Install Data Manager (CIDM).
  • Colleval.log - Logs when collections are created, changed, and deleted by the Collection Evaluator.
  • Compsumm.log - Records Component Status Summarizer tasks.
  • Cscnfsvc.log - Records Courier Sender confirmation service tasks.
  • Dataldr.log - Processes Management Information Format (MIF) files and hardware inventory in the Configuration Manager 2007 database.
  • Ddm.log - Saves DDR information to the Configuration Manager 2007 database by the Discovery Data Manager.
  • Despool.log - Records incoming site-to-site communication transfers.
  • Distmgr.log - Records package creation, compression, delta replication, and information updates.
  • Hman.log - Records site configuration changes, and publishes site information in Active Directory Domain Services.
  • Inboxast.log - Records files that are moved from the management point to the corresponding SMS\INBOXES folder.
  • Inboxmgr.log - Records file maintenance.
  • Invproc.log - Records the processing of delta MIF files for the Dataloader component from client inventory files.
  • Mpcontrol.log - Records the registration of the management point with WINS. Records the availability of the management point every 10 minutes.
  • Mpfdm.log - Management point component that moves client files to the corresponding SMS\INBOXES folder.
  • MPMSI.log - Management point .msi installation log.
  • MPSetup.log - Records the management point installation wrapper process.
  • Ntsvrdis.log - Configuration Manager 2007 server discovery.
  • Offermgr.log - Records advertisement updates.
  • Offersum.log - Records summarization of advertisement status messages.
  • Policypv.log - Records updates to the client policies to reflect changes to client settings or advertisements.
  • Replmgr.log - Records the replication of files between the site server components and the Scheduler component.
  • Rsetup.log - Reporting point setup log.
  • Sched.log - Records site-to-site job and package replication.
  • Sender.log - Records files that are sent to other child and parent sites.
  • Sinvproc.log - Records client software inventory data processing to the site database in Microsoft SQL Server.
  • Sitecomp.log - Records maintenance of the installed site components.
  • Sitectrl.log - Records site setting changes to the Sitectrl.ct0 file.
  • Sitestat.log - Records the monitoring process of all site systems.
  • Smsdbmon.log - Records database changes.
  • Smsexec.log - Records processing of all site server component threads.
  • Smsprov.log - Records WMI provider access to the site database.
  • SMSReportingInstall.log - Records the Reporting Point installation. This component starts the installation tasks and processes configuration changes.
  • SMSSHVSetup.log - Records the success or failure (with failure reason) of installing the System Health Validator point.
  • Srvacct.log - Records the maintenance of accounts when the site uses standard security.
  • Statmgr.log - Writes all status messages to the database.
  • Swmproc.log - Processes metering files and maintains settings.

Admin Console Log Files

  • RepairWizard.log - Records errors, warnings, and information about the process of running the Repair Wizard.
  • ResourceExplorer.log - Records errors, warnings, and information about running the Resource Explorer.
  • SMSAdminUI.log - Records the local Configuration Manager 2007 console tasks when you connect to Configuration Manager 2007 sites.

Management Point Log Files

  • MP_Ddr.log - Records the conversion of XML.ddr records from clients, and copies them to the site server.
  • MP_GetAuth.log - Records the status of the site management points.
  • MP_GetPolicy.log - Records policy information.
  • MP_Hinv.log - Converts XML hardware inventory records from clients and copies the files to the site server.
  • MP_Location.log - Records location manager tasks.
  • MP_Policy.log - Records policy communication.
  • MP_Relay.log - Copies files that are collected from the client.
  • MP_Retry.log - Records the hardware inventory retry processes.
  • MP_Sinv.log - Converts XML hardware inventory records from clients and copies them to the site server.
  • MP_Status.log - Converts XML.svf status message files from clients and copies them to the site server.

Mobile Device Management Log Files

  • DmClientHealth.log - Records the GUIDs of all the mobile device clients that are communicating with the Device Management Point.
  • DmClientRegistration.log - Records registration requests from and responses to the mobile device client in Native mode.
  • DmpDatastore.log - Records all the site database connections and queries made by the Device Management Point.
  • DmpDiscovery.log - Records all the discovery data from the mobile device clients on the Device Management Point.
  • DmpFileCollection.log - Records mobile device file collection data from mobile device clients on the Device Management Point.
  • DmpHardware.log - Records hardware inventory data from mobile device clients on the Device Management Point.
  • DmpIsapi.log - Records mobile device communication data from device clients on the Device Management Point.
  • dmpMSI.log - Records the MSI data for Device Management Point setup.
  • DMPSetup.log - Records the mobile device management setup process.
  • DmpSoftware.log - Records mobile device software distribution data from mobile device clients on the Device Management Point.
  • DmpStatus.log - Records mobile device status messages data from mobile device clients on the Device Management Point.
  • FspIsapi.log - Records Fallback Status Point communication data from mobile device clients and client computers on the Fallback Status Point.

Mobile Device Client Log Files

  • DmCertEnroll.log - Records certificate enrollment data on mobile device clients.
  • DMCertResp.htm (in \temp) - Records HTML response from the certificate server when the mobile device Enroller program requests a client authentication certificate on mobile device clients.
  • DmClientSetup.log - Records client setup data on mobile device clients.
  • DmClientXfer.log - Records client transfer data for Windows Mobile Device Center and ActiveSync deployments.
  • DmCommonInstaller.log - Records client transfer file installation for setting up mobile device client transfer files on client computers.
  • DmInstaller.log - Records whether DMInstaller correctly calls DmClientSetup and whether DmClientSetup exits with success or failure on mobile device clients.
  • DmInvExtension.log - Records Inventory Extension file installation for setting up Inventory Extension files on client computers.
  • DmSvc.log - Records mobile device management service data on mobile device clients.

Operating System Deployment Log Files

  • CCMSetup.log - Provides information about client-based operating system actions.
  • CreateTSMedia.log - Provides information about task sequence media when it is created. This log is generated on the computer running the Configuration Manager 2007 administrator console.
  • DriverCatalog.log - Provides information about device drivers that have been imported into the driver catalog.
  • MP_ClientIDManager.log - Provides information about the Configuration Manager 2007 management point when it responds to Configuration Manager 2007 client ID requests from boot media or PXE. This log is generated on the Configuration Manager 2007 management point.
  • MP_DriverManager.log - Provides information about the Configuration Manager 2007 management point when it responds to a request from the Auto Apply Driver task sequence action. This log is generated on the Configuration Manager 2007 management point.
  • MP_Location.log - Provides information about the Configuration Manager 2007 management point when it responds to request state store or release state store requests from the state migration point. This log is generated on the Configuration Manager 2007 management point.
  • Pxecontrol.log - Provides information about the PXE Control Manager.
  • PXEMsi.log - Provides information about the PXE service point and is generated when the PXE service point site server has been created.
  • PXESetup.log - Provides information about the PXE service point and is generated when the PXE service point site server has been created.
  • Setupact.log Setupapi.log Setuperr.log Provide information about Windows Sysprep and setup logs.
  • SmpIsapi.log - Provides information about the state migration point Configuration Manager 2007 client request responses.
  • Smpmgr.log - Provides information about the results of state migration point health checks and configuration changes.
  • SmpMSI.log - Provides information about the state migration point and is generated when the state migration point site server has been created.
  • Smsprov.log - Provides information about the SMS provider.
  • Smspxe.log - Provides information about the Configuration Manager 2007 PXE service point.
  • SMSSMPSetup.log - Provides information about the state migration point and is generated when the state migration point site server has been created.
  • Smsts.log - General location for all operating system deployment and task sequence log events.
  • TaskSequenceProvider.log - Provides information about task sequences when they are imported, exported, or edited.
  • USMT Log loadstate.log - Provides information about the User State Migration Tool (USMT) regarding the restore of user state data.
  • USMT Log scanstate.log - Provides information about the USMT regarding the capture of user state data.

Network Access Protection Log Files

  • Ccmcca.log - Logs the processing of compliance evaluation based on Configuration Manager NAP policy processing and contains the processing of remediation for each software update required for compliance.
  • CIAgent.log - Tracks the process of remediation and compliance. However, the software updates log file, *Updateshandler.log - provides more informative details on installing the software updates required for compliance.
  • locationservices.log - Used by other Configuration Manager features (for example, information about the client’s assigned site) but also contains information specific to Network Access Protection when the client is in remediation. It records the names of the required remediation servers (management point, software update point, and distribution points that host content required for compliance), which are also sent in the client statement of health.
  • SDMAgent.log - Shared with the Configuration Manager feature desired configuration management and contains the tracking process of remediation and compliance. However, the software updates log file, Updateshandler.log, provides more informative details about installing the software updates required for compliance.
  • SMSSha.log - The main log file for the Configuration Manager Network Access Protection client and contains a merged statement of health information from the two Configuration Manager components: location services (LS) and the configuration compliance agent (CCA). This log file also contains information about the interactions between the Configuration Manager System Health Agent and the operating system NAP agent, and also between the Configuration Manager System Health Agent and both the configuration compliance agent and the location services. It provides information about whether the NAP agent successfully initialized, the statement of health data, and the statement of health response.

System Health Validator Point Log Files

  • Ccmperf.log -Contains information about the initialization of the System Health Validator point performance counters.
  • SmsSHV.log - The main log file for the System Health Validator point; logs the basic operations of the System Health Validator service, such as the initialization progress.
  • SmsSHVADCacheClient.log - Contains information about retrieving Configuration Manager health state references from Active Directory Domain Services.
  • SmsSHVCacheStore.log - Contains information about the cache store used to hold the Configuration Manager NAP health state references retrieved from Active Directory Domain Services, such as reading from the store and purging entries from the local cache store file. The cache store is not configurable.
  • SmsSHVRegistrySettings.log - Records any dynamic changes to the System Health Validator component configuration while the service is running.
  • SmsSHVQuarValidator.log - Records client statement of health information and processing operations. To obtain full information, change the registry key LogLevel from 1 to 0 in the following location:HKLM\SOFTWARE\Microsoft\SMSSHV\Logging\@GLOBAL

Desired Configuration Management Log Files

  • ciagent.log - Provides information about downloading, storing, and accessing assigned configuration baselines.
  • dcmagent.log - Provides high-level information about the evaluation of assigned configuration baselines and desired configuration management processes.
  • discovery.log - Provides detailed information about the Service Modeling Language (SML) processes.
  • sdmagent.log - Provides information about downloading, storing, and accessing configuration item content.
  • sdmdiscagent.log - Provides high-level information about the evaluation process for the objects and settings configured in the referenced configuration items.

Wake On LAN Log Files

  • Wolmgr.log - Contains information about wake-up procedures such as when to wake up advertisements or deployments that are configured for Wake On LAN.
  • WolCmgr.log - Contains information about which clients need to be sent wake-up packets, the number of wake-up packets sent, and the number of wake-up packets retried.

Software Updates Site Server Log Files

  • ciamgr.log - Provides information about the addition, deletion, and modification of software update configuration items.
  • distmgr.log - Provides information about the replication of software update deployment packages.
  • objreplmgr.log - Provides information about the replication of software updates notification files from a parent to child sites.
  • PatchDownloader.log - Provides information about the process for downloading software updates from the update source specified in the software updates metadata to the download destination on the site server.
  • replmgr.log - Provides information about the process for replicating files between sites.
  • smsdbmon.log - Provides information about when software update configuration items are inserted, updated, or deleted from the site server database and creates notification files for software updates components.
  • SUPSetup - Provides information about the software update point installation. When the software update point installation completes, Installation was successful is written to this log file.
  • WCM.log - Provides information about the software update point configuration and connecting to the Windows Server Update Services (WSUS) server for subscribed update categories, classifications, and languages.
  • WSUSCtrl.log - Provides information about the configuration, database connectivity, and health of the WSUS server for the site.
  • wsyncmgr.log -Provides information about the software updates synchronization process.

WSUS Server Log Files

  • Change.log - Provides information about the WSUS server database information that has changed.
  • SoftwareDistribution.log - Provides information about the software updates that are synchronized from the configured update source to the WSUS server database.

Software Updates Client Computer Log Files

  • CAS.log - Provides information about the process of downloading software updates to the local cache and cache management.
  • CIAgent.log - Provides information about processing configuration items, including software updates.
  • LocationServices.log - Provides information about the location of the WSUS server when a scan is initiated on the client.
  • PatchDownloader.log - Provides information about the process for downloading software updates from the update source to the download destination on the site server. This log is only on the client computer configured as the synchronization host for the Inventory Tool for Microsoft Updates.
  • PolicyAgent.log - Provides information about the process for downloading, compiling, and deleting policies on client computers.
  • PolicyEvaluator - Provides information about the process for evaluating policies on client computers, including policies from software updates.
  • RebootCoordinator.log - Provides information about the process for coordinating system restarts on client computers after software update installations.
  • ScanAgent.log - Provides information about the scan requests for software updates, what tool is requested for the scan, the WSUS location, and so on.
  • ScanWrapper - Provides information about the prerequisite checks and the scan process initialization for the Inventory Tool for Microsoft Updates on Systems Management Server (SMS) 2003 clients.
  • SdmAgent.log - Provides information about the process for verifying and decompressing packages that contain configuration item information for software updates.
  • ServiceWindowManager.log - Provides information about the process for evaluating configured maintenance windows.
  • smscliUI.log - Provides information about the Configuration Manager Control Panel user interactions, such as initiating a Software Updates Scan Cycle from the Configuration Manager Properties dialog box, opening the Program Download Monitor, and so on.
  • SmsWusHandler - Provides information about the scan process for the Inventory Tool for Microsoft Updates on SMS 2003 client computers.
  • StateMessage.log - Provides information about when software updates state messages are created and sent to the management point.
  • UpdatesDeployment.log - Provides information about the deployment on the client, including software update activation, evaluation, and enforcement. Verbose logging shows additional information about the interaction with the client user interface.
  • UpdatesHandler.log - Provides information about software update compliance scanning and about the download and installation of software updates on the client.
  • UpdatesStore.log - Provides information about the compliance status for the software updates that were assessed during the compliance scan cycle.
  • WUAHandler.log - Provides information about when the Windows Update Agent on the client searches for software updates.
  • WUSSyncXML.log - Provides information about the Inventory Tool for the Microsoft Updates synchronization process. This log is only on the client computer configured as the synchronization host for the Inventory Tool for Microsoft Updates.

Windows Update Agent Log File


  • WindowsUpdate.log - Provides information about when the Windows Update Agent connects to the WSUS server and retrieves the software updates for compliance assessment and whether there are updates to the agent components. 

SCCM: Microsoft Anti-Virus Exclusion List Link

Came across this fantastic link that Microsoft appears to update on a fairly regular basis. Its just a list of links to recommended Endpoint Protection exclusion settings for Microsoft products. Definitely worth bookmarking if you are using the Endpoint Protection feature in SCCM:

http://social.technet.microsoft.com/wiki/contents/articles/953.microsoft-anti-virus-exclusion-list.aspx

Thursday, January 30, 2014

SCCM: Viewing install commands for deployed applications on a client machine

Recently I was really wrestling with getting a set of install commands working for an application I was deploying through SCCM. Because I was using some variables in my command string I needed to "see" what SCCM was ultimately telling the client to run once the application downloaded and the install kicked off. I was able to determine this by logging onto one of my tests clients and navigating to this log:

C:\Windows\CCM\Logs\AppEnforce.log

Sure enough the final command string that was getting executed was not what I expected. I made some adjustments to my install string based on what i saw in the log and got it working. Hope someone else finds this useful.

Friday, January 17, 2014

SCCM Updates: Go for "Autopilot" not "Total Automation"

I've been getting lot of questions on a previous post regarding my approach to software update structure with SCCM. I replied to a few and this generated even more questions so I felt the need to do a more lengthy response about why I do things the way I do them and what led to my approach and that led to this post. I'll start by answering the last question posted there. Yes, I clean up superseded and expired updates by hand (for now at least) and there are a few very good reasons why I do it that way. When I was first attempting to implement software updates with SCCM I feel that my big initial mistake was to chase after a strategy that focused on "total automation". During my that first approach I literally created an ADR and package for every individual product that I wanted to patch. The ADRs ran monthly and cleaned out the expired and superseded stuff automatically. Sounds great right? In practice what I actually discovered was this approach works great for something simple like a daily Endpoint Protection update (because in that scenario you really only have to consider about 3-4 small patches a day tops). You try to do that with all the security, critical, service pack, etc. updates for multiple Windows versions going back to say 2003 and you run into several problems.

First you have a *lot* more patches to deal with in your software update group(s). Every time your SCCM clients kick off a software update evaluation cycle they have to look through all those updates and determine if any apply to the device upon which they are running. At a Microsoft conference last year I learned that this can cause high CPU utilization on your target machines. Still that’s not too bad because it only has to run once against the software update group provided the update group doe not change after that initial run. Ah but there’s the rub, I also learned that every time the ADR runs it automatically changes the content in your software update group! Do that every Patch Tuesday and your clients have to once again parse or scan that update group which (again) can hit your CPUs pretty hard. To put it in perspective, think about how many times we hear users complain about "slow computers" in our line of work. You don’t want to introduce something hat will hammer CPU utilization on your Servers or User PC multiple times a month.

Second by having a bunch of ADRs (I had a total of 12) that were constantly changing and updating the content in my software update groups I discovered I was putting a lot of load on my primary SCCM server in the weeks following patch Tuesday. The reason there should be obvious as it was constantly downloading patches and cleaning up software update groups based on those ADRs. So by chasing total automation I was (in fact) causing lot of performance issues on both my clients and my servers. Also it really made no sense to have ADRs that constantly ran against groups with updates that go way back in the past (they almost never change unless Microsoft expires or supersedes them). I came to realize that year-based static update groups with a single monthly ADR were the best choice for dealing with the performance and organizational issues I was facing. The reason being is I typically only have to change the older groups once a quarter (sometimes longer).  So (usually) I only have to worry about the updates in my most recent year-based group or my monthly groups (I usually keep monthly groups up to three months in the past before moving the updates from the oldest group into a year-based group).

Finally I learned another valuable lesson about the ADRs. No matter how well you craft your download rules they will inevitably screw something up. Either they will download something you don't want or remove something you want to keep. Its much better to have your monthly ADRs downloading updates into a test group and then (once you've verified what it downloaded) you can then move the contents of that test group into your static update group that targets production machines. Coincidentally this solves the "Expired and Superseded" issue through attrition as it forces you to do a "monthly visual audit" on your update groups when you open the console up after patch Tuesday to see what your ADR downloaded. If your static groups contain superseded or expired updates you'll see that the icon next to their names has changed to reflect that. At that point its child's play to just open the group and remove the older updates by editing their membership.


So that’s a pretty big reply to the questions I was being asked and (honestly) a lot of it is just what I’ve discovered through using SCCM 2012 in the past year. There may be a better way to do it, but this one works for me. I really struggled a lot with this at first and I hope I'm posting this big response in an effort to help others avoid some of my own pain. SCCM is a really complicated animal and I just think its a bad idea to go into it "set it and forget it approach". If it were really that easy we wouldn't need SCCM admins right? The main point I’d like to get across though is sometimes a 100% automated solution just doesn't make sense. SCCM can automate a lot of things for you but even with the advent of the autopilot feature on an airplane we still need pilots at the helm. Focus on design paradigms that automate the most time consuming, tedious or repetitive steps. Then if you find yourself still stuck with a manual step, try to make it something you can do very quickly (like at the touch of a button). I hope that makes sense and that others find it helpful. If there are any counterpoints to this philosophy or if anyone just has better ways of approaching this I'd love to hear about it in the comments section.

UPDATE: Someone requested a screenshot of my SUGs. I've added it below. Like I said we roll about 2-3 months in the past on our monthly deltas and once we achieve around 90% I move those to a year-based group. I've highlighted the delta and year-based groups in the screenshot. The other groups listed there are "special case" groups:


Friday, January 10, 2014

MDT: Notes on setting Pre-checked Applications in CustomSettings.ini

I recently needed to set some conditions in my MDT CustomSettings.ini file to pre-check certain applications during an image deployment. Those of you that have used this feature know that you can get the GUID from any application in MDT by right-clicking it within the MDT Workbench view and choosing properties. The GUID appears at the bottom of the window that opens and it can then be copied and pasted into then CustomSettings.ini like so:

Applications001={GUID1}
Applications002={GUID2}

Thats fine and dandy, but what are the limitations of this process? What syntax is permissible? I won't go into the details but some recent issuues froece me to ask those quetions. Here's the answer I got from Keith Garner on the MDT Technet forums:

Numbers may be between 1 and 999

You can start at any number within the CS.ini *HOWEVER* when reading the list, MDT will always start at 1, and if it comes across any missing number it will ignore the rest. So if you inputted Var10, without using Var1 through Var9, then Var10 might as well not existed.

You may choose to *not* prefix a zero to the start, or you may choose to prefix some zeros, as long as the number is 3 digits long, like: 001, 010, 100.

Valid:
Applications1=GUID
Applications10=GUID
Applications010=GUID

Not Valid:
Applications01=GUID
Applications0001=GUID


I did some testing on my own and (as expected) these rules also apply to MandatoryApplications, WMU_EXCLUDEID and WMU_EXCLUDEKB. All good info to know if you are customizing these settings in CustomSettings.ini!

Wednesday, October 9, 2013

SCCM: Software Updates Example Scenario from Microsoft

I've almost finished reworking our software updates around the paradigms discussed in the last tow posts. I was thinking about putting together a nice write up explaining how I did it when I came across this fantastic Microsoft article on the subject:

http://technet.microsoft.com/en-us/library/jj134348.aspx

I love how its all laid out almost like an elementary school math problem. One of my biggest failures in my initial approach to software updates with SCCM was the pursuit of a process that was 100% automated. Going the route outlined by Microsoft in the article above still requires you to be at the helm at least once a month to deploy the updates in your ADR. Turns out this is actually a good thing as it forces you to really examine what you're deploying every month. Plus you can use deployment templates to "semi-automate" the process f manual deployment which manages to eliminate a lot of the human error potential of that method. Maybe SCCM 2012 R2 will ease this burden a bit for further automation but (for now) this works.