<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:atom="https://www.w3.org/2005/Atom" xmlns:sy="https://purl.org/rss/1.0/modules/syndication/" xmlns:dc="https://purl.org/dc/elements/1.1/" xmlns:content="https://purl.org/rss/1.0/modules/content/" xmlns:wfw="https://wellformedweb.org/CommentAPI/" xmlns:slash="https://purl.org/rss/1.0/modules/slash/"
  version="2.0">
  <channel>
    <title>Scott’s IT Blog</title>
    <atom:link
      href="https://docs.microsoft.com/archive/blogs/scotts-it-blog/feed.xml"
      rel="self"
      type="application/rss+xml" />
    <link>https://docs.microsoft.com/archive/blogs/scotts-it-blog/feed.xml</link>
    <description>A general blog addressing topics related to System Center Configuration Manager and related Windows technologies</description>
    <lastBuildDate>Thu, 28 Apr 2016 05:36:03 GMT</lastBuildDate>
    <language>en-US</language>
    <sy:updatePeriod>hourly</sy:updatePeriod>
    <sy:updateFrequency>1</sy:updateFrequency>
    <item>
      <title>Identifying (and Counting) Computers Sending BADMIF Files</title>
      <link>https://docs.microsoft.com/archive/blogs/scotts-it-blog/identifying-and-counting-computers-sending-badmif-files</link>
      <pubDate>Wed, 29 Apr 2015 07:16:00 GMT</pubDate>
      <dc:creator><![CDATA[srachui]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.technet.microsoft.com/scotts-it-blog/2015/04/29/identifying-and-counting-computers-sending-badmif-files/</guid>
      <description><![CDATA[Yesterday, a customer asked me to look for trends within his BADMIFs folder and tell him if there...]]></description>
      <content:encoded><![CDATA[<p align="justify">Yesterday, a customer asked me to look for trends within his BADMIFs folder and tell him if there were specific computers that were repeat offenders.&nbsp; This blog is about what I did to solve that request.&nbsp; Hopefully it will prove helpful for those of you who need to do the same thing.</p> <p align="justify"><strong>What are BADMIFs?</strong></p> <p align="justify">First a bit of context…what exactly are BADMIFs?&nbsp; In fact, what are MIFs?&nbsp; The acronym MIF stands for Management Information File and these files are used by SCCM clients to submit hardware inventory to their site’s database.&nbsp; When a MIF is submitted by a client, it is processed by the client’s chosen Management Point (MP) and if nothing is wrong with it, the data gets added to the ConfigMgr database.&nbsp; This happens all the time (depending on the frequency of hardware inventory in the environment) and usually there is no need to intervene or even be aware of this process.</p> <p align="justify">Sometimes, however, MIF files cannot be processed for one reason or another.&nbsp; In these cases, the MP will drop the MIF files into a folder called BadMifs.&nbsp; This is located within Inboxes\auth\dataldr.box\BadMifs and depending on how you’ve structured your ConfigMgr folders, it may be in different places on your MP.&nbsp; For example, on an MP that is remote from the Site Server itself, this may be located at&nbsp; C:\Program files\SMS_CCM\Inboxes\auth\dataldr.box\BadMifs.</p> <p><font color="#000000">Below is an example of what the BadMifs folder might look like in a production environment:</font></p> <p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_352DF40E.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_352DF40E.png"><img title="image" style="border-top:0px;border-right:0px;border-bottom:0px;border-left:0px;display:inline;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_thumb_748BA79E.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_thumb_5F00_748BA79E.png" width="212" height="196" /></a> </p> <p align="justify">Within the BadMifs folder, there will be subfolders indicating the sort of issue that the MIF file had.&nbsp; The purpose of this is to categorize the reasons for these files not being submitted in order to make analysis and troubleshooting easier.&nbsp; You can read about the different categories of subfolders that might be created in the BadMifs folder by reading <a href="https://blogs.technet.com/b/umairkhan/archive/2014/10/02/configmgr-2012-hardware-inventory-resync-internals.aspx" target="_blank">this excellent blog</a> by Umair Khan.</p> <p>One thing to note about MIFs that make their way into the BadMifs folder…just because you see files in here (maybe a lot of files here), this does not necessarily indicate there is a problem.&nbsp; Over time, you should expect to see MIFs fail to be processed and be placed in the BadMifs folder.&nbsp; For example, if a MIF is submitted after a delta sync has occurred and the ConfigMgr database does not have a record of the machine’s previous delta sync for some reason (maybe there was a network glitch for a short time, for instance, and the previous MIF never arrived), it will redirect the MIF to the BadMifs folder and request the client to send a full inventory.&nbsp; This is very normal and not an indication of a problem.&nbsp; I say this because I don’t want anyone reading this and deciding their environment has big problems when things are completely normal.</p> <p><font color="#ff0000"><strong><em>I’ll say it again…just because you have MIFs (maybe a lot of MIFs) in your BadMifs folders does not mean there is an issue.&nbsp; Yes, you want to take a look and see what’s up.&nbsp; But the presence of these files should not cause anyone to panic.</em></strong></font></p> <p>Now that we’ve gotten that out of the way, we can proceed.</p> <p><strong>Understanding MIFs</strong></p> <p>While it’s useful to explain what a MIF is, I always find it helpful to actually see what we’re talking about.&nbsp; To do this in my lab (don’t try this in production), I turned off my SQL Server so that my Site Server would not be able to submit the MIF to the database.&nbsp; If I hadn’t done that, I could see the MIFs appear and disappear too rapidly to do anything.</p> <p>If you are working in a lab environment and want to replicate what I’ve done, here are the steps:</p> <ol> <li>Turn off the SQL Server database.&nbsp; This might be stopping the SQL Server service or turning off the SQL VM itself.&nbsp; But regardless, do not attempt this in a production environment</li> <li>Open a ConfigMgr client and navigate to the Control Panel</li> <li>Open the Configuration Manager app and select the Action tab</li> <li>Choose Hardware Inventory Cycle and select ‘Run Now’</li></ol> <p>Below is a screenshot of the Configuration Manager app’s Actions tab</p> <p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_48DADDA2.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_48DADDA2.png"><img title="image" style="border-top:0px;border-right:0px;border-bottom:0px;border-left:0px;display:inline;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_thumb_4D53EF1A.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_thumb_5F00_4D53EF1A.png" width="361" height="428" /></a> </p> <p></p> <p>After clicking ‘Run Now’ navigate to the auth\dataldr.box folder and after a short time you should see a .MIF file appear, as the screenshot below shows:</p> <p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_7D119799.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_7D119799.png"><img title="image" style="border-top:0px;border-right:0px;border-bottom:0px;border-left:0px;display:inline;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_thumb_060129D9.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_thumb_5F00_060129D9.png" width="589" height="182" /></a> </p> <p>MIF files are readable with Notepad, so feel free to open it and have a look.&nbsp; Below is what the MIF from the screenshot above looks like when I open it:</p> <p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_1A1A4662.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_1A1A4662.png"><img title="image" style="border-top:0px;border-right:0px;border-bottom:0px;border-left:0px;display:inline;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_thumb_57AA34DC.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_thumb_5F00_57AA34DC.png" width="593" height="262" /></a> </p> <p>As can be seen, there is a great deal of information in a MIF (and much more than this screenshot can capture).&nbsp; This is the information that is destined for the ConfigMgr database.&nbsp; What interests us, however, is the computer name that I’ve highlighted in red.&nbsp; In this case, my computer is named PRI and I can see its name listed next to the NetBIOS Name above.&nbsp; This is how we tell which client submitted a particular MIF.</p> <p><strong>Conducting Large Scale Analysis of the BadMifs Folders</strong></p> <p>While it’s easy to look at a single MIF to identify the computer that submitted it, what if you’re working in an environment where there are hundreds or even thousands of MIFs in the BadMifs folders?&nbsp; I recently worked with a customer that had nearly 40,000 files in his BadMifs folders and we needed to determine whether there were certain computers that were producing all of the MIFs or if this was normal for his environment (and as of this writing, this does appear to be normal behavior).</p> <p>The rest of this blog describe the analysis process and shows how to identify which computers are submitting MIFs that end up in the BadMifs folders.&nbsp; Not only that, but I show a way to count the number of MIFs from each client.&nbsp; This is useful to determine if a specific computer is sending more than its share of MIFs into the BadMifs folders.</p> <p></p> <p></p> <p><em>Using PowerShell to Extract NetBIOS Names</em></p> <p>The first step in identifying whether there is a problem with certain clients is to identify all of the clients that have submitted bad MIFs to the BadMifs folders in the first place.&nbsp; If you have only a few of these, opening them manually might be fine.&nbsp; But if you have more than a few files to go through, this quickly becomes untenable.&nbsp; What’s needed is a programmatic way to extract these computer names.</p> <p>As I searched, I found a <a href="https://blogs.technet.com/b/andre_della_monicas_manageability_blog_-_configmgr/archive/2014/04/03/how-to-extract-netbios-name-from-badmif-files-on-configmgr-2012-using-log-parser-2-2.aspx" target="_blank">blog</a> that seems to do the trick with LogParser.&nbsp; However, since everything is going to PowerShell I wanted to see if I could find a similar script to extract these names using it instead of relying on additional software.&nbsp; I did a bit of searching around and found the following script that I tested and confirmed works great in my lab to extract the NetBIOS name from MIF files in every BadMifs folder:</p> <p>$ConfigMgrBoxPath = &quot;<font color="#ff0000">&lt;file path&gt;</font>&quot;<br />Get-ChildItem -Path $ConfigMgrBoxPath -Include *.MIF -Recurse -Force -ErrorAction SilentlyContinue | ForEach-Object { <br />&nbsp;&nbsp;&nbsp; $File = $_.FullName ;<br />&nbsp;&nbsp;&nbsp; try {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Get-Content -ReadCount 1 -TotalCount 6 -Path $_.FullName -ErrorAction Stop&nbsp; | <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Select-String -Pattern &quot;//KeyAttribute&lt;NetBIOS\sName&gt;&lt;(?&lt;ComputerName&gt;.*)&gt;&quot; -ErrorAction Stop <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ).Matches.Groups[-1].Value <br />&nbsp;&nbsp;&nbsp; } catch {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Write-Warning -Message &quot;Failed for $File&quot;<br />&nbsp;&nbsp;&nbsp; }<br />} <p>FULL DISCLOSURE: This is not my script.&nbsp; I found it <a href="https://p0w3rsh3ll.wordpress.com/2014/04/04/logparser-vs-powershell/" target="_blank">here</a> and have used it as part of my analysis.&nbsp; It does an excellent job of extracting the data I need, so hopefully others will find it useful as well.</p> <p>The results of running this script in my lab can be seen below:</p> <p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_0B722B2E.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_0B722B2E.png"><img title="image" style="border-top:0px;border-right:0px;border-bottom:0px;border-left:0px;display:inline;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_thumb_46C590EC.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_thumb_5F00_46C590EC.png" width="74" height="244" /></a> </p> <p>This list represents a series of MIFs I configured in my lab for this test.&nbsp; As can be seen, I have several instances of each device and there is no organization around it.&nbsp; The script above prints to the screen, so if I have a large number of computers, I may have difficulty grabbing them and manipulating them further.&nbsp; But at the outset, I can already use the script to manually review my list and see if anything jumps out.&nbsp; For my example, it seems that DM-AA is represented more than&nbsp; other devices, and this may bear some further scrutiny.</p> <p>If I am dealing with more than just this small list of machines (as we often are in a production environment), the output can easily be sent to a text file by adding the following at the end of the script above:</p> <p>| out-file –FilePath “&lt;file path&gt;”</p> <p>In my lab, the complete script looks like this:</p> <p>$ConfigMgrBoxPath = &quot;C:\Program Files\Microsoft Configuration Manager\inboxes\auth\dataldr.box\BADMIFS&quot;<br />Get-ChildItem -Path $ConfigMgrBoxPath -Include *.MIF -Recurse -Force -ErrorAction SilentlyContinue | ForEach-Object { <br />&nbsp;&nbsp;&nbsp; $File = $_.FullName ;<br />&nbsp;&nbsp;&nbsp; try {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Get-Content -ReadCount 1 -TotalCount 6 -Path $_.FullName -ErrorAction Stop&nbsp; | <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Select-String -Pattern &quot;//KeyAttribute&lt;NetBIOS\sName&gt;&lt;(?&lt;ComputerName&gt;.*)&gt;&quot; -ErrorAction Stop <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ).Matches.Groups[-1].Value <br />&nbsp;&nbsp;&nbsp; } catch {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Write-Warning -Message &quot;Failed for $File&quot;<br />&nbsp;&nbsp;&nbsp; }<br />} | out-file -FilePath &quot;c:\test\output.txt&quot; <p>One final note here…it is entirely possible to export the list of clients directly to a .csv or an Excel file.&nbsp; I have chosen to export to a .txt and then copy/paste the results into Excel.&nbsp; But there is no need to do this extra step unless it’s your preference.</p> <p><em>Parsing the Data</em></p> <p>Now that we’ve extracted the data, we want to work with it a bit to find out how many times each client name shows up in the list.&nbsp; As you can see, the list above is not in any particular order and while this may be fine for small environments, we’ll need a better way if we’re dealing with larger environments (or at least larger lists).</p> <p>I investigated various ways to parse the list of computers generated from the PowerShell script, but eventually came up with the following (and in my lab, I am using Excel 2013, though this same technique should work with earlier versions of Excel):</p> <ul> <li>We start by taking the list of clients and getting them into Excel (I copied/pasted out of my .txt file, but that’s certainly not the only way).&nbsp; I also added a header in Excel called Computers.&nbsp; The header becomes important in a later step.&nbsp; The resulting screenshot below shows this step:</li></ul> <p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_3B2FD3AD.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_3B2FD3AD.png"><img title="image" style="border-top:0px;border-right:0px;border-bottom:0px;float:none;margin-left:auto;border-left:0px;display:block;margin-right:auto;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_thumb_7683396B.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_thumb_5F00_7683396B.png" width="110" height="340" /></a> </p> <ul> <li>Select the entire column and navigate to the Insert option on the menu bar.&nbsp; From here, select Pivot Table.&nbsp; A pop-up box will appear as follows:</li></ul> <p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_11BB926D.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_11BB926D.png"><img title="image" style="border-top:0px;border-right:0px;border-bottom:0px;float:none;margin-left:auto;border-left:0px;display:block;margin-right:auto;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_thumb_73DD0E6B.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_thumb_5F00_73DD0E6B.png" width="414" height="320" /></a> </p> <ul> <li>In here, ensure the buttons in the screenshot are selected and click ‘OK’</li> <li>Another screen will open and on the right-hand side you will see the following (Note: your column header may be different depending on what you selected for the header of your column containing the computer names)</li></ul> <p align="center"><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_4EDF4DF2.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_4EDF4DF2.png"><img title="image" style="border-top:0px;border-right:0px;border-bottom:0px;border-left:0px;display:inline;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_thumb_49FC9A36.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_thumb_5F00_49FC9A36.png" width="307" height="362" /></a> </p> <ul> <li> <div align="justify">At this point, select the checkbox to the left of your column header (Computers, in my case) and also drag/drop the column header down to the Values area as shown below</div></li></ul> <p align="center"><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_7A2675AA.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_7A2675AA.png"><img title="image" style="border-top:0px;border-right:0px;border-bottom:0px;border-left:0px;display:inline;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_thumb_155ECEAC.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_thumb_5F00_155ECEAC.png" width="309" height="363" /></a> </p> <ul> <li> <div align="justify">After doing this, the left-hand side of the spreadsheet will populate with a count of each computer name (seriously, it’s almost like magic) as shown here</div></li></ul> <p align="center"><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_4992F7F2.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_4992F7F2.png"><img title="image" style="border-top:0px;border-right:0px;border-bottom:0px;border-left:0px;display:inline;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_thumb_3DFD3AB3.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_thumb_5F00_3DFD3AB3.png" width="244" height="153" /></a> </p> <p align="justify">Not only do we see a count of each computer that is in our list, we see the grand total telling us how many MIFs are located in our BadMifs folders in the first place.</p> <p align="justify">From here, you can copy the table and paste it else where if you want to manipulate it (I wanted to filter my list so I could see the computers showing up the most frequently at the top of my list, for instance).&nbsp; This is Excel 101 stuff and I won’t bore you with those details.&nbsp; But hopefully this technique proves useful if you ever find yourself having to answer questions about which computers are sending MIFs to the BadMifs folder (and how many times).</p> <p align="justify"><strong>Summary</strong></p> <p align="justify">This brief article’s purpose has been to show a technique I came up with to answer a very specific customer question.&nbsp; It seems to be the sort of question that might come up frequently enough that I felt it would be helpful to document it.&nbsp; Even if you’re not troubleshooting MIFs being sent to your BadMifs folders, it’s always a good idea to keep track of how many files are in your BadMifs folders.&nbsp; This technique should help in that effort.</p></p></p>]]></content:encoded>
    </item>
    <item>
      <title>Hardware Inventory – In-Depth (Part 1)</title>
      <link>https://docs.microsoft.com/archive/blogs/scotts-it-blog/hardware-inventory-in-depth-part-1</link>
      <pubDate>Thu, 23 Apr 2015 06:41:23 GMT</pubDate>
      <dc:creator><![CDATA[srachui]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.technet.microsoft.com/scotts-it-blog/2015/04/23/hardware-inventory-in-depth-part-1/</guid>
      <description><![CDATA[This week I worked with a customer who asked me several in-depth questions related to Hardware...]]></description>
      <content:encoded><![CDATA[<p>This week I worked with a customer who asked me several in-depth questions related to Hardware Inventory.&nbsp; I thought it might be useful to put my findings into this blog entry for the benefit of others who might find them beneficial.&nbsp; I want to start by thanking my colleague Clint who took the time to walk me through much of this information…the time was truly appreciated!</p> <p><strong>Tracing Hardware Inventory</strong></p> <p>Every ConfigMgr admin knows that the best way to figure out what’s happening within their hierarchy is to review the extensive log files available to them.&nbsp; We’ll start this blog with a walk-through of the relevant log files for Hardware Inventory.</p> <p>To start with, Hardware Inventory involves the client machine, its chosen Management Point, and the Site Server itself (and if the database is remote from the Site Server, the SQL Server is also involved to ensure that Hardware Inventory is put into the database).&nbsp; To walk through the process of conducting Hardware Inventory, we will take a look at the following logs:</p> <ul> <li>Client:  <ul> <li>InventoryAgent.log</li></ul> </li><li>Management Point:  <ul> <li>MP_Hinv.log</li></ul> </li><li>Site Server:  <ul> <li>Dataldr.log</li></ul></li></ul> <p>NOTE: If your Management Point resides on your Site Server, both the MP_Hinv.log and Dataldr.log files will be on the same machine, though in different directories.</p> <p>Before the client can ever begin to report its Hardware Inventory, it must receive a policy telling it to do so (and the frequency with which it’s expected to do so).&nbsp; Rather than repeat myself on how to configure Hardware Inventory for your clients in this blog, I’ll simply note that I discussed this in a previous blog and folks who are interested can review that information <a href="https://blogs.technet.com/b/scotts-it-blog/archive/2015/01/03/the-basics-of-client-inventory-in-system-center-configuration-manager-2012.aspx" target="_blank">here</a>. </p> <p>To get policies, the CCM client will have to be installed on the client machine which can be confirmed by looking in the Admin Console under Assets and Compliance\Devices.&nbsp; Ideally we want to see the following:</p> <p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_0457FEE7.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_0457FEE7.png"><img title="image" style="border-left-width:0px;border-right-width:0px;border-bottom-width:0px;display:inline;border-top-width:0px;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_thumb_3FAB64A5.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_thumb_5F00_3FAB64A5.png" width="579" height="129" /></a> </p> <p>Note here that the machine named ‘DC’ has the client installed and is marked as active.</p> <p>Once we have the client installed on the machine and it’s active (which means it’s sending in discovery information), the CCM client should receive policy from its chosen Management Point.&nbsp; If it’s necessary to know which MP the client is using, this can be determined by looking on the Configuration Management app in Control Panel as shown below:</p> <p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_21CCE0A4.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_21CCE0A4.png"><img title="image" style="border-left-width:0px;border-right-width:0px;border-bottom-width:0px;display:inline;border-top-width:0px;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_thumb_4AD77FA0.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_thumb_5F00_4AD77FA0.png" width="375" height="445" /></a> </p> <p>In my lab there is only a single MP, so the question of which Management Point my clients are using is a pretty simple one to answer.&nbsp; But if the site contains multiple MPs and it’s important to know which one is being used, this is a good technique to determine that.</p> <p>So now we have a client that is active and talking to its Management Point.&nbsp; This means it will get the policy telling it how often it needs to run Hardware Inventory (as well as what specific information it needs to gather and send).&nbsp; Once it receives the policy, the client will begin sending its Hardware Inventory and the log files should begin to reflect this.</p> <p><em><strong>Understanding Synchronization Types and Versioning</strong></em></p> <p>Each time a client sends in its Hardware Inventory, there are 3 possible ways it can do this:</p> <p></p> <ul> <li>Full Synchronization – this occurs the very first time the client sends in its Hardware Inventory.&nbsp; At this point, no inventory has ever been reported and the client must send everything ConfigMgr has asked for.  </li><li>Delta Synchronization – once a full sync has been processed, the client will always run delta syncs from that point on.&nbsp; This causes the client to send up any changes since the previous sync, but doesn’t burden ConfigMgr with the entire inventory sent during a full sync  </li><li>Re-Synchronization – this happens if ConfigMgr can’t process the delta sync for some reason and needs the client to re-sync all of its hardware inventory.&nbsp; An example of when this might happen is if one of the delta syncs failed to be processed.&nbsp; Each sync specifies a version # so that ConfigMgr knows where in the sequence it belongs.&nbsp; We can think of delta syncs like pages in a book.&nbsp; The delta sync will send the next page, but if ConfigMgr does not have the previous page it will realize it has incomplete data and request the client to send everything it has.&nbsp; The process of doing this is known as a re-sync, though functionally it’s essentially the same thing as a full sync</li></ul> <p>It’s very easy to determine what sort of sync is happening.&nbsp; All that’s needed it to look in InventoryAgent.log on the client and search for a line similar to the following:</p> <p><font color="#ff0000"><strong>Inventory: Action=Hardware, ReportType=Delta, MajorVersion=1, MinorVersion=1</strong></font></p> <p>Note that this line tells us it’s about inventory and the Action specifies that we’re looking at hardware inventory.&nbsp; The ReportType shows that the client is performing a delta synchronization and we can see both the MajorVersion and MinorVersion are 1 in this case</p> <p>To quickly clarify what is meant by MajorVersion and MinorVersion:</p> <ul> <li>MajorVersion – this value increments every time a full synchronization or a resync is run.&nbsp; As stated above, once the initial full synchronization occurs, all future syncs will be delta syncs unless there is a problem that causes ConfigMgr to ask for a resync.&nbsp; Note also that even if the specific policy for Hardware Inventory is changed (adding a new class to collect, for instance) the major version will not change.&nbsp; If you want to test this, there is a good link that walks you through forcing a full synchronization for hardware inventory.&nbsp; You can read about that <a href="https://blogs.technet.com/b/canitpro/archive/2013/09/04/step-by-step-forcing-a-full-hardware-inventory-for-sccm.aspx" target="_blank">here</a>.  </li><li>MinorVersion – every time a delta sync runs, the minor version is incremented.&nbsp; The only exception to this is when a resync runs and increases the major version, the minor version is reset to zero as shown below:</li></ul> <p>Delta before Resync:</p> <p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_45F4CBE4.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_45F4CBE4.png"><img title="image" style="border-left-width:0px;border-right-width:0px;border-bottom-width:0px;display:inline;border-top-width:0px;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_thumb_2C8CC8AA.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_thumb_5F00_2C8CC8AA.png" width="564" height="34" /></a> </p> <p>Delta after Resync:</p> <p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_2EC95166.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_2EC95166.png"><img title="image" style="border-left-width:0px;border-right-width:0px;border-bottom-width:0px;display:inline;border-top-width:0px;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_thumb_434EA0E4.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_thumb_5F00_434EA0E4.png" width="573" height="33" /></a> </p> <p>In our example below, we’ll be looking at a delta sync.&nbsp; But it’s good to understand the specifics of what we’re looking at, so hopefully this explanation is helpful.</p> <p><strong><em>Log File Review</em></strong></p> <p><u>InventoryAgent.log</u></p> <p></p> <p>The first log we want to look at when tracing hardware inventory is the InventoryAgent.log file.&nbsp; Here, we can see several interesting details about hardware inventory.&nbsp; Because the amount of data provided to us in a single hardware inventory cycle can be lengthy, I am taking the liberty of excerpting information to draw out specific points.</p> <p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_7782CA2A.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_7782CA2A.png"><img title="image" style="border-left-width:0px;border-right-width:0px;border-bottom-width:0px;display:inline;border-top-width:0px;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_thumb_528509B1.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_thumb_5F00_528509B1.png" width="590" height="133" /></a> </p> <p>Here we see the initiation of a hardware inventory cycle, which is denoted by the line saying ‘Start of message processing’.&nbsp; In this snippet, we can see several important things:</p> <ul> <li>The time that the inventory cycle started (this will be important later as we check to see how long it took inventory to run)  </li><li>The WMI store for the gathered hardware inventory (located in InventoryActionStatus class within the root\ccm\invagt namespace).&nbsp; In our case, we’re using store {00000000-0000-0000-0000-000000000001}  </li><li>The client is running hardware inventory (Action=Hardware)  </li><li>A full synchronization has only been run once, which is the initial time the client ran the inventory (MajorVersion=1)  </li><li>This is the 7th time a delta synchronization has run (MinorVersion=7)  </li><li>The classes being collected are enumerated, with two being listed in the screenshot above.&nbsp; Though the screenshot doesn’t show this, the fully query for the first line starting with ‘Collection: Namespace=’ is below:</li></ul> <p align="justify"><em>Collection: Namespace = \\.\root\cimv2; Query = SELECT __CLASS, __PATH, __RELPATH, Availability, Caption, Description, DeviceID, Drive, Manufacturer, MediaType, Name, SCSITargetId, SystemName, VolumeName FROM <font color="#0000ff">Win32_CDROMDrive</font>; Timeout = 60</em></p> <p>Note that Win32_CDROMDrive is in blue.&nbsp; This is the class being queried and we can see that this class was requested if we go into the Admin Console and navigate to Administration\Client Settings and open the Client Settings we are applying to our managed devices.&nbsp; By selecting Hardware Inventory from the list, look for the ‘Set Classes’ button and a pop-up will appear.&nbsp; In my lab machine, doing this shows me that I do include the Win32_CDROMDrive class as one of the classes I want to gather information on.&nbsp; The screenshot below illustrates this:</p> <p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_10812B21.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_10812B21.png"><img title="image" style="border-left-width:0px;border-right-width:0px;border-bottom-width:0px;display:inline;border-top-width:0px;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_thumb_08F5BBB4.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_thumb_5F00_08F5BBB4.png" width="452" height="392" /></a> </p> <p>Not only is the class selected, but by expanding it I can see which specific attributes of the class are of interest to me.</p> <p></p> <p>At this point, the hardware inventory should run, gathering data from every class we’ve asked the client to check.&nbsp; During this process, it may encounter errors as it attempts to check a class that is not relevant for it.&nbsp; This is not indicative of a problem, though in some environments the choice may be made to set up additional Client Settings policies in order to gather inventory only from classes that are relevant to the managed device being targeted.&nbsp; The choice is entirely optional.</p> <p>After inventory wraps up, InventoryAgent.log will show something like the following:</p> <p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_46F1DD23.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_46F1DD23.png"><img title="image" style="border-left-width:0px;border-right-width:0px;border-bottom-width:0px;display:inline;border-top-width:0px;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_thumb_663483F6.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_thumb_5F00_663483F6.png" width="608" height="170" /></a> </p> <p>This snippet represents the end of the hardware inventory cycle and we can see a few interesting things:</p> <ul> <li>The ending timestamp, which tells us that on my lab machine, hardware inventory took approx. 25 seconds.&nbsp; Note that because hardware inventory is set to the lowest possible priority, it will likely take considerably longer to run in a production environment.&nbsp; This is because hardware inventory is set to use CPU cycles only when other activities are not ongoing.&nbsp; </li><li>The temp report created (Temp report =)  </li><li>How long the Reporting Task took to complete (in our case 0.344 seconds)  </li><li>Whether the report was successfully sent or not (Successfully sent report. Destination:mp:MP_HinvEndpoint)</li></ul> <p>So we can see that the client ran inventory, how long it took, which classes it enumerated, and whether it sent its report successfully.&nbsp; At this point, we can have confidence that the client has done its part.&nbsp; Our next step is to check the MP to find out if it received what the client sent.</p> <p><u>MP_Hinv.log</u></p> <p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_0F3F22F3.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_0F3F22F3.png"><img title="image" style="border-left-width:0px;border-right-width:0px;border-bottom-width:0px;display:inline;border-top-width:0px;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_thumb_2A777BF4.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_thumb_5F00_2A777BF4.png" width="608" height="74" /></a> </p> <p>By looking on the Management Point (and if you have several MPs, you’ll need to locate the one your client is sending data to) and mapping the timestamp in InventoryAgent.log, we can see that MP_Hinv.log shows my client files arriving and being processed.</p> <p>In this snippet, we see a few things:</p> <ul> <li>The report being sent in was a delta report and was from the computer PRI (Delta report from client PRI)  </li><li>The .xml file from the client arrived in dataldr.box and was found to be hardware inventory (description = Hardware)  </li><li>The .xml was converted to a .MIF file for sending further on to the site server database  </li><li>The name of the MIF file being created (in this case HC3HFXZ1.MIF)</li></ul> <p>At the Management Point, it’s possible for the hardware inventory to fail to be added to the database for some reason.&nbsp; One of the most common is known as a Nonexistent Row.&nbsp; This can happen when the following occurs:</p> <ol> <li>Delta synchronization happens on the client  </li><li>It sends the .xml reporting the MajorVersion and MinorVersion (in this example, let’s say MinorVersion=7)  </li><li>The site server database notes that it never received the delta synchronization with MinorVersion=6, thus it is missing a row that corresponds with the previous delta sync  </li><li>The client is told to send a fully synchronization (a re-sync)</li></ol> <p>One of the interesting things about hardware inventory is how bad MIF files are categorized.&nbsp; Depending on the reason that a MIF is rejected (as in the Nonexistent Row example), a folder will be created on the MP within the inboxes\auth\dataldr.box\BADMIFS folder structure.&nbsp; The screenshot below from my lab shows a sub-folder that was created when one of my clients began presenting bad MIF files.&nbsp; If MIFs cannot be processed for a different reason and must be placed in this folder structure, additional sub-folders will be created to indicate why the MIF was not processed.</p> <p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_45AFD4F5.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_45AFD4F5.png"><img title="image" style="border-left-width:0px;border-right-width:0px;border-bottom-width:0px;display:inline;border-top-width:0px;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_thumb_5C057A3A.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_thumb_5F00_5C057A3A.png" width="600" height="242" /></a> </p> <p>Within this folder will be the MIFs that were rejected, and it’s often helpful to review them (you can open them with notepad) to see the reason for the problem.&nbsp; For further information about BADMIFs errors, a very helpful blog article by Umair Khan goes into some depth.&nbsp; That article can be found <a href="https://blogs.technet.com/b/umairkhan/archive/2014/10/02/configmgr-2012-hardware-inventory-resync-internals.aspx" target="_blank">here</a>.</p> <p><u>Dataldr.log</u></p> <p>In our case, there was no error when submitting hardware inventory, so the next place to look is the Dataldr.log file.&nbsp; As I mentioned above, this file is located on the site server itself even if the MP is on another machine.&nbsp; The following snippet shows the next step in the process of submitting hardware inventory:</p> <p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_5E4202F6.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_5E4202F6.png"><img title="image" style="border-left-width:0px;border-right-width:0px;border-bottom-width:0px;display:inline;border-top-width:0px;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_thumb_3FF74C00.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_thumb_5F00_3FF74C00.png" width="608" height="236" /></a> </p> <p>Note that in the snippet above, I have highlighted the line starting with “Moving MIF file”.&nbsp; The full content for that line is listed in the gray window at the bottom of the screenshot.</p> <p>Looking at this, we can see a number of interesting things:</p> <ul> <li>At 12:18:49, Data Loader checked to see if any MIFs needed to be processed.&nbsp; It found one and moved it to the dataldr.box\process subfolder  </li><li>It started a worker thread and indicates “Blocking until completion”.&nbsp; This indicates that the table or tables in the ConfigMgr database that are being updated have been reserved exclusively for this process.&nbsp; Anything else attempting to update this table during this interval will have to wait its turn  <ul> <li>Blocking is a very common concept in SQL.&nbsp; Sometimes it can be a problem, but in this case blocking is quite normal.&nbsp; If you are interested in further information about blocking, you can check out <a href="https://support.microsoft.com/en-us/kb/224453/" target="_blank">this link</a>.</li></ul> </li><li>We can see that the version of hardware inventory being processed is 1.7 and when it was generated.&nbsp; Version 1.7 directly maps to the MajorVersion and MinorVersion that we discussed above.&nbsp; In this case, it’s MajorVersion=1 and MinorVersion=7  </li><li>We see the process of adding the inventory information to the database starting (Begin transaction), successfully committing the information (Commit transaction), and then we see it remove the block from the database table (Don blocking until completion)  </li><li>We see that no more MIFs need to be processed, and finally we see that Dataldr indicates it’s done processing the MIF</li></ul> <p><em><strong>Locating Hardware Inventory in the ConfigMgr Database</strong></em></p> <p>At this point, we have a complete chain from the client all the way to the database itself.&nbsp; As to which table is updated, there are many different tables that contain the hardware inventory data.&nbsp; Everything is not deposited into one table, but is distributed based on the information provided.&nbsp; The following is an example of how we can locate the information on the processor being used by our test machine.</p> <p><strong><font color="#ff0000">NOTE: The following information is offered to help in understanding this process.&nbsp; You should never make changes in your database unless guided to do so by a Microsoft engineer.&nbsp; Always back up your SQL database and ensure it is recoverable before making any changes to it.</font></strong></p> <p><font color="#000000">To start with, we need to find the Machine ID for our client.&nbsp; To do this, we can run the following query against the system_DISC table in the ConfigMgr database:</font></p> <p align="center"><font color="#000000">select ItemKey, Name0 from system_DISC where Name0 = ‘<em>&lt;computer name&gt;’</em></font></p> <p align="justify"><font color="#000000">In our case, the computer name is ‘PRI’ so we end up with the following result:</font></p> <p align="justify"><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_4902356C.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_4902356C.png"><img title="image" style="border-left-width:0px;border-right-width:0px;border-bottom-width:0px;display:inline;border-top-width:0px;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_thumb_2B23B16B.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_thumb_5F00_2B23B16B.png" width="164" height="98" /></a> </p> <p align="justify">As it happens, the ItemKey value in system_DISC is the Machine ID we will need when checking the other tables to find out our Processor information.</p> <p align="justify">Now that we have this, we need to find the table where the Processor information is held.&nbsp; In ConfigMgr, there is a table known as Groupmap that identifies the tables where we can locate our desired information.&nbsp; By running the following query, we can locate the table we’re interested in:</p> <p align="center">select * from dbo.groupmap where SpecificTableName like &#39;%Processor%&#39;;</p> <p align="justify">Running this, we get the following result:</p> <p align="justify"><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_4D7B46E4.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_4D7B46E4.png"><img title="image" style="border-left-width:0px;border-right-width:0px;border-bottom-width:0px;display:inline;border-top-width:0px;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_thumb_7685E5E0.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_thumb_5F00_7685E5E0.png" width="563" height="90" /></a> </p> <p align="justify">Note that the specific table name is Processor_DATA.&nbsp; Now that we have this, we can query it for our information.&nbsp; The following query will get us what we need:</p> <p align="center">select MachineID, TimeKey, Manufacturer00, Name00 from Processor_DATA where MachineID = &#39;<em>&lt;MachineID&gt;</em>&#39;;</p> <p align="justify">At this point, we will need to enter the ItemKey value from the system_DISC query since this value is the MachineID of our client and will allow us to bring up the information we care about.&nbsp; Doing this generates the following result:</p> <p align="justify"><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_71A33224.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_71A33224.png"><img title="image" style="border-left-width:0px;border-right-width:0px;border-bottom-width:0px;display:inline;border-top-width:0px;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_thumb_18051570.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_thumb_5F00_18051570.png" width="557" height="92" /></a> </p> <p align="justify">I have selected only a couple of columns here and certainly more are available.&nbsp; But what we can see from my chosen query is:</p> <ul> <li> <div align="justify">The MachineID that maps to our chosen client (PRI, in this case)</div> </li><li> <div align="justify">The TimeKey indicating when this information was successfully added to the database</div> </li><li> <div align="justify">The manufacturer and name of the processor this client machine is using</div></li></ul> <p align="justify">As I say, this information is good to know.&nbsp; But you should never dig around in the database or make modifications to it unless there is an important reason to do so.&nbsp; And if you’re going to make a change, wait for someone from Microsoft to give you direction before you do (and ALWAYS make sure you have a verified healthy backup before you do anything).</p> <p align="justify"><em><strong>Using Resource Explorer</strong></em></p> <p align="justify">So is there a better way to get this information than going to the database?&nbsp; The answer is ‘yes’.&nbsp; ConfigMgr provides a very robust (and safer) method to gather hardware information for any managed device.&nbsp; To get the information we need, all we have to do is nagivate in the Admin Console to Assets and Compliance\Devices and select the client we are interested in.</p> <p align="justify">Right-click the managed device and choose Start\Resource Explorer as shown below:</p> <p align="justify"><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_4C20783A.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_4C20783A.png"><img title="image" style="border-left-width:0px;border-right-width:0px;border-bottom-width:0px;display:inline;border-top-width:0px;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_thumb_324C420B.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_thumb_5F00_324C420B.png" width="492" height="272" /></a> </p> <p align="justify">By opening Resource Explorer, we can se a consolidated list of all the hardware inventory information gathered about this client.&nbsp; Below, I’ve chosen to look up the processor information (the same information we looked for in the database above).&nbsp; As we can see, we get the same information:</p> <p align="justify"><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_3B3BD44A.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_3B3BD44A.png"><img title="image" style="border-left-width:0px;border-right-width:0px;border-bottom-width:0px;display:inline;border-top-width:0px;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_thumb_442B6689.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_thumb_5F00_442B6689.png" width="594" height="440" /></a> </p> <p align="justify">The moral of the story is that we never need to look in the database itself for hardware inventory information.&nbsp; It’s nice to know it’s there.&nbsp; But ConfigMgr gives us a way to see all of this information from the Admin Console and that’s how we should be doing it.</p> <p align="justify"><strong>Summary</strong></p> <p align="justify">In this blog (which will be the first of two parts), I have walked through the process of tracing hardware inventory from a client, through its Management Point, and finally shown the inventory being added to the ConfigMgr database on the site server.&nbsp; Hardware inventory is a very important component of what ConfigMgr does and understanding this process is important for engineers tasked with running a healthy infrastructure.</p> <p align="justify">In the next part of this series, I’ll talk about how we can learn (and configure) when hardware inventory will run.&nbsp; Much of the confusion around hardware inventory deals with a lack of information on when clients should run and will run inventory.&nbsp; I hope to clear this up a bit, and also provide some guidance to those who might need to customize how hardware inventory is processed in their environment.</p>]]></content:encoded>
    </item>
    <item>
      <title>AD DS: Group Policy Basics - Part 3: How Clients Process GPOs</title>
      <link>https://docs.microsoft.com/archive/blogs/scotts-it-blog/ad-ds-group-policy-basics-part-3-how-clients-process-gpos</link>
      <pubDate>Tue, 17 Mar 2015 11:48:35 GMT</pubDate>
      <dc:creator><![CDATA[srachui]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.technet.microsoft.com/scotts-it-blog/2015/03/17/ad-ds-group-policy-basics-part-3-how-clients-process-gpos/</guid>
      <description><![CDATA[So now that we&#39;ve investigated the structure of a GPO and looked at how clients know which GPOs...]]></description>
      <content:encoded><![CDATA[<p>So now that we&#39;ve investigated the structure of a GPO and looked at how clients know which GPOs to apply, it&#39;s time to look at how they apply them.&nbsp; For a client to know which GPOs are assigned to it, and in which order it should apply them, the client needs to check several things:  <ul> <li>Whether its own Local GPO is configured with settings it should apply  </li><li>Which site it belongs to (for site-level policies)  </li><li>Which domain it belongs to (for domain-level policies)  </li><li>Where in the OU structure it resides (for OU policies)</li></ul> <p>As we said previously, the client identifies which GPOs are assigned to it from within Active Directory by looking at the gPLink attribute of the various containers where it belongs.&nbsp; From the gPLink attribute on each of its container objects, the client is able to assemble a list of the GPOs it will need to apply, including the order it should apply them (based on location of the GPO, filtering, and Enforcement/Blocking rules).&nbsp; The <a href="https://blogs.technet.com/b/scotts-it-blog/archive/2015/02/28/ad-ds-group-policy-basics-part-2-understanding-which-gpos-to-apply.aspx">previous post</a> in this series discussed these things, so I&#39;ll refer you there for further explanation.  <p>Once the client has its list of GPOs, it checks the Group Policy Container (GPC) in Active Directory for each one and gets information on where the GPO contents can be located.&nbsp; You&#39;ll remember that the GPO contents are located in the Group Policy Template (GPT) within the SYSVOL share.&nbsp; The first time the client does this, it has all new policies to apply and will go through each to apply what&#39;s needed.&nbsp; But a client doesn&#39;t just apply a GPO once and never again.&nbsp; It&#39;s an ongoing process.&nbsp; With that in mind, we need to understand how GPO Processing works on an ongoing basis.  <p><strong>GPO Versions</strong>  <p>As I said above, a client doesn&#39;t just process a GPO once and never again.&nbsp; It will continually check to see if there are any changes in those GPOs assigned to it (or if there are new GPOs, GPOs that have been removed, etc.).&nbsp; The way a client knows whether it has new settings to apply is through a GPO&#39;s version number.&nbsp; Every change that is put into a GPO causes its version number to increase.&nbsp; If a client checks the GPO and sees that there is a newer version number than the one it is aware of, that GPO is processed.  <p>To see the GPO version numbers, you can look in several places.&nbsp; First, the GPMC contains the information as shown below:  <p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_0492B0C6.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_0492B0C6.png"><img title="image" style="border-left-width:0px;border-right-width:0px;border-bottom-width:0px;display:inline;border-top-width:0px;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_thumb_6CFB0352.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_thumb_5F00_6CFB0352.png" width="576" height="404" /></a>  <p>You can see from this screenshot that there is a different version for the User and Machine nodes.&nbsp; This allows clients to decide on which of the nodes the changes have occurred so it only processes the necessary portions of the policy (and also, if the client is a user or a group it likely won&#39;t have any use for the Machine node policies).  <p>The GPMC also records the SYSVOL version number as well as the AD version number.&nbsp; This can be very important in troubleshooting.&nbsp; If the AD portion (the GPC) of the GPO is showing one version number and the portion of the GPO in SYSVOL (the GPT) is showing another, this means the GPO is not fully synchronized and the client may be applying the wrong settings.&nbsp; Under Windows 2000, a GPO wouldn&#39;t even apply if these version numbers were different.&nbsp; This produced some problems, so starting with Windows 2003 a GPO will still apply if the AD and SYSVOL versions are different.&nbsp; But this doesn&#39;t change the fact that we always want these to be as much in sync as possible.&nbsp; As for why they may be out of sync, it&#39;s possible that this is only due to replication latency.&nbsp; We&#39;ll discuss that in a moment.  <p>Another way to see the version of a GPO is to look within the GPC itself.&nbsp; In the following screenshot I&#39;ve used ADSI Edit to navigate to the System/Policies container of my domain and I&#39;ve selected one of my GPOs and opened its properties.&nbsp; Here is what it shows me:  <p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_63A1CECF.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_63A1CECF.png"><img title="image" style="border-left-width:0px;border-right-width:0px;border-bottom-width:0px;display:inline;border-top-width:0px;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_thumb_60FBA3CF.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_thumb_5F00_60FBA3CF.png" width="588" height="391" /></a>  <p>As you can see, there is a <em>versionNumber</em> attribute for the GPO (you need to look at the GPO itself and not the machine or user nodes).&nbsp; You can see that the number is a fairly large one.&nbsp; In this case it&#39;s ‘131078’.&nbsp; But I know that if I look at the GPO version for this same GPO through the GPMC I&#39;ll see the following:  <p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_5E5578CF.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_5E5578CF.png"><img title="image" style="border-left-width:0px;border-right-width:0px;border-bottom-width:0px;display:inline;border-top-width:0px;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_thumb_76E5161F.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_thumb_5F00_76E5161F.png" width="358" height="75" /></a>  <p>Why this difference?&nbsp; The difference is that in ADSI Edit, you&#39;ll see the raw information that is interpreted before it&#39;s displayed in the GPMC.&nbsp; This is also the information you see displayed in LDP if you choose to use that tool, as shown below:  <p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_400AC1D9.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_400AC1D9.png"><img title="image" style="border-left-width:0px;border-right-width:0px;border-bottom-width:0px;display:inline;border-top-width:0px;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_thumb_691560D5.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_thumb_5F00_691560D5.png" width="538" height="280" /></a>  <p>So how do we interpret the <em>versionNumber</em> ourselves?&nbsp; Surprisingly it&#39;s pretty simple.  <p>First, <em>versionNumber</em> represents both the User and Machine node version numbers.&nbsp; The <em>versionNumber</em> attribute `contains a 32-bit number stored as a decimal.&nbsp; The way this single number stores both version numbers is for it to store the User node as the first 16 bits and the Machine node as the last 16 bits.&nbsp; This can be represented as follows:  <p><em><font color="#0000ff"><strong>versionNumber = {User Node: upper 16 bits}{Machine Node: lower 16 bits}</strong></font></em>  <p>To actually see the numbers the way that they are represented by the GPMC, you can take the following steps:  <ol> <li>Convert <em>versionNumber</em> to a hexadecimal number (you can easily do this with a scientific calculator)  </li><li>Take the first four digits of your converted number as your User version and the final four digits as your Machine version (if necessary, append the number with leading zeros until you get 8 digits)  </li><li>Convert each of these four-digit segments back to decimal separately  </li><li>The resulting number will be the version number you see in the GPMC.</li></ol> <p>Based on the versionNumber of 1313078, I can see the following using the built-in calculator tool:</p> <p>First I start with 131078 represented in decimal:</p> <p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_3162A6A5.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_3162A6A5.png"><img title="image" style="border-left-width:0px;border-right-width:0px;border-bottom-width:0px;display:inline;border-top-width:0px;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_thumb_4C9AFFA6.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_thumb_5F00_4C9AFFA6.png" width="448" height="300" /></a> </p> <p>Then I convert this to hexadecimal (notice that the leading zeroes are missing so I need to pad the number out until I get ‘00020006):</p> <p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_0377E49E.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_0377E49E.png"><img title="image" style="border-left-width:0px;border-right-width:0px;border-bottom-width:0px;display:inline;border-top-width:0px;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_thumb_37AC0DE4.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_thumb_5F00_37AC0DE4.png" width="444" height="294" /></a> </p> <p>From here, I take each number (0002 for the User-side version of the policy and 0006 for the Computer-side version) and convert them back to decimal.&nbsp; In my case because I’m working in a lab environment the numbers convert back to 2 and 6 respectively.&nbsp; But this won’t typically be the case in a production environment.</p> <p><em>NOTE: The versionNumber attribute will only show you the version number of the part of the GPO stored within the GPC.</em>  <p>As just noted, the <em>versionNumber</em> attribute won&#39;t show the version number as reflected in the GPT (which will be the version from the perspective of the GPO content that’s replicated by DFS-R in SYSVOL).&nbsp; For this, we need to look within the Group Policy Template itself.&nbsp; When looking there, we also need to drill down to the GPO that interests us.&nbsp; In our case, we want the following GPO (found in C:\Windows\SYSVOL\sysvol\cert.local\policies):  <p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_409BA023.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_409BA023.png"><img title="image" style="border-left-width:0px;border-right-width:0px;border-bottom-width:0px;display:inline;border-top-width:0px;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_thumb_503E3BE5.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_thumb_5F00_503E3BE5.png" width="595" height="420" /></a>  <p>Here we will find a file called GPT.INI.&nbsp; This is the file responsible for recording the version number of the GPO from the perspective of the GPT (or, if you prefer, from the perspective of SYSVOL).&nbsp; GPT.INI is a very simple file as you can see from this screenshot:  <p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_7FFBE464.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_7FFBE464.png"><img title="image" style="border-left-width:0px;border-right-width:0px;border-bottom-width:0px;display:inline;border-top-width:0px;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_thumb_02386D21.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_thumb_5F00_02386D21.png" width="374" height="315" /></a>  <p>As you can see, the GPT.INI file tells us that the version of the GPO from its perspective is also 131078.&nbsp; It should not be surprising to learn that this number represents both the User and Machine node version number in the same way it did within the GPC, or that you should follow the same procedure to convert this number to see what the version number is for each node.  <p>In fact, even if you don&#39;t convert this number, just the fact that it agrees with the <em>versionNumber</em> attribute in the GPC is a very good sign.&nbsp; It tells us that the GPO from the perspective of SYSVOL is the same as it is from the perspective of AD.  <p><strong>AD Replication/FRS Replication</strong>  <p>I mentioned earlier that the GPC and GPT might be out of sync when it comes to GPO Version number.&nbsp; While this could mean that you have a problem in your environment, this isn&#39;t necessarily the case.&nbsp; The reason is that SYSVOL and AD replicate in different ways and at different times.&nbsp; Going into a full discussion of these two types of replication would take a long time and is beyond the scope of our present discussion.&nbsp; Instead, I&#39;ll just give a brief thumbnail of each.  <p><em>FRS Replication</em>  <p>FRS uses a form of replication known as change notification.&nbsp; Within SYSVOL, if a change is made to a file the underlying mechanism notifies its partners 3 seconds after the change is made and the partner immediately begins requesting those changes.&nbsp; For this reason, the GPT content should be replicated very quickly between Domain Controllers after you&#39;ve made a change to a GPO.  <p><em>AD Replication</em>  <p>In contrast to FRS Replication, the replication engine responsible for Active Directory is schedule-based.&nbsp; Depending on whether the Domain Controllers receiving updates are within your Active Directory site or not, replication can take awhile.&nbsp; Within Active Directory, there are two types of replication.&nbsp; These are known as Intrasite and Intersite.  <p>When two Domain Controllers belong to the same Active Directory site, replication will be quite fast.&nbsp; A change on one DC will begin replicating 15 seconds later to other DCs within the same site.&nbsp; With DCs in remote sites, the default wait period before replicating a change is 3 hours, though this can be configured and shortened to as little as 15 minutes.  <p>So what does this mean for your client attempting to process a GPO?&nbsp; If it belongs to the same site as the Domain Controller (typically the PDC Emulator) where the GPO was configured, it will most likely get the latest version of both the GPC and the GPT at nearly the same time.&nbsp; If, on the other hand, it belongs to a remote site, it may attempt to process its GPOs before both the GPT and GPC are fully updated.&nbsp; In Windows 2000, GPOs that weren&#39;t fully synchronized were not processed, but beginning with Windows 2003 that was no longer the case.&nbsp; But if your client isn&#39;t getting all of the settings you expect them to, this could potentially be one of the reasons why.  <p><em>NOTE: Intersite replication latency is one of the reasons to limit the number of your Active Directory sites and only build a new site when it&#39;s necessary.&nbsp; Sites are well-connected groupings of computers and as long as you have sufficient bandwidth, it makes sense to leave them all within one site.&nbsp; The only time you&#39;ll typically want to create a new site is if you have a slower WAN link that the data must traverse, or if you have a special business need to replicate data only at specifically scheduled intervals.</em>  <p>A good article that goes into depth about Active Directory replication can be found <a href="https://technet.microsoft.com/en-us/library/cc755994%28v=ws.10%29.aspx#w2k3tr_repto_how_bwzg">here</a>.  <p><strong>Clients and GPOs – Comparing Version Numbers</strong> <p>So now we know how GPOs store version numbers and a bit about how that information is replicated throughout your Active Directory infrastructure.&nbsp; But the question that still remains to be answered is &quot;how does a client know if its copy of the GPO is older than the current one?&quot;&nbsp; We know it&#39;s tied to version numbers, but how does the client even know if it has the current version number?&nbsp; Where does it maintain this information?&nbsp; For the client to know whether it&#39;s processed a particular version of a GPO already, it needs to have its own copy of the GPO version to reference.  <p>To see the GPOs that your client is currently aware of as well as the versions it has applied of each, you will need to look at the following location in its registry:  <p><em>HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Group Policy\State</em>  <p>Within this registry key, you&#39;ll see two nodes.&nbsp; These are:  <ul> <li>Machine - this key contains the GPOs that apply machine-side settings to your client  </li><li>User SID - this key is the user&#39;s security identifier and contains the GPOs that apply user-side settings to your client</li></ul> <p>Both the Machine and SID keys have a node called GPO-List.&nbsp; Within this key you&#39;ll find a listing of every GPO that has been applied.  <p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_366C9667.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_366C9667.png"><img title="image" style="border-left-width:0px;border-right-width:0px;border-bottom-width:0px;display:inline;border-top-width:0px;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_thumb_460F3229.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_thumb_5F00_460F3229.png" width="591" height="307" /></a>  <p>In this screenshot, you can see that the Machine node has 5 GPOs listed under its version of GPO-List.&nbsp; The expanded User SID does as well.&nbsp; By looking at the details of one of the GPOs in the Machine node&#39;s list, you can see that a great deal of information is available about that GPO, including its DisplayName, the GPO ID, etc.&nbsp; What interests us, however, is the Version value.&nbsp; This value works much like the Version number as seen through ADSI Edit or within the GPT.INI file.&nbsp; However, as you can see, it also does the first step for us by converting the decimal number to hexadecimal.  <p>In the case of the Version value, what you see is not the user node and machine node version.&nbsp; Instead, you see the GPT and GPC versions.&nbsp; In this case, the first four digits record the version as found in the GPT and the last four digits reference the GPC&#39;s version.  <p>Looking at the information from the screenshot above, we see the following:  <p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_0EC8AAEE.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_0EC8AAEE.png"><img title="image" style="border-left-width:0px;border-right-width:0px;border-bottom-width:0px;display:inline;border-top-width:0px;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_thumb_31204067.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_thumb_5F00_31204067.png" width="578" height="176" /></a>  <p>Looking at this, we can see that the most recent version of this GPO that has been applied on the client is version 12 of both the GPT (the first 4 digits of the hexadecimal number) and GPC (the last 4 digits of the hexadecimal number).&nbsp; If it checks again and finds that the machine node of the GPO is still at version 4, it will know that no changes have been made and it won&#39;t need to process anything.  <p><em>NOTE: There is one caveat when it comes to processing security settings, since these will always be processed again after a defined interval regardless of whether a change has occurred.&nbsp; This is to make sure no one has made any manual security changes that were enforced by the GPO, but which have been undone by a malicious or unwitting user or application.&nbsp; More on this is discussed under the next section.</em>  <p><strong>Foreground and Background Processing</strong> <p>There are several different ways that a client will process GPOs, and different parts of the GPO will be applied depending on what type of processing is happening.  <p>The two types of processing are known as Foreground and Background processing.&nbsp; These are defined below:  <ul> <li><u>Foreground Processing</u> - occurs during computer startup/shutdown and user login/logoff.&nbsp; All policies are processed during this time.  </li><li><u>Background Processing</u> - occurs at a regular interval in the background while the computer is online.&nbsp; The processing interval is 90 minutes + up to 30 minutes offset (in other words, every 90 - 120 minutes) for client machines and every 5 minutes on Domain Controllers (due to the need for DCs to have a higher level of security).</li></ul> <p>To understand how it may impact what you see when applying policies in your environment, a bit of history is necessary.&nbsp; When Windows 2000 came out, GPOs actually were processed differently than they are today.&nbsp; Every time the computer started up, it would go through the following process:  <ul> <li>Apply any local settings configured in its local GPO  </li><li>Contact its Domain Controller in Active Directory and learn which Site, Domain and OU it belonged to  </li><li>Pull any GPOs linked to those locations and process them in the order previously described  </li><li>When the machine policies were finished applying, the Ctrl+Alt+Delete logon prompt was presented to the user  </li><li>When the user logged in, the same process repeated to check where the user object was located, discover which policies were linked to that location, and process those GPOs in the standard order</li></ul> <p>From the standpoint of knowing what&#39;s happening during login and making sure that the correct settings are being applied, this was very clean.&nbsp; However, customers complained about slow logon times, so changes were made starting with Windows XP:  <ol> <li>If the computer is booting for the first time and and this is the user’s initial login to an Active Directory domain, it processes GPOs as mentioned above.&nbsp; This is known as <em>initial startup</em>.&nbsp; During this time, the client locates all GPOs it needs to apply and pulls every setting that is needed, applying them synchronously.&nbsp; By synchronously, I mean that the settings are applied before clients are allowed to logon.  </li><li>After the initial startup, processing of GPOs occurs in the background only.&nbsp; Even when you&#39;re restarting your computer, it won&#39;t go through the initial startup phase as it did the first time.&nbsp; Instead, it will process any GPO changes it finds asynchronously (after the user has been allowed to login).&nbsp; This allows the user to log in faster (known as <em>Fast Boot</em>), but it may also result in policies not applying as quickly as you need.</li></ol> <p>There are some categories of Group Policy that only apply during Foreground processing.&nbsp; These are:  <ul> <li>Logon/Logoff and Startup/Shutdown scripts  </li><li>Folder Redirection  </li><li>Software Installation  </li><li>Disk Quotas</li></ul> <p>The logic behind these categories not applying during background refresh is solid.&nbsp; Imagine if you were logged on and using a piece of software, but your administrator decided to swap it for another version.&nbsp; If this new version were to be automatically pushed to your desktop during background processing, it might corrupt the files you were working on.&nbsp; For reasons like these, the settings listed above are only applied during Foreground processing.  <p>The problem is that, as I said above, after initial startup the first time you log into your new device, there won&#39;t be any foreground processing.&nbsp; So how do these settings ever get applied.&nbsp; What happens is that when one of these settings must be applied, your client will switch briefly to allow foreground processing until these settings are applied.&nbsp; The way it happens can be a bit confusing, so let me describe it briefly:  <ol> <li>When a GPO is processed, your client checks to see whether any settings have been configured which require foreground processing.  </li><li>If it finds any of these settings configured, it makes a note of this and schedules these settings to be applied the next time the client reboots or logs in (depending on what is required for the particular setting)  </li><li>The next time a startup or login occur, the settings identified are processed using foreground processing rules</li></ol> <p>What this means is that in order for some settings to apply, it may take 2 or even 3 restarts to your system.&nbsp; This can be confusing and certainly may be painful in your environment (getting your client to boot faster seems to have its price!).  <p>You can make a change on your clients to cause them to use the old Windows 2000 way of processing GPOs.&nbsp; This will eliminate the need for multiple reboots to get a setting to apply, but it could also slow down your users&#39; login time and result in complaints.&nbsp; The way to make this change is described below.  <ol> <li>Create a new GPO or edit an existing one (it will need to be linked to either the Domain, Site or OU where your targeted clients can be affected).  </li><li>Within the GPMC Editor, expand the Computer Configuration Node and go to Policies/Administrative Templates/System/Logon  </li><li>Within the Logon settings, choose <em>Always wait for the network at computer startup and logon</em>.  </li><li>Enable this setting to cause your clients to process GPOs synchronously at startup/logon</li></ol> <p>This screenshot gives you an idea of what you should see when you&#39;re configuring this setting:  <p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_19F4C5E9.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_19F4C5E9.png"><img title="image" style="border-top:0px;border-right:0px;border-bottom:0px;border-left:0px;display:inline;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_thumb_00208FBA.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_thumb_5F00_00208FBA.png" width="588" height="379" /></a>  <p>To confirm what this setting does, check out the details of this setting by double-clicking it.&nbsp; Below is a screenshot of what this looks like in my lab (as can be seen, the description of the GPO specifies the potential need for multiple reboots to apply certain policy settings): <p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_11FFB438.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_11FFB438.png"><img title="image" style="border-top:0px;border-right:0px;border-bottom:0px;border-left:0px;display:inline;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_thumb_36279F78.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_thumb_5F00_36279F78.png" width="584" height="536" /></a>  <p><em>NOTE: If you decide to make this change, it&#39;s a good idea to test it in a lab first so that you know how much slower your login times are likely to be.&nbsp; There are new tools that allow you to assess the time it takes to process GPOs on a client device.&nbsp; Look for details on that in a future blog post, or if you prefer take a look at the Group Policy Results component of GPMC (this requires either Windows 2012 or Windows 8)</em> <p><strong>Security Settings in GPOs</strong>  <p>One final note about GPO processing is important before we move on.&nbsp; Though I&#39;ve already mentioned that your client will only apply GPO settings if they&#39;ve been changed (why apply something that hasn&#39;t been changed, after all?), there is one exception and this is Security settings in your GPOs.&nbsp; Microsoft recognizes that unscrupulous people may be able to get onto a client or server machine and manually undo the security settings your GPO has put in place.&nbsp; In this case, the GPO will not have changed, and if the client only updates GPOs when they&#39;ve changed, this could leave the bad guys in charge of your client or server.  <p>To prevent this from happening, all security settings in GPOs are re-applied at a regular interval even if they haven&#39;t changed.&nbsp; This enforcement mechanism is used to protect clients and servers by re-applying security settings that may have been undone in the meantime.&nbsp; The refresh interval for client machines is every 16 hours, and for Domain Controllers it&#39;s every 5 minutes (due to the heightened security concerns when it comes to DCs).&nbsp; You can configure this mandatory refresh interval, but unless you have a compelling reason to do so it&#39;s probably better to leave it at the defaults.  <p><em>NOTE: There will be times when you need to update a GPO immediately on a client.&nbsp; In these cases, Microsoft provides a tool called GPUpdate to allow for this.&nbsp; On Windows 2012, it’s also possible to right-click a node in the GPMC and select ‘Group Policy Update’ which causes GPUpdate /force to be run at every device within the scope of the node you’ve selected.&nbsp; These tools are discussed in more depth at the end of this post.</em>  <p><em>Client-Side Extensions (CSEs)</em>  <p>Now we&#39;ve reached the final point.&nbsp; We know how clients identify which GPOs belong to them.&nbsp; We know how they process GPOs (and how often).&nbsp; Now we just need to know how they take the information in the GPOs and apply them.&nbsp; To do this, they need a series of files known as Client-Side Extensions, or CSEs.  <p>A Client-Side Extension is nothing more than a&nbsp; file (in most cases it&#39;s a .dll file, but not always) that has been installed on the client machine which has the ability to interpret and process certain of the settings in a GPO.&nbsp; Because there are many different types of settings, there are different Client-Side Extensions.&nbsp; In order for your client to process a portion of a GPO, the CSE associated with that portion of the GPO will need to be present on the client machine.&nbsp; An example of this is the security settings that are found under Policies/Windows Settings/Security Settings on both the Machine and User nodes of a GPO.&nbsp; To process any settings that have been configured within these containers, your client will need the scecli.dll file.  <p>You can see the various Client-Side Extensions that are loaded on your client by checking your registry.&nbsp; The following screenshot illustrates where this is located:  <p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_011DA0F9.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_011DA0F9.png"><img title="image" style="border-top:0px;border-right:0px;border-bottom:0px;border-left:0px;display:inline;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_thumb_32AB9F3F.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_thumb_5F00_32AB9F3F.png" width="577" height="400" /></a>  <p>As you can see from the screenshot, the Registry key <em>GPExtensions</em> contains the list of CSEs installed on your client device.&nbsp; To see this key, navigate to the following location in your client&#39;s Registry:  <p><em>HKEY_LOCAL_MACHINE/Software/Microsoft/Windows NT/CurrentVersion/Winlogon/GPExtensions</em>  <p>Each of the keys located beneath GPExtensions represents a different CSE.&nbsp; Looking just at the one shown in the screenshot above, we can see that this CSE is used with Security settings.&nbsp; We also see that the file used to process the security settings in the GPO is named scecli.dll.&nbsp; As new settings for your GPOs are released, the number of CSEs may end up growing as well.&nbsp; Typically you won&#39;t have to do anything with these, but it&#39;s good to know nonetheless.  <p>So, in summary, we see that when a client pulls its list of GPOs it follows a well-defined process as described above.&nbsp; And once it gets the settings that it should apply, it relies on the various files that are collectively known as Client-Side Extensions.&nbsp; Like I&#39;ve said, in most cases this all happens behind the scenes and you don&#39;t even need to be aware of it.&nbsp; But it&#39;s nice to know how the process works &quot;under the hood&quot;.  <p><em>Group Policy tools</em>  <p>Finally, let&#39;s wrap up with a discussion of a couple of administrative tools that are useful in managing your GPO environment.&nbsp; These tools certainly aren&#39;t the only ones you&#39;ll want to know about to manage your GPO infrastructure, and I&#39;m not going to cover every possible thing you can do with each of these tools.&nbsp; But the information below should prove helpful when trying to troubleshoot the sorts of issues we&#39;ve covered as part of this topic.  <p><strong>Group Policy Status</strong> <p>In earlier environments, there was a tool named GPOTool that allowed us to verify the health of our GPOs.&nbsp; It was command-line based and may still work in Windows 2012 R2 (it did in Windows 2008).&nbsp; But with Windows 2012, there is a new and preferred way to verify the status of GPOs that’s known as GPO Status. <p>Remember that a GPO consists of two components, one found in Active Directory and replicated via AD replication and the other found in SYSVOL and replicated via (hopefully, by this point) DFS-R.&nbsp; These two components replicate in different ways and at different times, and if there is a problem with one of these it is possible that your GPOs will be inconsistent.&nbsp; This could mean that you might see your GPOs showing one version for AD and a different one for SYSVOL. <p>Within the GPMC for Windows 2012, there is now a way to determine whether your GPOs are fully replicated throughout your environment.&nbsp; And the nice thing is that you can do this on a per-GPO or per-Domain basis (sorry but Sites and OUs do not have this feature).&nbsp; If you want to know whether a specific GPO has fully replicated, check the GPO itself.&nbsp; And if you want to know whether all of your GPOs have replicated, check the domain. <p>To check the status of a specific GPO, select the GPO (either the link or the GPO itself under Group Policy Objects) and choose the Status tab.&nbsp; By selecting the ‘Detect Now’ button, you can tell what the status of the GPO is on each of the DCs to which this GPO replicates: <p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_5D869402.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_5D869402.png"><img title="image" style="border-top:0px;border-right:0px;border-bottom:0px;border-left:0px;display:inline;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_thumb_61937285.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_thumb_5F00_61937285.png" width="586" height="331" /></a>  <p>Note in the case above, I have 1 DC to which I am replicating the ‘Access this Computer from the Network – NAA’ GPO.&nbsp; If it were still in the process of replicating, this would be noted.&nbsp; But in my case, replication is in sync, which is why DC2 is showing in the bottom drop-down category. <p>To check replication for the entire domain is essentially the same thing.&nbsp; Simply select the domain node itself in the GPMC, go to the Status tab and take the same steps mentioned just above.&nbsp; Below is what this looks like in my lab: <p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_5A76C6BE.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_5A76C6BE.png"><img title="image" style="border-top:0px;border-right:0px;border-bottom:0px;border-left:0px;display:inline;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_thumb_75AF1FBF.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_thumb_5F00_75AF1FBF.png" width="467" height="326" /></a>  <p>Since I have just finished promoting DC2 to be a domain controller, several of the GPOs are still replicating.&nbsp; I have also taken the extra step of ensuring that all categories are reported on by right-clicking the details pane and selecting every category.&nbsp; This is shown below: <p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_69AD2F8B.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_69AD2F8B.png"><img title="image" style="border-top:0px;border-right:0px;border-bottom:0px;border-left:0px;display:inline;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_thumb_12B7CE88.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_thumb_5F00_12B7CE88.png" width="470" height="305" /></a>  <p>By doing this, I get additional detail and can look at things like the date that both the Active Directory and SysVol portions of my GPOs were last modified.&nbsp; All I need to do is select the ‘Modified date’ hyperlink as shown above and I’ll get a nice pop-up like the one below: <p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_3B563A8F.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_3B563A8F.png"><img title="image" style="border-top:0px;border-right:0px;border-bottom:0px;border-left:0px;display:inline;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_thumb_4B650946.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_thumb_5F00_4B650946.png" width="475" height="283" /></a>  <p>This sort of information can be invaluable when attempting to troubleshoot why a policy might not have replicated to each of the DCs in your domain.&nbsp; Sometimes this is merely a function of the time needed to allow replication to complete.&nbsp; But if your domain has not converged within the expected timeframe, it may be necessary to look into it further. <p><em>NOTE: If you are checking the entire domain, be prepared for some additional network traffic.&nbsp; Every GPO will be checked against every DC to make sure what all of them report.&nbsp; While this additional traffic shouldn’t be a problem, it’s something to at least be aware of.</em> <p><strong>GPUpdate</strong>  <p>As I mentioned above, there will almost certainly be times when you need to make a change to a GPO and have it update immediately on a client.&nbsp; With GPUpdate, you can force the background refresh on a client to kick in immediately (note: you cannot force the foreground process through GPUpdate).&nbsp; GPUpdate runs only on the local client since it&#39;s telling the client to pull updates immediately and to do this, we need to be on the client that initiates the request.  <p>GPUpdate is a command-line tool and it has a number of parameters that are of interest to us:  <ul> <li>/Target: {Computer|User} - this switch allows your client to request only the machine or user-side settings from its GPOs.&nbsp; If this switch is not used, both user and computer settings are updated  </li><li>/Force - this switch causes your client to re-apply all of the policies assigned to it, though it only assigns policies that have been changed (it won&#39;t cause the client to re-apply every setting if some of them have not been changed since the last update)  </li><li>/Logoff - using this switch, you can force a logoff which will allow policies that process in the foreground to be processed  </li><li>/Boot - this switch causes your client to reboot after the policies are applied (again, to allow for processing of policies that only apply after a reboot)</li></ul> <p>Here is an example of what this might look like in your environment:  <p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_53E86890.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_53E86890.png"><img title="image" style="border-top:0px;border-right:0px;border-bottom:0px;border-left:0px;display:inline;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_thumb_68018519.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_thumb_5F00_68018519.png" width="502" height="257" /></a>  <p>As you can see, the interface doesn&#39;t tell you much.&nbsp; In this screenshot, I have asked my client to pull the settings for its GPOs and I&#39;ve selected /force to ensure that the policies are refreshed.&nbsp; This caused background processing to start immediately and we can see that it finished successfully.&nbsp; If I had configured a particular setting on a GPO, I could run a tool like the Resultant Set of Policies (RSOP) to find out if that setting had taken effect.&nbsp; If I prefer, I could also run Group Policy Results from the GPMC and get the GPO results of remote computers (this is a much better way of getting RSOP data as it will provide significant additional detail that will help to troubleshoot any issues found on a client system).&nbsp; <p>GPUpdate works great if you’re troubleshooting a single device (or even a handful of devices if you don’t mind using this tool on each one).&nbsp; But if you make a policy change and need to have all client devices impacted by this change apply the policy immediately, the better way to do this in Windows 2012 is to select the parent OU (no domains or sites, unfortunately) where the clients reside and choose ‘Group Policy Update…’ as shown below: <p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_4A230118.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_4A230118.png"><img title="image" style="border-top:0px;border-right:0px;border-bottom:0px;border-left:0px;display:inline;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_thumb_057666D7.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_thumb_5F00_057666D7.png" width="490" height="265" /></a>  <p>By selecting this, a pop-up will be invoked to verify that you do want to update the computers that are within the scope of that OU.&nbsp; By selecting ‘Yes’, the GPMC runs GPUpdate /force against every machine in the scope of the OU you’ve selected.&nbsp; Below is a screenshot of the confirmation pop-up itself.&nbsp; Note that it states that you’ve chosen to force a Group Policy update and will tell you the scope where this will occur.&nbsp; Read this carefully to make sure this is, indeed, the desired scope before selecting ‘Yes’. <p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_0746BC9E.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_0746BC9E.png"><img title="image" style="border-top:0px;border-right:0px;border-bottom:0px;border-left:0px;display:inline;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_thumb_429A225C.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_thumb_5F00_429A225C.png" width="470" height="305" /></a>  <p>Group Policy Update isn’t a new tool so much as a way to run GPUpdate /force across multiple machines without requiring you to log into each one (or write some sort of script).&nbsp; While it’s not essential that you ever use this, it’s nice to know it’s there if needed. <p><strong>Summary</strong> <p>And with that, we come to the end of this series on GPO basics.&nbsp; I know this has been a very long post (and the end of several other very long posts), and I apologize for packing in so much.&nbsp; I felt it was necessary to be thorough and finish covering the core details necessary to understand GPOs and how they are processed within your environments.&nbsp; Now that we&#39;ve got the basics covered, we should be in good shape to move forward with other, more focused topics related to Group Policies.  </p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p>]]></content:encoded>
    </item>
    <item>
      <title>AD DS: Group Policy Basics - Part 2: Understanding Which GPOs to Apply</title>
      <link>https://docs.microsoft.com/archive/blogs/scotts-it-blog/ad-ds-group-policy-basics-part-2-understanding-which-gpos-to-apply</link>
      <pubDate>Sat, 28 Feb 2015 20:59:11 GMT</pubDate>
      <dc:creator><![CDATA[srachui]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.technet.microsoft.com/scotts-it-blog/2015/02/28/ad-ds-group-policy-basics-part-2-understanding-which-gpos-to-apply/</guid>
      <description><![CDATA[In the previous post, I talked about the structure of a GPO.&nbsp; Now, I&#39;ll turn to the...]]></description>
      <content:encoded><![CDATA[<p>In the previous post, I talked about the structure of a GPO.&nbsp; Now, I&#39;ll turn to the question of what a client does in order to apply the settings that we&#39;ve configured in our GPOs.&nbsp; The processing of GPOs is initiated from the client side rather than being pushed from your Domain Controllers.&nbsp; As such, your clients have to understand several things to process the correct GPOs in the correct way.&nbsp; In order to properly understand this, we need to look at a few additional concepts.  <p><strong>How Does a Client Know Which GPOs to Apply?</strong>  <p>There are two types of GPOs.&nbsp; There are GPOs that are configured locally on the client machine and are always processed, and there are GPOs linked within the Active Directory structure itself.&nbsp; While the client knows that it needs to process its local GPO, it&#39;s not as clear as to which GPOs in the directory structure apply to it.&nbsp; Within the directory, GPOs can be linked to the following levels:  <ul> <li>Site  </li><li>Domain  </li><li>Organizational Unit</li></ul> <p>Depending on where the client object is located determines which GPOs it applies.&nbsp; For example, consider the following scenario:  <p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_3432303D.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_3432303D.png"><img title="image" style="border-left-width:0px;border-right-width:0px;border-bottom-width:0px;display:inline;border-top-width:0px;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_thumb_2A91741A.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_thumb_5F00_2A91741A.png" width="572" height="399" /></a>  <p>Here we see that the workstation named Win8<em>&nbsp;</em>is within the Computers OU that is part of the cert.local domain.&nbsp; This is represented by the following distinguishedName: CN=Win8,OU=Computers,OU=Lab,DC=cert,DC=local. Though we don&#39;t see it on this screenshot, the Win8 client also belongs to the Active Directory site known as &#39;Default-First-Site-Name&#39;.&nbsp; Given this, which GPOs need to be considered by our client machine?&nbsp; We already know that any local settings on the client itself will need to be processed.&nbsp; And if we look at the GPMC, we can see that two additional GPOs exist that the client must consider:  <p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_011D32DA.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_011D32DA.png"><img title="image" style="border-left-width:0px;border-right-width:0px;border-bottom-width:0px;display:inline;border-top-width:0px;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_thumb_4E74686B.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_thumb_5F00_4E74686B.png" width="399" height="455" /></a>  <p>These two GPOs are the <em>Default Domain Policy</em> linked at the domain level and the <em>Event Log Size</em> linked to the Computers OU.&nbsp; We can also see that there are no GPOs linked to any sites.&nbsp; So we know that our possible list of GPOs includes:  <ul> <li>Local GPO (known as the Local Policy)  </li><li>Default Domain Policy  </li><li>Event Log Size</li></ul> <p>The way the client actually sees these is a bit different.&nbsp; In order for your workstation or server to determine whether it needs to process any policies, it looks for the gPLink attribute that exists within certain Active Directory objects.&nbsp; This attribute, when populated, points to the name and location of the GPO that the client must consider.&nbsp; Take a look at an example of this below:  <p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_6772C961.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_6772C961.png"><img title="image" style="border-left-width:0px;border-right-width:0px;border-bottom-width:0px;display:inline;border-top-width:0px;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_thumb_0B2E81AD.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_thumb_5F00_0B2E81AD.png" width="598" height="266" /></a>  <p>Using the LDP tool, we can see that the gPLink attribute is populated for the Computers OU.&nbsp; Looking at it closely, we can also see that it is pointing the client to the Group Policy Container for a specific GPO (which we already know is the Event Log Size GPO).&nbsp; In the previous post, we&#39;ve already seen how the GPC functions so I won&#39;t cover that again.&nbsp; Instead, it&#39;s just enough to know that this is how the client learns which GPO it needs to look up.  <p>Sticking with our scenario, we learn that gPLink is also populated on our domain object, but that it isn&#39;t populated on the site where our client belongs.&nbsp; So we end up with the list of GPOs already enumerated above.&nbsp; Now what do we do with them?  <p><strong>Processing GPOs: Precedence</strong>  <p>Because it&#39;s possible (and even likely) that you may have multiple GPOs to apply, there is always the possibility that these GPOs will have conflicting settings.&nbsp; In this case, how do we know which GPO will win and have its settings applied?&nbsp; The simple rule to remember is that the last GPO applied will overwrite any settings applied earlier.&nbsp; And the GPOs closest to the client location in the directory structure will be applied last.&nbsp; The order goes as follows:  <ul> <li>Local  </li><li>Site  </li><li>Domain  </li><li>Organizational Unit</li></ul> <p>What this means is that if you&#39;ve set something on your Local GPO but your domain administrators require a different setting, your local setting will be overwritten.&nbsp; The same thing applies to situations where the domain may have a default policy but your business unit may have more specific needs.&nbsp; In this case, a default setting can be configured and your business unit can override this setting to apply the one your group requires.  <p>In our example above, suppose that the Default Domain Policy GPO set a disk quote for the domain at 50 MB.&nbsp; However, your business unit requires that your workstations have 100 MB quotas.&nbsp; Your administrators could set a policy at the OU level to allow these settings for your group.&nbsp; Your directory structure might look like this:  <p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_638A9633.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_638A9633.png"><img title="image" style="border-left-width:0px;border-right-width:0px;border-bottom-width:0px;display:inline;border-top-width:0px;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_thumb_23570D6A.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_thumb_5F00_23570D6A.png" width="587" height="325" /></a>  <p>Note here that we are still using the Computers OU that we leveraged before, but now we have created a new GPO called <em>Disk Quota (Accounting)</em> that we&#39;ve linked to it as well.&nbsp; At this point, objects within the Computers OU will have the following GPOs to apply:  <ul> <li>Local GPO  </li><li>Default Domain Policy  </li><li>Event Log Size  </li><li>Disk Quota (Accounting)</li></ul> <p>Briefly, let’s look at the Disk Quota settings in both the Default Domain Policy and the newly created Disk Quota (Accounting) policy.  <p>First, on the Default Domain Policy, we can see that we have assigned a value of 50MB which applies to the entire domain.  <p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_300BF68C.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_300BF68C.png"><img title="image" style="border-left-width:0px;border-right-width:0px;border-bottom-width:0px;display:inline;border-top-width:0px;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_thumb_4B46E03E.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_thumb_5F00_4B46E03E.png" width="592" height="401" /></a>  <p>By contrast, here are the settings applied to the Disk Quota (Accounting) OU.  <p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_20FA3914.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_20FA3914.png"><img title="image" style="border-left-width:0px;border-right-width:0px;border-bottom-width:0px;display:inline;border-top-width:0px;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_thumb_562B7399.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_thumb_5F00_562B7399.png" width="595" height="359" /></a>  <p>In this case, if the <em>Default Domain Policy</em> assigns a value of 50 MB as the default disk quota for the domain, the <em>Disk Quota (Accounting)</em> policy should overwrite it because it&#39;s applied last.&nbsp; But can we confirm that?&nbsp; To do so, it’s as easy as logging into a client machine within the scope of both of these policies to see which one has taken effect.  <p>By using the MMC Snap-in known as the Resultant Set of Policy (RSOP), we can see what the currently applied settings are for our test computer as well as which GPO provided the settings:  <p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_1A04C953.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_1A04C953.png"><img title="image" style="border-left-width:0px;border-right-width:0px;border-bottom-width:0px;display:inline;border-top-width:0px;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_thumb_04A9A49C.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_thumb_5F00_04A9A49C.png" width="567" height="398" /></a>  <p>When I ran RSOP from my Win8 device, I was able to verify that my Disk Quota settings did, in fact, come from the Disk Quota (Accounting) GPO and that the effective setting was 100 MB.  <p>One final point about precedence and which GPO will apply in what order.&nbsp; What if you have configured two GPOs at the same OU level, as we have in the Computers OU?&nbsp; How do we know which GPO will apply first and which one will win if they have competing settings (in our examples, the GPOs do not have competing settings, but in the real world this is always a possibility)?&nbsp; In this case, you must rely on the GPMC to tell you this.&nbsp; You can also configure the order in which these GPOs will be processed if needed.&nbsp; The following screenshot shows two GPOs that will be applied at the Computer OU level:  <p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_3637A2E2.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_3637A2E2.png"><img title="image" style="border-left-width:0px;border-right-width:0px;border-bottom-width:0px;display:inline;border-top-width:0px;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_thumb_187DCA36.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_thumb_5F00_187DCA36.png" width="586" height="240" /></a>  <p>From looking at the screen, you can see that these two GPOs are numbered.&nbsp; The way in which GPOs&nbsp; are applied is from the highest number to the lowest number.&nbsp; So in this case, the <em>Disk Quota (Accounting) </em>GPO will apply before the <em>Event Log Size </em>GPO.&nbsp; If you want to alter this order, all that’s needed is to select the GPO you want to move and use the arrows on the left-hand side of the screen to move it up or down in the list.  <p><strong>Filtering a GPO</strong>  <p>Before we go any further, we need to look at two more concepts that will determine whether GPO settings are applied to your client.&nbsp; The first is GPO Filtering.&nbsp; This feature allows further granularity in the way that GPOs are applied in your environment.&nbsp; Even when a GPO is linked within a part of your directory (say, an OU) you may not want that GPO to apply to every object within that container.&nbsp; You can control this by assigning permissions for who can process your GPO.&nbsp; This is known as filtering.  <p>When you filter a GPO, you specifically designate which users, groups and computers are allowed to apply a GPO.&nbsp; For example, you may only want the team leads within the Accounting group to get 100 MB of disk space for their disk quota, so you decide to configure a group called <em>Team Leads</em> and filter the GPO on that group.&nbsp; If you did this, it would look like the following:  <p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_6F0988F5.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_6F0988F5.png"><img title="image" style="border-left-width:0px;border-right-width:0px;border-bottom-width:0px;display:inline;border-top-width:0px;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_thumb_7552F034.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_thumb_5F00_7552F034.png" width="590" height="326" /></a>  <p>You&#39;ll notice that in the Security Filtering pane we now have only the <em>Team Leads</em> group.&nbsp; This means that even if an object is within the Computers OU, it will not apply the <em>Disk Quota (Accounting)</em> settings unless it belongs to the <em>Team Leads</em> group.  <p>NOTE: It is easy to allow your GPOs to become VERY complicated very quickly through the use of security filtering.&nbsp; Use of security filters should be carefully planned beforehand (as should everything with your Group Policy infrastructure).  <p><strong>Security Filtering Under the Hood</strong>  <p>Though we can certainly add and remove users, computers and groups from the security filtering window in the GPMC, it&#39;s also helpful to know what&#39;s actually happening under the hood when we do this.  <p>In order for a GPO to apply to an object, that object must have two rights over that GPO.&nbsp; These are:  <ul> <li>Read  </li><li>Apply Group Policy</li></ul> <p>When a user, computer or group is added to the security filtering window, it is being granted these two rights (and vice versa).&nbsp; To see the exact permissions being applied via security filtering (and to get to the security properties of a GPO in general, do the following:  <ol> <li>Within the GPMC, select the GPO you&#39;re interested in and choose the <strong>Delegation</strong> tab in the right-hand pane.  </li><li>Within the Delegation tab, select the <strong>Advanced...</strong> button in the lower right-hand corner.  </li><li>Select the object of interest in the <strong>Group or user names:</strong> pane and look at the permissions assigned in the lower pane.</li></ol> <p>The following shows an example of what I&#39;m talking about:  <p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_6BF9BBB1.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_6BF9BBB1.png"><img title="image" style="border-left-width:0px;border-right-width:0px;border-bottom-width:0px;display:inline;border-top-width:0px;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_thumb_569E96FA.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_thumb_5F00_569E96FA.png" width="583" height="322" /></a>&nbsp; <p>You can also manage permissions directly in this window (and that&#39;s how we used to have to do it before the GPMC came along).&nbsp; But unless you have some specific need to make changes here, it&#39;s generally better to simply add/remove objects in the Security Filtering window.  <p><strong>WMI Filtering</strong>  <p>WMI stands for Windows Management Instrumentation and it&#39;s been created as a way to specify and act on computers based upon chosen characteristics.&nbsp; WMI is not a Microsoft-specific thing, but is an industry standard that Windows leverages.&nbsp; Within Windows computers, there are thousands of management settings which an admin may want to access.&nbsp; WMI provides a central repository for that information to allow easy (well, somewhat easy) access.&nbsp; From within the repository, standardized ways exist to locate and leverage the available management data.  <p>Examples of the type of data stored in the WMI Repository would be information relating to a computer’s BIOS, its physical disk layout, aspects of its desktop or the services it has running.&nbsp; GPOs can leverage WMI filtering so that only computers meeting certain criteria (running a specific motherboard, for example) will process a GPO.&nbsp; In short, it&#39;s a way to say &quot;I am only interested in these specific computers&quot;.&nbsp; Group Policies allow you to use WMI queries to specify in a very granular way which GPOs will apply to which computers.&nbsp; You&#39;ll need to learn how to write a WMI query (using the WMI Query Language, or WQL, which is similar in structure to the SQL language), but if your environment has a need for this level of granularity, the functionality is present.  <p>To write your own WMI Filter, you&#39;ll need to create the filter and then apply it to your GPO of choice.&nbsp; To do this, take the following steps:  <ul> <li>In the GPMC, right-click the WMI Filters node and select <strong>New... </strong>as shown below</li></ul> <p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_61EF5D4A.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_61EF5D4A.png"><img title="image" style="border-left-width:0px;border-right-width:0px;border-bottom-width:0px;display:inline;border-top-width:0px;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_thumb_5614A91C.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_thumb_5F00_5614A91C.png" width="319" height="382" /></a> </p> <ul> <li>Give your WMI Filter a name and a description and then select Add.</li></ul> <p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_0DEC0EA2.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_0DEC0EA2.png"><img title="image" style="border-left-width:0px;border-right-width:0px;border-bottom-width:0px;display:inline;border-top-width:0px;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_thumb_5711BA5B.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_thumb_5F00_5711BA5B.png" width="454" height="330" /></a> </p> <ul> <li>Most of the time you will want your Namespace to be <em>root\CIMv2</em>, though many different namespaces exist within the WMI Repository depending on the individual computer’s configuration.&nbsp; You can see this by clicking the browse button and scrolling through the various namespaces present in your WMI Repository</li></ul> <p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_58E21022.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_58E21022.png"><img title="image" style="border-left-width:0px;border-right-width:0px;border-bottom-width:0px;display:inline;border-top-width:0px;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_thumb_061E38F7.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_thumb_5F00_061E38F7.png" width="599" height="331" /></a> </p> <ul> <li>Once you have selected the Namespace, type your query in the Query window as shown below</li></ul> <p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_712F4734.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_712F4734.png"><img title="image" style="border-left-width:0px;border-right-width:0px;border-bottom-width:0px;display:inline;border-top-width:0px;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_thumb_2563707B.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_thumb_5F00_2563707B.png" width="378" height="294" /></a> </p> <p>Note that this WQL Query will find Windows 8 Computers and filter out anything that does not meet this criteria.&nbsp; If you don’t know WQL (and most don’t, which is why WMI Filters aren’t used that much), I highly recommend the book <a href="https://www.manning.com/siddaway2/" target="_blank">PowerShell and WMI</a> by Richard Siddaway.&nbsp; This is an excellent way to learn about WMI and how to manipulate it with PowerShell.</p> <p>After you have completed these steps, save your query.&nbsp; The query will appear in the right-hand pane as well as beneath your WMI Filters node on the left of the GPMC as shown below:</p> <p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_2E5302BA.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_2E5302BA.png"><img title="image" style="border-left-width:0px;border-right-width:0px;border-bottom-width:0px;display:inline;border-top-width:0px;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_thumb_3AE5D138.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_thumb_5F00_3AE5D138.png" width="588" height="325" /></a> </p> <p>Now that the WMI Filter has been created, you can apply it to the GPO of your choice by doing the following:  <ul> <li>Select the GPO and choose the Scope tab in the right-hand pane  </li><li>At the bottom of the Scope pane, locate the WMI Filtering section  </li><li>Select the drop-down box entitled This GPO is linked to the WMI filter you just created</li></ul> <p>The screenshot below illustrates this:</p> <p>&nbsp;<a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_58E9008E.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_58E9008E.png"><img title="image" style="border-left-width:0px;border-right-width:0px;border-bottom-width:0px;display:inline;border-top-width:0px;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_thumb_5A76F017.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_thumb_5F00_5A76F017.png" width="583" height="339" /></a> </p> <p>At this point, the WMI filter is assigned to your GPO and only those computers meeting the specifications of this filter will receive the GPO.&nbsp; Because WMI filtering can become very complex, it is always a good idea to thoroughly test these settings before applying them in production.&nbsp; If the computers which are the target of your filter aren&#39;t receiving the GPOs they should, it&#39;s likely that the filter has been written wrong.  <p>NOTE: Even if you write a WMI query to include a particular computer object, it will still need to have &#39;Read&#39; and &#39;Apply Group Policy&#39; permissions over the GPO in order to apply its settings.  <p><strong>Inheritance, Blocking and Enforcement</strong>  <p>The second concept that we need to address is the idea of GPO inheritance and the ways administrators can control whether a higher-level GPO is applied to the objects further down in the directory.&nbsp; This can become especially relevant when you have a large number of GPOs and you don&#39;t need the clients within a particular OU to apply all of those settings (applying all of those settings requires more time for your client to start, after all).  <p>To extend our example above, let&#39;s assume we have a child OU under the Computers OU.&nbsp; Lets call it Executives, and let’s say we’ve decided to move our Win8 computer object into this OU (it belongs to our CEO and needs to be handled more carefully).&nbsp; We have made a decision that the members of the Executives OU should not have the <em>Event Log Size</em> GPO apply to their client machines for some reason.&nbsp; Unless something is done to prevent it from applying, its settings will go into effect on client machines in the Executives OU.&nbsp; You could make the decision to create a second GPO to overwrite the settings in the <em>Event Log Size</em> GPO, but then your clients have two GPOs to process, one applying some settings and the other removing those same settings.&nbsp; It seems a bit cumbersome.&nbsp; Thankfully, there&#39;s a better way.  <p>Instead of creating yet another GPO whose purpose is to undo the settings of a higher-level GPO, administrators have the ability to block higher-level GPOs so that they don&#39;t apply to your OU.&nbsp; It&#39;s important to note that when you choose to block higher-level GPOs, you are blocking all of them.&nbsp; So any GPO that is inherited will no longer apply.&nbsp; Only those GPOs that you configure directly on your local object will apply (if you create child OUs, inheritance will apply to these, starting at the parent OU where the blocking is in effect).  <p>A couple of screenshots should help explain this.  <p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_77A6DAE5.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_77A6DAE5.png"><img title="image" style="border-left-width:0px;border-right-width:0px;border-bottom-width:0px;display:inline;border-top-width:0px;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_thumb_1B629331.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_thumb_5F00_1B629331.png" width="595" height="332" /></a>  <p>In this screenshot, you can see how to block inheritance of higher-level GPOs.&nbsp; All that is required is for you to right-click the OU (in this case, the Executives OU) and select <strong>Block Inheritance</strong>.&nbsp; A check will appear beside it and all higher-level GPOs will be blocked from applying within your OU or any child OUs you might configure.  <p>Below, we see a before/after picture of the GPOs that will apply to the Executives OU:  <p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_7FC097EB.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_7FC097EB.png"><img title="image" style="border-left-width:0px;border-right-width:0px;border-bottom-width:0px;display:inline;border-top-width:0px;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_thumb_0F6333AE.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_thumb_5F00_0F6333AE.png" width="594" height="235" /></a>  <p>Before we block inheritance at the Executives OU, we can see that 3 policies will be applied (starting with the bottom and working up).&nbsp; These are:  <ul> <li>Event Log Size  </li><li>Disk Quota (Accounting)  </li><li>Default Domain Policy</li></ul> <p>As already mentioned, these policies apply from the bottom to the top.&nbsp; So, for example, if a setting in <em>Default Domain Policy</em> conflicts with a setting in <em>Disk Quota (Accounting)</em>, then the setting in <em>Disk Quota (Accounting)</em> will win.  <p>By contrast, after we set <strong>Block Inheritance</strong>, we can see that the higher-level GPOs no longer apply to the Executives OU:  <p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_30E2633D.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_30E2633D.png"><img title="image" style="border-left-width:0px;border-right-width:0px;border-bottom-width:0px;display:inline;border-top-width:0px;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_thumb_4A056F88.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_thumb_5F00_4A056F88.png" width="576" height="319" /></a>  <p>As can be seen from the screenshot above the previous policies in the Group Policy Inheritance tab are missing.&nbsp; I have also created a new GPO called Audit Accounting Events and linked it directly to the Executives OU (if I had not created this new GPO linked directly to the Executives OU, the Inheritance tab would have been blank.  <p>Now that blocking is in place, only the policies specifically defined for the Executives OU will be applied (again in bottom-to-top order if more than one GPO is linked directly to this OU).&nbsp; You will also note that there is now a blue circle with an exclamation point showing next to the Executives OU.&nbsp; This is how the GPMC notifies you that <strong>Block Inheritance</strong> is in effect.  <p>For the sake of clarity, let&#39;s look at one final screenshot to clear away any lingering questions.&nbsp; We&#39;ve said that any inherited GPOs are blocked when Block Inheritance is set.&nbsp; But even with this setting in place, child OUs created beneath the blocking point will still inherit everything from that point on down.&nbsp; In our example, this means that if we create a child OU under the Accounting OU, it will inherit the policies created at the Accounting OU as well as any GPOs linked directly to the child OUs.&nbsp; We can see this in the following screenshot:  <p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_12554609.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_12554609.png"><img title="image" style="border-left-width:0px;border-right-width:0px;border-bottom-width:0px;display:inline;border-top-width:0px;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_thumb_0ACC674D.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_thumb_5F00_0ACC674D.png" width="588" height="325" /></a>  <p>Here you can see that I&#39;ve created a child OU beneath Executives called Executives - Europe along with a new GPO called <em>Retain Security Events</em> (maybe we&#39;ve got a security investigation going on in our European office and we have to be sure that security log isn&#39;t overwritten).&nbsp; You can see from this screenshot above that, even with <strong>Block Inheritance</strong> set, the GPO from the Executives OU (though none above the Executives OU) still inherit to the Executives - Europe OU and are applied from bottom to top so that the GPO linked directly to the Executives – Europe OU takes precedence.  <p>Finally, to throw one more bit of complexity into the mix, let&#39;s assume that you&#39;re the domain administrator and you want to make sure that none of the admins responsible for any of your child OUs is able to block a particular GPO (you’re not a big fan of them choosing to block your GPOs at the Executive OU level).&nbsp; It turns out that you have the ability to force all of your clients to receive your policies even if they want to block them.&nbsp; This process is called Enforcing.  <p>Looking at the screenshot below, we can see that if we want to enforce a particular policy, we just need to right-click it and choose the <strong>Enforce</strong> option (note, this is done on a per-policy level so every policy you wish to be enforced will have to be configured this way individually).&nbsp; When we do this, a small lock symbol will appear beside that GPO to let us know it&#39;s being enforced.  <p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_413D194F.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_413D194F.png"><img title="image" style="border-left-width:0px;border-right-width:0px;border-bottom-width:0px;display:inline;border-top-width:0px;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_thumb_69DB8556.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_thumb_5F00_69DB8556.png" width="472" height="392" /></a>  <p>Once a GPO is enforced, it overrides any attempts to block it, as we can see below.&nbsp; Here, the Executives OU still has blocking set but we can now see that the <em>Default Domain Policy</em> is once again being processed within that OU.&nbsp; To help us to understand why it&#39;s being processed even when blocking is in place, the GPMC notifies us that it&#39;s being (Enforced).  <p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_00312A9C.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_00312A9C.png"><img title="image" style="border-left-width:0px;border-right-width:0px;border-bottom-width:0px;display:inline;border-top-width:0px;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_thumb_0FD3C65E.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_thumb_5F00_0FD3C65E.png" width="585" height="169" /></a>  <p>Before leaving the topic, here are a couple of additional notes about enforcement.&nbsp; First, when a policy is enforced, its settings will be applied last as the screenshot above shows.&nbsp; This means that it will override even GPOs that are created and linked closer to where the user or computer object is located.&nbsp; If it contains a setting and a GPO closer to the client object contains a conflicting setting, the enforced setting will win.  <p>Second, if you have multiple enforced policies the one higher up the OU tree will have its settings enforced over ones lower in the tree structure.&nbsp; To illustrate this, look at the following screenshot.  <p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_060E5EE6.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_060E5EE6.png"><img title="image" style="border-left-width:0px;border-right-width:0px;border-bottom-width:0px;display:inline;border-top-width:0px;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_thumb_4ABD89D8.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_thumb_5F00_4ABD89D8.png" width="588" height="160" /></a>  <p>In the screenshot, you can see that the order of precedence is actually reversed from what you would expect (where the GPO closest to the client object is applied last).&nbsp; Instead, these rules apply:  <ol> <li>GPOs without enforcement set are applied first, using the normal precedence rules  </li><li>GPOs with enforcement set are applied last, with their precedence rules reversed</li></ol> <p>For our example, the Executives – Europe OU applies its GPOs as follows:</p> <ol> <li>Audit Accounting Events (inherited from the Executives OU)  <ol> <li>Note that due to blocking being in place we do not start with GPOs higher than the Executives OU in this case</li></ol> </li><li>Retain Security Events (linked directly to the Executives – Europe OU)  </li><li>Event Log Size (linked to the Computers OU)  </li><li>Default Domain Policy (linked at the domain level)</li></ol> <p>The normal order of precedence&nbsp; is in effect until the enforced GPOs are considered and then the order is reversed for each enforced GPO (note the GPOs above the point of blocking which are not enforced are never processed).</p> <p><strong>Resultant Set of Policy</strong>  <p>Resultant Set of Policy is the phrase that is used to indicate which policies apply to client machines and users.&nbsp; When the settings of all your GPOs have been sorted out and the system knows which policies need to be applied based on the rules you&#39;ve put in place, the Resultant Set of Policies is that list of settings.&nbsp; In this section, we&#39;re going to spend a bit of time talking about two tools that will help show you what policies will apply to a particular client.&nbsp; One of them even allows you to model which settings will apply before you put them into production, so it serves as a great planning and troubleshooting tool.  <p><em>GPRESULT</em>  <p>I&#39;ll start with GPRESULT because it&#39;s been around longer and is the command-line tool you&#39;ll use to see which policies are applying to your clients.&nbsp; GPRESULT was originally included as part of the Windows 2000 Resource Kit, but is present by default starting in Windows 2003 and continuing in Windows 2008/R2 and 2012/R2.&nbsp; You can read about the various things you can do with this tool by opening a command prompt and typing  <p><em>gpresult /?</em>  <p>While GPRESULT can be used for multiple purposes, our need here is to generate Resultant Set of Policy data.&nbsp; Specifically, we&#39;re going to look at the following combinations of commands:  <p><em>gpresult /R</em>  <p>By using the /R switch with nothing else, summary data for the various policies and settings will be printed to your command prompt.  <p><em>gpresult /V</em>  <p>This is the same as the /R command, only the results will be verbose.  <p>If you don&#39;t want all of the settings, you can set the /SCOPE option and choose either USER or COMPUTER, which will result in only the User or Computer node settings being returned.  <p>If you want to save the results to a file, you can do so by either piping the results to a text file using a command similar to <em>gpresult /R&gt;c:\gpresult.txt</em>.&nbsp; Another option is to create your output in HTML format by typing <em>gpresult /H &lt;filename.html&gt;</em>.  <p>To get the Resultant Set of Policy (RSOP), I will run the following:  <p>gpresult /R&gt;c:\scripts\gpresult.txt  <p>I will also run it a second time and specify the output should be HTML format using the following:  <p>gpresult /H&gt;c:\scripts\gpresult.html  <p>Below are sample outputs in both the .txt and .html formats  <p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_5AF103E4.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_5AF103E4.png"><img title="image" style="border-left-width:0px;border-right-width:0px;border-bottom-width:0px;display:inline;border-top-width:0px;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_thumb_320DA0EE.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_thumb_5F00_320DA0EE.png" width="571" height="296" /></a>  <p>GPResult.txt  <p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_5799AF00.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_5799AF00.png"><img title="image" style="border-left-width:0px;border-right-width:0px;border-bottom-width:0px;display:inline;border-top-width:0px;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_thumb_6DEF5445.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_thumb_5F00_6DEF5445.png" width="574" height="405" /></a>  <p>GPResult.html  <p><strong>Resultant Set of Policy (RSOP)</strong>  <p>The newer tool that&#39;s been created specifically to see Resultant Set of Policy for your client is called, oddly enough, Resultant Set of Policy.&nbsp; You access this tool by taking the following steps:  <ol> <li>From your client machine, go to <strong>Start/Run</strong> and open a blank MMC by typing <strong>mmc.exe.</strong>  </li><li>Within the blank MMC console go to File and choose <strong>Add/Remove Snap-in....</strong>  </li><li>From the Add or Remove Snap-ins window, scroll down until you see the Resultant Set of Policy snap-in.&nbsp; Highlight it and select the <strong>Add</strong> button.</li></ol> <p>Select OK and you&#39;ll be looking at the Resultant Set of Policy tool.&nbsp; Not much shows in the window at first, but we&#39;ll quickly change that.&nbsp; To see policy settings, the tool will need to gather data.&nbsp; It does this through a wizard that is started when you select <strong>Action</strong> from the menu bar and choose <strong>Generate RSoP Data...</strong>  <p>When generating your RSoP Data, you can choose Logging or Planning mode.&nbsp; If you choose Planning mode, the system will show you what settings would apply if an object were located at a particular place in your directory structure.&nbsp; This is a great &quot;what if&quot; tool in cases where you&#39;re considering migrating objects to new containers within Active Directory and you want to know what effect this will have on them from a Group Policy perspective.&nbsp; Planning mode is also great in a test environment where you&#39;ve configured the directory and GPO structure that you think will do what you need.&nbsp; Using this tool, you can generate the resultant set of policy which will show you the settings that will take effect on your client objects.&nbsp; If the settings aren&#39;t what you expect, you can make the necessary changes and test again.  <p>The other way to use the Resultant Set of Policy tool is in Logging mode.&nbsp; This mode will review the settings currently being applied to a particular computer or user (or both).&nbsp; You can select either the local computer or a remote device and when the wizard runs the results will display the resultant policy settings that are applying to that device.&nbsp; This is especially useful when you&#39;re trying to understand whether a particular setting should be applying to a computer or user.&nbsp; If RSOP doesn&#39;t show the setting, it may mean something has happened in your GPO implementation that is preventing that setting from taking effect.  <p>A screenshot of what the RSOP tool looks like is below:  <p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_78D73548.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_78D73548.png"><img title="image" style="border-left-width:0px;border-right-width:0px;border-bottom-width:0px;display:inline;border-top-width:0px;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_thumb_032AEA5A.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_thumb_5F00_032AEA5A.png" width="596" height="307" /></a>  <p>Resultant Set of Policy is a powerful tool that is especially useful in understanding ahead of time what settings will apply to objects before you make modifications to your directory.&nbsp; It is also very useful as a diagnostic and troubleshooting tool (though I personally prefer GPRESULT since I don&#39;t have to drill down through as many containers if I&#39;m looking at the report in the command line or a text file).  <p><strong>Summary </strong> <p>So now you should understand how a GPO determines which GPOs it should process and how to find them (through the gPLink attribute).&nbsp; You should also understand the order in which they are processed, how decisions are made about which policy settings to apply when there are conflicts, and how to block and enforce settings within your environment.&nbsp; I also showed how to use a couple of tools to see which policies should be applying to your GPOs, which will be helpful to you when understanding and troubleshooting policies in your environment.  <p>In the next post I&#39;ll finally get to Client-Side Extensions (CSEs) and we&#39;ll try to wrap this series up.  </p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p>]]></content:encoded>
    </item>
    <item>
      <title>AD DS: Group Policy Basics - Part 1: Understanding the Structure of a Group Policy Object</title>
      <link>https://docs.microsoft.com/archive/blogs/scotts-it-blog/ad-ds-group-policy-basics-part-1-understanding-the-structure-of-a-group-policy-object</link>
      <pubDate>Sat, 28 Feb 2015 10:16:36 GMT</pubDate>
      <dc:creator><![CDATA[srachui]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.technet.microsoft.com/scotts-it-blog/2015/02/28/ad-ds-group-policy-basics-part-1-understanding-the-structure-of-a-group-policy-object/</guid>
      <description><![CDATA[Below is the first of a 3-part series I did outlining the basics of Group Policy Objects.&nbsp; I...]]></description>
      <content:encoded><![CDATA[<p>Below is the first of a 3-part series I did outlining the basics of Group Policy Objects.&nbsp; I did this series previously on another blog for Windows Server 2008 and have decided to update it for Windows Server 2012.&nbsp; Much of the technology has not changed between 2008 and 2012 but where there are changes, I have noted them.&nbsp; I have also updated all the screenshots so they reflect the Windows 2012 R2 environment in my lab.&nbsp; I hope everyone finds this useful! <p>As a Windows administrator, you almost certainly have used Group Policies to control the settings deployed to the clients of your Active Directory infrastructure.&nbsp; But with Group Policies getting such heavy use, not as many administrators fully understand how Group Policy Objects (GPOs) are structured.&nbsp; In this post, I will discuss the structure of GPOs in order to help bring greater understanding to this topic.&nbsp; When you&#39;re troubleshooting Group Policies in your environment, it&#39;s helpful to understand how they&#39;re structured, and hopefully this post will clear up a bit of that mystery.  <p>Group Policy Objects are actually composed of two parts, the Group Policy Container (GPC) which exists in Active Directory and the Group Policy Template (GPT) where the actual content of your GPOs resides.&nbsp; A third component, known as Client-Side Extensions (CSEs) can be found on client devices and are necessary for them to properly process the Group Policies assigned to them.  <p>Before we go through these individual pieces, take a look at how GPOs show up when viewed through the Group Policy Management Console (GPMC).  <p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_3062DD95.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_3062DD95.png"><img title="image" style="border-left-width:0px;border-right-width:0px;border-bottom-width:0px;display:inline;border-top-width:0px;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_thumb_39771B29.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_thumb_5F00_39771B29.png" width="603" height="423" /></a>  <p>In the early days of Active Directory, the only real way to get to a GPO was to open the location where it was linked (a domain, organizational unit, or site).&nbsp; This made it appear that the GPOs existed at those place in the directory when they were actually only linked to those locations so that their settings would apply to the specified objects they contained (such as the computer objects within a particular OU).&nbsp; With the GPMC, it&#39;s much clearer to see that GPOs do not reside at these different points of the directory but instead exist separately and are only linked to these different levels.  <p>To see an example of where a GPO is linked, you can check the Scope tab of your selected GPO within the GPMC, as shown below.  <p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_08E39D71.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_08E39D71.png"><img title="image" style="border-left-width:0px;border-right-width:0px;border-bottom-width:0px;display:inline;border-top-width:0px;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_thumb_2E723C34.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_thumb_5F00_2E723C34.png" width="601" height="422" /></a>  <p>You can see from this picture that the GPO I created named <em>Event Log Size </em>is linked to the Computers OU within the cert.local domain.&nbsp; You can further see that the link is enabled (meaning the policy will apply), but it is not enforced (meaning that the policy can be blocked if the administrator of the Computers OU wishes to prevent the policy applying).  <p>But even the GPMC&#39;s view of where GPOs reside is a bit misleading as there really is no Group Policy Object container in Active Directory.&nbsp; Instead, the actual structure of the GPO is laid out as follows.  <p><strong>Group Policy Container (GPC)</strong>  <p>The first piece of the GPO, while not within a container called Group Policy Objects, is still found within Active Directory.&nbsp; In order to see it, there are several options.&nbsp; The most common is to use Active Directory Users and Computers.&nbsp; If you choose this tool, you&#39;ll need to take the following steps to see the appropriate folder:  <ol> <li>Open <strong>Active Directory Users and Computers</strong> (you can do this by typing DSA.MSC at <strong>Start/Run</strong>)  </li><li>Select <strong>View</strong> from the menu bar and ensure <strong>Advanced Features</strong> is selected (if not, select it)  </li><li>Expand the <strong>System</strong> container and navigate to the <strong>Policies</strong> container</li></ol> <p>If you don&#39;t enable Advanced Features, you won&#39;t see the System container.&nbsp; But after this is enabled, you should have a screen similar to the one below:  <p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_522DF47F.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_522DF47F.png"><img title="image" style="border-left-width:0px;border-right-width:0px;border-bottom-width:0px;display:inline;border-top-width:0px;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_thumb_118E38C1.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_thumb_5F00_118E38C1.png" width="580" height="407" /></a>  <p>Notice that there are three containers, each with a string of numbers.&nbsp; Each of these represents a different GPO (the string of numbers is the Globally Unique Identifier, or GUID, of each GPO).&nbsp; Within each of these containers you&#39;ll see a Machine and User container.&nbsp; These contain specific information related to the User and Machine nodes of the GPO itself (as you might expect, the Machine node refers to computer settings and the User node refers to user settings).  <p>NOTE: To be clear, a GPO can apply settings to both computer and user objects in Active Directory.&nbsp; It is customary to have a GPO apply to one, but not both, of these.&nbsp; There are separate groupings for users and computers available in each GPO as we will see later.  <p>Another tool that you can use to view these folders is LDP.&nbsp; To use LDP to see these folders, take the following steps:  <ol> <li>Start LDP by typing LDP.EXE at <strong>Start/Run</strong>  </li><li>Select <strong>Connections</strong> from the menu bar and select <strong>Connect...</strong> to connect to the Domain Controller of your choice.&nbsp; Select <strong>OK</strong>  <ol> <li>enter the fully qualified domain name of the Domain Controller  </li><li>enter port 389 since you&#39;re doing an LDAP query</li></ol> </li><li>Select <strong>Connections</strong> again and choose <strong>Bind...</strong>  <ol> <li>Make sure you are binding to the directory with an account that has sufficient permissions to do an LDAP query</li></ol> </li><li>Select <strong>View</strong> and choose <strong>Tree</strong>.&nbsp; Enter the distinguished name of your domain (for example: <em>dc=cert,dc=local</em>).&nbsp; Select <strong>OK</strong>  </li><li>In the left-hand column, expand the directory tree and navigate to Policies under the System container</li></ol> <p>There is one big difference when using LDP, which becomes immediately obvious after selecting one of the GPO nodes.&nbsp; When you double-click it, you will suddenly see a great deal of information in the right-hand pane.&nbsp; This is the critical directory information that client machines use when processing GPOs.&nbsp; These settings allow clients to understand where the content of the policy is, which Client-Side Extensions will be needed to process the GPO content, etc. (all of this will be explained as we proceed, so if you don’t understand any of this yet, don’t worry)  <p>Here is a screenshot of what you&#39;ll see within the LDP window:  <p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_5E549008.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_5E549008.png"><img title="image" style="border-left-width:0px;border-right-width:0px;border-bottom-width:0px;display:inline;border-top-width:0px;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_thumb_400C69C3.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_thumb_5F00_400C69C3.png" width="598" height="306" /></a>  <p>Looking at the details of our selected GPO, there are several attributes which are of special interest to us:  <ul> <li><strong><em>displayName</em></strong>: This attribute is the human-friendly name of your GPO  </li><li><strong><em>gPCFileSysPath</em></strong>: This attribute points clients to the location where the GPO content can be found.&nbsp; Collectively, this is known as the Group Policy Template, which is housed in a share known as SYSVOL  </li><li><strong><em>gPCMachineExtensionNames</em></strong>: Here is the list of Client-Side Extensions (CSEs) that will be needed by the client in order to process all of the machine-side settings configured for this GPO  </li><li><strong><em>gPCUserExtensionNames</em></strong>: This attribute contains the list of CSEs that will be needed to process the user-side settings.&nbsp; As there are no user-side settings configured in this GPO, the attribute is not populated (and thus not displayed)</li></ul> <p>Another important attribute is gPLink and while it&#39;s not found as part of the GPO itself, you can find this attribute everywhere that the GPO is linked.&nbsp; This allows objects within these other containers to know that there is a GPO it needs to process.&nbsp; In the screenshot below (just showing the right-hand pane of LDP), you can see that the gPLink attribute points to a single GPO found within the policies container of the system partition:  <p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_5B696E19.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_5B696E19.png"><img title="image" style="border-left-width:0px;border-right-width:0px;border-bottom-width:0px;display:inline;border-top-width:0px;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_thumb_76A457CB.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_thumb_5F00_76A457CB.png" width="571" height="252" /></a>  <p>From this, we can see that we are looking at the attributes of the Computers OU which is a child of the Lab OU (OU=Computers,OU=Lab).&nbsp; By checking the GUID of the GPO(s) listed in gPLink, we can easily tell which GPOs are linked to this OU.  <p>So now we&#39;ve seen the Active Directory portion of the Group Policy object.&nbsp; It contains settings so that the client can learn which GPOs it must process, which tools it will need to process them (which Client Side Extensions), and how to locate the GPO contents in order to process them.&nbsp; From here, let&#39;s take a look at how and where the GPO content itself is stored.  <p><strong>Group Policy Template (GPT)</strong>  <p>The Group Policy Template is where the meat of the GPO resides.&nbsp; By way of comparison, think of how Active Directory represents a computer object.&nbsp; It lists all the relevant attributes of the computer, but the object in Active Directory is not the computer itself.&nbsp; In a similar way, the portion of the GPO in Active Directory merely represents the attributes relevant to the GPO content.&nbsp; The content itself is known as the Group Policy Template, or GPT, and it resides in a share known as SYSVOL.&nbsp; This share, like the portion of the GPO stored in Active Directory, is replicated to every DC in the domain.&nbsp; This way, when a client queries for the GPOs it needs to process, it can locate the contents of those GPOs on the same (in most cases) DC where it&#39;s conducting the query.  <p><strong><em>NOTE: The only exception to this rule is cross-domain GPOs where a GPO is defined in another domain, but is linked in such a way that clients from neighboring domains need to apply them (a Site-level GPO is an example, since Active Directory Sites can span multiple domains).&nbsp; In the case of a cross-domain GPO, the client will need to pull content from a DC in the neighboring domain which can be a very slow process.&nbsp; For this reason, cross-domain GPOs are not generally recommended.</em></strong>  <p>To see the content of your GPOs, you&#39;ll want to look at the SYSVOL share on one of your DCs.&nbsp; You can find the SYSVOL share by navigating to %windir%/sysvol/sysvol (yes, there is a shared SYSVOL folder within a parent SYSVOL folder).&nbsp; The actual sysvol share is set to <strong>\\&lt;servername&gt;\sysvol</strong>&nbsp; as can be seen if you type NET SHARE within a command prompt window:  <p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_51A69752.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_51A69752.png"><img title="image" style="border-left-width:0px;border-right-width:0px;border-bottom-width:0px;display:inline;border-top-width:0px;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_thumb_35986918.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_thumb_5F00_35986918.png" width="585" height="297" /></a>  <p>Within the SYSVOL folder, you will see the same list of GPOs that appear within Active Directory&#39;s System/Policies container.&nbsp; These folders are where the actual settings of your GPO are contained.&nbsp; Depending on the number of settings you&#39;ve put in place, there will be more or less of them present in each folder.&nbsp; Regardless, you are guaranteed to have at least the following folders/files within each of your GPOs:  <ul> <li>%windir%  <ul> <li>sysvol  <ul> <li>sysvol (<em>shared as <strong>\\servername\sysvol</strong></em>)  <ul> <li>&lt;domain name&gt;  <ul> <li>Policies  </li><li>scripts</li></ul></li></ul></li></ul></li></ul></li></ul> <p>Within the policies folder, you&#39;ll find the various GPOs and their configured settings.&nbsp; Again, the following folders/files are guaranteed to be present for every GPO in your domain:  <ul> <li>Policies  <ul> <li>&lt;GPO GUID&gt;  <ul> <li>Machine (<em>folder containing the computer-side settings of the GPO</em>)  </li><li>User (<em>folder containing the user-side settings of the GPO</em>)  </li><li>GPT.INI (<em>file containing the GPO&#39;s configuration settings</em>)</li></ul></li></ul></li></ul> <p>Depending on what you&#39;ve configured, the Machine and User folders may or may not contain additional content.&nbsp; As an illustration, lets take a look at the contents of a GPO I&#39;ve configured to set the various Event Logs on my clients to their maximum size.&nbsp; First, here is the Group Policy Management Editor showing the settings I&#39;ve configured.&nbsp; This is the tool you&#39;ll be working with when you configure the settings for your own environment.</p> <p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_74F8AD59.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_74F8AD59.png"><img title="image" style="border-left-width:0px;border-right-width:0px;border-bottom-width:0px;display:inline;border-top-width:0px;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_thumb_58EA7F1F.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_thumb_5F00_58EA7F1F.png" width="590" height="422" /></a>  <p>If you need to know how to launch this tool, you do so from within the Group Policy Management Console by right-clicking your GPO and selecting <strong>Edit...</strong> as shown below.  <p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_4AAE96E0.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_4AAE96E0.png"><img title="image" style="border-left-width:0px;border-right-width:0px;border-bottom-width:0px;display:inline;border-top-width:0px;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_thumb_3070BE6D.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_thumb_5F00_3070BE6D.png" width="335" height="392" /></a>  <p>So now that you understand how to make these changes, what does the GPT look like once you&#39;ve made them?&nbsp; Below is a series of screenshots to answer that question.  <p>First, here is the file structure of the GPT, showing the GPO I&#39;ve edited with its top level folders visible in the right-hand pane  <p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_2DCA936D.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_2DCA936D.png"><img title="image" style="border-left-width:0px;border-right-width:0px;border-bottom-width:0px;display:inline;border-top-width:0px;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_thumb_5D883BEC.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_thumb_5F00_5D883BEC.png" width="592" height="200" /></a>  <p>You&#39;ll notice the file called GPT (it&#39;s actually <strong>GPT.INI</strong>, though the screenshot hides the file extension).&nbsp; This file contains the configuration settings for this GPO, which includes its current version number (which is updated every time a change to the GPO is made) and the default GPO display name (which is the same for every GPO you create, so don&#39;t worry that it&#39;s not the name you gave it in the GPMC).&nbsp; Here is how that file looks (<strong>NOTE: You can open GPT.INI with Notepad, but make sure you don&#39;t accidentally save it as a .txt file or it will impact your GPOs ability to do its job</strong>)  <p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_239B89B1.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_239B89B1.png"><img title="image" style="border-left-width:0px;border-right-width:0px;border-bottom-width:0px;display:inline;border-top-width:0px;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_thumb_3268503A.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_thumb_5F00_3268503A.png" width="585" height="413" /></a>  <p>To see the actual settings we&#39;ve configured for this GPO, we need to expand the Machine folder (because this is a computer-side setting), which reveals the following:  <p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_51AD87BE.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_51AD87BE.png"><img title="image" style="border-left-width:0px;border-right-width:0px;border-bottom-width:0px;display:inline;border-top-width:0px;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_thumb_506E1041.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_thumb_5F00_506E1041.png" width="589" height="414" /></a>  <p>You&#39;ll notice that there is a folder called <strong>SecEdit</strong>, which contains the security-specific settings of this GPO.&nbsp; The file within the SecEdit folder is <strong>GptTmpl.inf</strong>.&nbsp; It&#39;s this file that contains the specific information that your client needs to configure its settings.&nbsp; Because we&#39;ve configured this GPO so that its Event Logs are set at the maximum size, we would expect that this file would contain information directing the client to make this change.&nbsp; By opening the file we can see that its contents do exactly as we would expect, as shown below (<strong>NOTE: you can edit it with Notepad, but make sure you don&#39;t accidentally save it [or <em>GPT.INI</em>] as a .txt file after looking at it!</strong>).  <p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_4569314C.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_4569314C.png"><img title="image" style="border-left-width:0px;border-right-width:0px;border-bottom-width:0px;display:inline;border-top-width:0px;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_thumb_14D5B394.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_thumb_5F00_14D5B394.png" width="593" height="416" /></a>  <p>We can see from this picture that GptTmpl.inf has clear instructions for our client machine to set its Application, Security and System Event Logs to the size we have specified.  <p><strong>Summary</strong>  <p>In the present article, I have attempted to outline the first steps that an administrator needs to know in or to get his hands around administering Group Policies in Active Directory Domain Services.&nbsp; In part 2 of this series, we&#39;ll look at details of GPO processing, with an emphasis on Client-Side Extensions (CSEs).&nbsp; We&#39;ll also discuss how GPOs are replicated, and how a client knows it&#39;s getting the latest version of its GPO (including knowing whether the GPC and GPC are synchronized with each other).  </p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p>]]></content:encoded>
    </item>
    <item>
      <title>AD DS: Identifying Attributes That Are Members of the Partial Attribute Set in Active Directory</title>
      <link>https://docs.microsoft.com/archive/blogs/scotts-it-blog/ad-ds-identifying-attributes-that-are-members-of-the-partial-attribute-set-in-active-directory</link>
      <pubDate>Sat, 28 Feb 2015 09:00:35 GMT</pubDate>
      <dc:creator><![CDATA[srachui]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.technet.microsoft.com/scotts-it-blog/2015/02/28/ad-ds-identifying-attributes-that-are-members-of-the-partial-attribute-set-in-active-directory/</guid>
      <description><![CDATA[This is the second post that I’m bringing over from my previous TechNet blog.&nbsp; Even though it...]]></description>
      <content:encoded><![CDATA[<p>This is the second post that I’m bringing over from my previous TechNet blog.&nbsp; Even though it references a Windows Server 2008 forest, the techniques are the same, so I have had to do very little editing.&nbsp; Everything shown below works equally well in both Windows Server 2008/R2 and Windows Server 2012/R2.&nbsp; Again, I hope you find it useful information!  <p>In my earlier post, I showed how to add an attribute to the Partial Attribute Set (PAS) in Active Directory.&nbsp; But how can you tell which attributes are already part of the Partial Attribute Set in the first place?&nbsp; You can certainly check each one manually, but that will take forever.&nbsp; Is there any other way that&#39;s more convenient?  <p>In fact, let me show two ways to do it that will make life a great deal easier.  <p><strong>USING LDP</strong>  <p>The <a href="https://technet.microsoft.com/en-us/library/cc771022%28WS.10%29.aspx">LDP</a> utility<em></em> is a graphical LDAP tool for use with Active Directory that allows us to perform very granular searches against Active Directory.&nbsp; It was first made available in the Windows 2000 Support Tools, but is included with Windows 2008/2012 and is available if you have Active Directory Domain Services installed as a role on your server.  <p>To use LDP to list the attributes in our Schema that belong to the Partial Attribute Set, we want to take the following steps:  <ul> <li>Open the LDP utility by going to <strong>Start</strong> and entering LDP in the initial search window.&nbsp; By default, it will look like this (not much, right?):</li></ul> <p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_0CD437FC.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_0CD437FC.png"><img title="image" style="border-left-width:0px;border-right-width:0px;border-bottom-width:0px;float:none;margin-left:auto;display:block;border-top-width:0px;margin-right:auto;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_thumb_7BF224BC.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_thumb_5F00_7BF224BC.png" width="431" height="346" /></a> </p> <ul> <li>Connect to a Domain Controller by selecting <strong>Connection </strong>and choosing <strong>Connect...</strong>  <ul> <li>In the Server field, type the fully qualified domain name of the Domain Controller we are connecting to.  </li><li>In the Port field, enter 389 (since we are doing an LDAP query, not a Global Catalog query)</li></ul></li></ul> <blockquote> <p>At this point, the information we have entered looks like the following:</p></blockquote> <p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_66970005.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_66970005.png"><img title="image" style="border-left-width:0px;border-right-width:0px;border-bottom-width:0px;float:none;margin-left:auto;display:block;border-top-width:0px;margin-right:auto;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_thumb_5A97A082.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_thumb_5F00_5A97A082.png" width="316" height="166" /></a>  <p>Once we select <strong>OK</strong>, we will see the RootDSE information on the right-hand screen.&nbsp; This information contains the top-level information about AD DS for our local domain controller and can be useful in understanding the basics of our directory structure.&nbsp; The screenshot below shows my lab DC after I’ve connected.&nbsp; On the right-hand side is the RootDSE information:  <p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_1C31DCCF.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_1C31DCCF.png"><img title="image" style="border-left-width:0px;border-right-width:0px;border-bottom-width:0px;float:none;margin-left:auto;display:block;border-top-width:0px;margin-right:auto;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_thumb_68F83416.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_thumb_5F00_68F83416.png" width="585" height="314" /></a>  <p>At this point, we&#39;ve connected, but we still need to authenticate to Active Directory.&nbsp; To do this, we&#39;ll do an LDAP Bind.  <ul> <li>Select <strong>Connection</strong> again in the menu bar and this time choose <strong>Bind...</strong>  </li><li>Choose how we want to bind to Active Directory.&nbsp; The screenshot below shows the choices I made for my example:</li></ul> <p>&nbsp;<a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_7F506A0C.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_7F506A0C.png"><img title="image" style="border-left-width:0px;border-right-width:0px;border-bottom-width:0px;float:none;margin-left:auto;display:block;border-top-width:0px;margin-right:auto;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_thumb_7A6DB650.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_thumb_5F00_7A6DB650.png" width="321" height="292" /></a> </p> <blockquote> <p>Note that in my case, I’ve chosen to bind with the credentials I’ve used to log on.&nbsp; It is also possible to bind with other credentials, perform a simple bind, etc.&nbsp; Another thing that is recommended is that after binding, all further traffic is encrypted (the default).&nbsp; Though this is not strictly required, it is the more secure option so we’ll leave it checked and select ‘OK’.</p> <p>Once we have successfully bound to the directory, we will see information similar to this on the right-hand pane:</p> <p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_2406A2E6.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_2406A2E6.png"><img title="image" style="border-left-width:0px;border-right-width:0px;border-bottom-width:0px;float:none;margin-left:auto;display:block;border-top-width:0px;margin-right:auto;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_thumb_6F68D75B.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_thumb_5F00_6F68D75B.png" width="440" height="117" /></a></p></blockquote> <p>If any other type of message is returned, we likely have not used the right credentials and will need to get that resolved before proceeding.  <p>At this point, we have connected to our DC and have successfully completed an LDAP bind to authenticate against the directory.&nbsp; Now it&#39;s time to do what we came for.  <p>To use LDP to find out which attributes belong to the Partial Attribute Set, take the following steps:  <ul> <li>Go to <strong>Browse</strong> in the menu bar and select <strong>Search (Ctrl+S)</strong>  </li><li>In the resulting <strong>Search</strong> window, enter the top of the search tree (where our search will begin) in the <strong>Base DN</strong> field.&nbsp; This will take the form of: <em>CN=Schema,CN=Configuration,DC=&lt;domain component&gt;,DC=com</em>  </li><li>We will also enter our query into the Filter field as follows: <em>(&amp;(objectClass=attributeSchema)(isMemberOfPartialAttributeSet=TRUE))</em>  </li><li>In the <strong>Scope</strong>, we want to select <strong>Subtree</strong>.<strong>&nbsp; </strong>In <strong>Attributes</strong> we will select whichever attributes we wish to be displayed (for example, if we want only the name of the attribute displayed in your list, enter &#39;name&#39;). </li></ul> <p>The resulting window is what we come up with after entering this information:</p> <p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_7C65481D.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_7C65481D.png"><img title="image" style="border-left-width:0px;border-right-width:0px;border-bottom-width:0px;float:none;margin-left:auto;display:block;border-top-width:0px;margin-right:auto;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_thumb_302D3E6F.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_thumb_5F00_302D3E6F.png" width="386" height="241" /></a> </p> <ul> <li>If we want to increase the default page size, you can select <strong>Options</strong> and enter 9999 in the <strong>Page size</strong> field of the resulting <strong>Search options</strong> window. </li></ul> <p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_06B8FD2F.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_06B8FD2F.png"><img title="image" style="border-left-width:0px;border-right-width:0px;border-bottom-width:0px;float:none;margin-left:auto;display:block;border-top-width:0px;margin-right:auto;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_thumb_477FF4F3.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_thumb_5F00_477FF4F3.png" width="314" height="269" /></a> </p> <ul> <li>Select <strong>Run</strong> to execute your query.</li></ul> <p>When your query runs, every object that is part of the Partial Attribute Set (which has its attribute of <em>isMemberOfPartialAttributeSet </em>set to TRUE) will be displayed as shown by the sample of my output below:  <p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_026727BD.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_026727BD.png"><img title="image" style="border-left-width:0px;border-right-width:0px;border-bottom-width:0px;display:inline;border-top-width:0px;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_thumb_091CC1F1.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_thumb_5F00_091CC1F1.png" width="577" height="176" /></a>  <p><strong>USING LDIFDE</strong>  <p>For those that prefer to work from the command line or within PowerShell (yes, we can run LDIFDE from the PowerShell console), we can also use the <a href="https://technet.microsoft.com/en-us/library/cc731033%28WS.10%29.aspx">LDIFDE</a> tool to query Active Directory for this information (personally, I like LDP but I admit that getting around in it can be a bit challenging at time).&nbsp; When using LDIFDE, the actual content of the query is largely the same as outlined above, though we&#39;ll need to know how to get LDIFDE to give us the output we desire.&nbsp; And if we’re dealing with a lot of information that we need to work with over time, LDIFDE is the preferred method of gathering this information. <p>To query Active Directory via LDIFDE, open a command prompt or PowerShell console (we&#39;ll once again need to make sure we’re using elevated credentials) and type the following:  <p><em><strong><font color="#0000ff">LDIFDE -s &lt;fully qualified server name&gt; -d &lt;Base DN&gt; -r &lt;search criteria&gt; -l &lt;list of attributes to export&gt; -f &lt;file name where the query will be written&gt;</font></strong></em>  <p>On my server, the command looks as follows:  <p>&nbsp;<a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_7185147D.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_7185147D.png"><img title="image" style="border-top:0px;border-right:0px;border-bottom:0px;float:none;margin-left:auto;border-left:0px;display:block;margin-right:auto;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_thumb_591A2282.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_thumb_5F00_591A2282.png" width="599" height="133" /></a>  <p>A couple of comments about running LDIFDE: <ul> <li>-s is not a required parameter if we are querying the local computer.&nbsp; It is always an option, but is typically used if we are querying remote instances of Active Directory</li> <li>-d is the distinguishedName that I am searching.&nbsp; In this case, I am searching the entire Schema container (and note that while cn=Schema makes it appear that it is a child of the Configuration container, it is actually a separate partition and does not replicate as a component of the Configuration partition)</li> <li>-r provides us the search criteria for the information we’re seeking.&nbsp; In my example, I have specified only objects of the ‘attributeSchema’ class (yes, there is an object type that specifies attributes…a little confusing, maybe, but necessary).&nbsp; I have also specified which particular attribute of the attributeSchema objects I am interested in.&nbsp; In this case, I want only those where the attribute ‘isMemberOfPartialAttributeSet’ is equal to TRUE</li> <li>-l lists the attributes I want returned.&nbsp; So in my present example, if I find an object of the attributeSchema class with the attribute ‘isMemberOfPartialAttributeSet’ equal to TRUE, I want to list its CN value</li> <li>-f specifies the file where my output will be stored</li></ul> <p>As can be see from the screenshot above, running this command returned 196 entries.&nbsp; Below is a screenshot of a sample of those entries as found in the pas.txt file created by LDIFDE:</p> <p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_694D9C8E.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_694D9C8E.png"><img title="image" style="border-top:0px;border-right:0px;border-bottom:0px;border-left:0px;display:inline;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_thumb_0516D3DA.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_thumb_5F00_0516D3DA.png" width="589" height="240" /></a> </p> <p>Note that this information contains the distinguishedName of the attribute even though I did not specifically ask for it.&nbsp; The output also takes the form of an LDF file, which is used to update and modify Active Directory objects.&nbsp; The ‘changetype’ entries for each of the returned objects specifies what LDIFDE would do if I attempted to import this file.&nbsp; It would attempt to add these objects into Active Directory (since they are already present in AD DS, the operation would fail, but the export assumes I might want to use this file to do an import later, so it sets this value for me).</p> <p><strong>Summary</strong></p> <p>Either way that we choose to determine which attributes are members of the Partial Attribute Set, we&#39;ll find that both LDP and LDIFDE have numerous uses in our day-to-day work as an Active Directory Administrator.&nbsp; This is just one example of how much value these tools can provide.&nbsp; Even if we don’t ever want to look up or modify the Partial Attribute Set, every AD DS administrator would be very wise to know both of these tools if we&#39;re to optimize our efforts in supporting our Active Directory infrastructures.  </p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p>]]></content:encoded>
    </item>
    <item>
      <title>AD DS: Global Catalogs and the Partial Attribute Set</title>
      <link>https://docs.microsoft.com/archive/blogs/scotts-it-blog/ad-ds-global-catalogs-and-the-partial-attribute-set</link>
      <pubDate>Sat, 28 Feb 2015 07:51:41 GMT</pubDate>
      <dc:creator><![CDATA[srachui]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.technet.microsoft.com/scotts-it-blog/2015/02/28/ad-ds-global-catalogs-and-the-partial-attribute-set/</guid>
      <description><![CDATA[Today, I am to revise and re-post some older technical articles that I put together on another...]]></description>
      <content:encoded><![CDATA[<p>Today, I am to revise and re-post some older technical articles that I put together on another TechNet blog which I have since retired.&nbsp; In the interest of consolidating the posts so that they can be found at a single location, I am re-posting here, with updates/modifications as appropriate.&nbsp; I hope you enjoy them!  <p>In the past, while working with a customer who was trying to understand why a Global Catalog query might be taking longer than expected, a question came up regarding the Partial Attribute Set (or PAS as it’s often called) and what it is exactly.&nbsp; Because not everyone understands this concept, I thought I&#39;d write up a quick post about it.  <p>To begin, Active Directory is designed so that the objects you need (users, groups, computers, printers, etc.) don&#39;t just sit on one computer.&nbsp; Instead, they are replicated throughout the Active Directory domain so that users in California can access a Domain Controller in Los Angeles and see the same objects as the user logging into a Domain Controller in New York.&nbsp; If you have only a single Active Directory domain, these objects will be replicated to every Domain Controller in that domain automatically.  <p>Having said that, the Active Directory forest for many large companies comprises more than one domain.&nbsp; And if you have a large enterprise with multiple domains, an added layer of complexity is introduced that administrators must be aware of.&nbsp; Because the amount of data within an AD DS domain can be quite extensive (hundreds of thousands, or even millions of objects), Active Directory is designed to replicate these objects only to Domain Controllers within the same domain.&nbsp; If another domain exists, the Domain Controllers for that other domain will not receive a copy of that information.  <p><strong>Partitions and Directory Replication</strong>  <p>Before I proceed, let me clarify that last statement a bit.&nbsp; Active Directory (AD DS) is based on something called the multi-master model.&nbsp; This means that every Domain Controller within the replication scope of the objects it contains will all receive a copy of those objects.&nbsp; These objects will be identical (once replication completes) on every Domain Controller receiving a copy of the object.&nbsp; Because the potential exists for large directories to consume a great deal of network bandwidth (not to mention dramatically growing the size of the NTDS.DIT database on each Domain Controller), Active Directory limits replication of its directory.  <p>To make replication more manageable, AD DS breaks its directory up into categories of data.&nbsp; Depending on which category the data belongs to, its replication scope will either be Domain or Forest-wide.&nbsp; The following table explains this:  <p>&nbsp; <div align="center"> <table cellspacing="0" cellpadding="2" width="400" align="center" border="1"> <tbody> <tr> <td valign="top" width="133">Directory Partition</td> <td valign="top" width="133">Definition</td> <td valign="top" width="133">Replication Scope</td></tr> <tr> <td valign="top" width="133">Domain </td> <td valign="top" width="133">Contains objects such as users, computers, groups and contacts</td> <td valign="top" width="133">Domain-wide</td></tr> <tr> <td valign="top" width="133">Configuration</td> <td valign="top" width="133">Contains configuration data used by the entire forest</td> <td valign="top" width="133">Forest-wide</td></tr> <tr> <td valign="top" width="133">Schema</td> <td valign="top" width="133">The rules for the forest (which objects and attributes are allowed, which attributes are required for an object, etc.)</td> <td valign="top" width="133">Forest-wide</td></tr> <tr> <td valign="top" width="133">Application (optional)</td> <td valign="top" width="133">Contains custom information specific to the application using it (DNS, for example)</td> <td valign="top" width="133">Custom based on the needs of the application</td></tr></tbody></table></div> <p>If you ever want to see these partitions directly&nbsp; to determine what each contains, the ADSI Edit tool is a good way to view this.&nbsp; From a Domain Controller or an admin workstation where the AD Tools are installed, open ADSI Edit as shown below:  <p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_57FA4186.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_57FA4186.png"><img title="image" style="border-left-width:0px;border-right-width:0px;border-bottom-width:0px;display:inline;border-top-width:0px;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_thumb_2DB02B0D.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_thumb_5F00_2DB02B0D.png" width="563" height="374" /></a>  <p>From here, right-click the ADSI Edit icon in the left-hand pane and select ‘Connect to…’ option and the following window will open:  <p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_2FA7BCDA.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_2FA7BCDA.png"><img title="image" style="border-left-width:0px;border-right-width:0px;border-bottom-width:0px;display:inline;border-top-width:0px;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_thumb_1C8920DF.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_thumb_5F00_1C8920DF.png" width="404" height="406" /></a>  <p>By choosing the drop-down list under ‘Select a well known Naming Context’, you can connect to the Domain, Configuration and Schema partitions residing on the DC you’ve chosen (though it’s hidden by the window in the picture, you can also use this window to select either the DC to which you are currently logged on or another DC in your forest)  <p>NOTE: The Naming Context known as RootDSE is not a specific partition as such.&nbsp; Instead, it represents the root of the Directory Information Tree (the DIT) for a Domain Controller.&nbsp; It contains basic information about the directory server, its capabilities and configuration.  <p>To see the information in one of these naming partitions, select it and it will be populated into ADSI Edit.&nbsp; From there, left-click the parent node and it will be possible to expand the partition to see and manipulate the data within it.&nbsp; In the screenshot below, I have selected the Default naming context (the Domain partition) for my local DC:  <p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_0035FBB6.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_0035FBB6.png"><img title="image" style="border-left-width:0px;border-right-width:0px;border-bottom-width:0px;display:inline;border-top-width:0px;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_thumb_7C505938.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_thumb_5F00_7C505938.png" width="574" height="379" /></a>  <p>For those familiar with Active Directory Users and Computers (ADUC) or the newer Active Directory Administration Center (ADAC), this structure will look familiar.&nbsp; One essential difference, however, is that ADSI Edit represents all directory objects using their distinguishedName format (for example, OU=Lab versus just Lab in ADUC).  <p>Note: We can also use ADSI Edit to connect to the application partitions as well, but that takes a few more steps than the ones listed above.&nbsp; For those interested, I will include those details in an upcoming blog so stay tuned.  <p><strong>Searching for Objects in Multiple Domains</strong>  <p>As I’ve mentioned above, in order to reduce the size of the Active Directory database and limit bandwidth due to replication, the objects within the Domain partition (also known as the Domain Naming partition) are only replicated within their own domain.&nbsp; So if you have two domains, USA and EUROPE, the users in the USA domain won&#39;t appear in the EUROPE domain and vice versa.&nbsp; Configuration and Schema objects will be replicated into both of these domains because their replication scope of forest-wide, and depending on how the Application partition is defined it can also be replicated between forests.&nbsp; But for our present discussion, we care about information in the Domain partition.  <p>What happens if a person in the EUROPE domain needs to look up a user residing in the USA domain?&nbsp; If she is an administrator, she has the choice of connecting to a Domain Controller in the USA domain, which could result in a slower response time (and this is not something average users will know how to do).&nbsp; But if she is not an admin and is using standard search tools (such as her contacts list in Outlook) and has only domain controllers in her local domain to query, all she will get is the users in her own domain.  <p><strong>The Solution: Global Catalogs</strong>  <p>The Global Catalog in Active Directory Domain Services (AD DS) a specialized type of Domain Controller that contains the full copy of the objects from its own domain, just like any other Domain Controller in the domain.&nbsp; In addition, however, Global Catalogs also contain a read-only copy of the objects belonging to the Domain Naming partition from every other domain in the forest (there is no need to do this with the Forest and Configuration partitions as these are already replicated forest-wide, and each Application partition is replicated based on what you specify).&nbsp; Given this, the user in EUROPE could simply query the Global Catalog (using port 3268 versus the standard LDAP port 389) in order to see the user object from the USA domain (applications such as Outlook do this by default so there is no need to take special steps in most cases).  <p>So far so good.&nbsp; This is a well-understood concept by most Active Directory administrators.&nbsp; But what if this user in EUROPE wants to look up a particular attribute about the user in USA and she finds that the attribute she&#39;s interested in is not there?&nbsp; If she looks up this attribute for users in EUROPE she can find it, but she can&#39;t see it if she&#39;s querying the user in the USA domain.&nbsp; This is where the Partial Attribute Set (PAS) comes in.  <p>Remember how I said that the Domain Naming partition is only replicated within the domain to preserve space and bandwidth?&nbsp; As it turns out, the PAS is also used to help preserve space on the Global Catalogs in the forest.&nbsp; To do this, AD DS designates only certain attributes to replicate to each Global Catalog.&nbsp; To clarify, every Global Catalog contains a full writeable copy of the Domain Naming partition from its own domain.&nbsp; This includes every attribute of every object in the Domain Naming partition.&nbsp; But when it comes to the objects in the Domain Naming partition from other domains, only certain attributes (those belonging to the Partial Attribute Set) are replicated between domains.&nbsp; This list includes the majority of attributes that your users will ever want, but it won&#39;t include things like certain system attributes, custom attributes defined by your business, etc.  <p>To give an example of the difference when querying an object residing on the local domain controller versus the read-only copy of the same object as seen from a Global Catalog in another domain, consider the following list of attributes:  <p><em>ATTRIBUTES FROM A STANDARD LDAP QUERY</em>  <p>dn: CN=scott,OU=Users,OU=Lab,DC=cert,DC=local<br />changetype: add<br />objectClass: top<br />objectClass: person<br />objectClass: organizationalPerson<br />objectClass: user<br />cn: scott<br />givenName: scott<br />distinguishedName: CN=scott,OU=Users,OU=Lab,DC=cert,DC=local<br />instanceType: 4<br />whenCreated: 20150226135445.0Z<br />whenChanged: 20150226140527.0Z<br />displayName: scott<br />uSNCreated: 12733<br />memberOf: CN=Domain Admins,CN=Users,DC=cert,DC=local<br />memberOf: CN=Enterprise Admins,CN=Users,DC=cert,DC=local<br />memberOf: CN=Schema Admins,CN=Users,DC=cert,DC=local<br />uSNChanged: 12837<br />name: scott<br />objectGUID:: UDm/YKSQU0qG8Uvq6Is8xA==<br />userAccountControl: 66048<br />badPwdCount: 0<br />codePage: 0<br />countryCode: 0<br />badPasswordTime: 0<br />lastLogoff: 0<br />lastLogon: 130695726274467027<br />pwdLastSet: 130694324858513594<br />primaryGroupID: 513<br />objectSid:: AQUAAAAAAAUVAAAAoDvDG0e5tebi0eW1UAQAAA==<br />adminCount: 1<br />accountExpires: 9223372036854775807<br />logonCount: 12<br />sAMAccountName: scott<br />sAMAccountType: 805306368<br />userPrincipalName: scott@cert.local<br />objectCategory: CN=Person,CN=Schema,CN=Configuration,DC=cert,DC=local<br />dSCorePropagationData: 20150226140527.0Z<br />dSCorePropagationData: 16010101000000.0Z<br />lastLogonTimestamp: 130694326252478417  <p>Now, compare this to the list of attributes when querying the same object on a Global Catalog.  <p><em>ATTRIBUTES FROM A GLOBAL CATALOG QUERY</em>  <p>dn: CN=scott,OU=Users,OU=Lab,DC=cert,DC=local<br />changetype: add<br />objectClass: top<br />objectClass: person<br />objectClass: organizationalPerson<br />objectClass: user<br />cn: scott<br />givenName: scott<br />distinguishedName: CN=scott,OU=Users,OU=Lab,DC=cert,DC=local<br />instanceType: 4<br />whenCreated: 20150226135445.0Z<br />whenChanged: 20150226140527.0Z<br />displayName: scott<br />uSNCreated: 12733<br />memberOf: CN=Domain Admins,CN=Users,DC=cert,DC=local<br />memberOf: CN=Enterprise Admins,CN=Users,DC=cert,DC=local<br />memberOf: CN=Schema Admins,CN=Users,DC=cert,DC=local<br />uSNChanged: 12837<br />name: scott<br />objectGUID:: UDm/YKSQU0qG8Uvq6Is8xA==<br />userAccountControl: 66048<br />primaryGroupID: 513<br />objectSid:: AQUAAAAAAAUVAAAAoDvDG0e5tebi0eW1UAQAAA==<br />sAMAccountName: scott<br />sAMAccountType: 805306368<br />userPrincipalName: scott@cert.local<br />objectCategory: CN=Person,CN=Schema,CN=Configuration,DC=cert,DC=local<br />dSCorePropagationData: 20150226140527.0Z<br />dSCorePropagationData: 16010101000000.0Z<br />lastLogonTimestamp: 130694326252478417  <p>The difference in these lists is that only the attributes belonging to the Partial Attribute Set for user objects is populated in the Global Catalog&#39;s copy of the Administrator account.&nbsp; And if you want to try this test yourself, all that’s needed is to run the LDIFDE command line tool that is present on every Domain Controller and can be added to administrator workstations.  <p>For the standard LDAP Query (the one connecting to the writeable Domain Naming partition in my local domain), I used the following LDIFDE command:  <p><em><font color="#0000ff"><strong>ldifde -f c:\scripts\output-389.txt -d &quot;CN=scott,OU=Users,OU=Lab,DC=cert,DC=local&quot; –t 389</strong></font></em>  <p>When doing a Global Catalog query, my LDIFDE command line looked like the following:&nbsp; <p><em><strong><font color="#0000ff">ldifde -f c:\scripts\output-3268.txt -d &quot;CN=scott,OU=Users,OU=Lab,DC=cert,DC=local&quot; –t 3268</font></strong></em>  <p>To understand the parameters I used, consider the following:  <ul> <li>-f is the parameter which allows me to specify the filepath where I will store the output of the query.&nbsp; The name I chose is entirely up to me.&nbsp; In each case, I specified which port I was connecting to so that review of the results would be easier to interpret.  </li><li>-d is the distinguished name I queried (known as the RootDN in the help files).&nbsp; If I had instead chosen to query a higher-level portion of the directory tree (such as OU=Lab,DC=cert,DC=local) I would have gotten the information for that object plus every object beneath it.&nbsp; In my case, I only wanted a single object (CN=scott) so I queried that object specifically.&nbsp; Since there are no child objects beneath CN=scott, only one object is returned.  </li><li>-t is where I specify the port I am querying.&nbsp; In the first query, I specify the standard LDAP port (389) and in the second query I specify the GC port (3268).&nbsp; This allows me to see the full set of populated attributes versus the list of attributes replicated to the read-only copy of the Domain Naming partition contained by the Global Catalog</li></ul> <p>NOTE: In my test, I used a single Domain Controller for both queries.&nbsp; My lab has only a single domain and I was still able to see the differences between querying the writeable copy of the Domain Naming partition and the read-only copy present in the Global Catalog.</p> <p><strong>Extending the Partial Attribute Set</strong></p> <p>So now we understand the difference between the Domain Naming partition and the read-only copy sent to all Global Catalogs.&nbsp; But what if we need to include some additional attributes in the Partial Attribute Set? For example, what if there is an essential attribute needed by our employees in every domain of our forest?&nbsp; How do we get that attribute to replicate to the Global Catalog?&nbsp; In this case, if we need additional attributes to be replicated as part of the PAS, we can make this change fairly easily in the Active Directory Schema (<strong>NOTE: Do not make any changes in the AD Schema without thoroughly testing it in a non-production environment</strong>).&nbsp; <p>Below is a step-by-step description of how to tell whether an attribute is part of the Partial Attribute Set and how to change it if needed.&nbsp; To do this, we will need to use an account that is a member of the Schema Administrators group.  <ol></ol> <ul> <li>Connect to the Domain Controller that houses the Schema Master role for the forest (all Schema changes must be made on the DC housing the Schema Master FSMO role)  </li><li>Before doing anything else, make sure that the Active Directory Schema snap-in is available.  <ul> <li>Open a blank MMC window by typing <strong>mmc.exe</strong> from the <strong>Run </strong>window.  </li><li>Within the MMC that opens, select <strong>File</strong> and then <strong>Add/Remove Snap-in</strong>.  </li><li>From the resulting list, look for <strong>Active Directory Schema </strong>as shown below:</li></ul></li></ul> <p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_1F38CCFC.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_1F38CCFC.png"><img title="image" style="border-left-width:0px;border-right-width:0px;border-bottom-width:0px;float:none;margin-left:auto;display:block;border-top-width:0px;margin-right:auto;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_thumb_4D4ACB09.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_thumb_5F00_4D4ACB09.png" width="534" height="378" /></a> </p> <ul> <ul> <li>If the snap-in is not present (as is the case in the screenshot above), type the following in a an elevated command prompt:</li></ul></ul> <blockquote> <p align="center"><em>regsvr32 schmmgmt.dll</em></p></blockquote> <ul> <ul> <li>If successful, the following window will be displayed:</li></ul></ul> <p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_1A35CDA6.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_1A35CDA6.png"><img title="image" style="border-left-width:0px;border-right-width:0px;border-bottom-width:0px;float:none;margin-left:auto;display:block;border-top-width:0px;margin-right:auto;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_thumb_3D8A745E.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_thumb_5F00_3D8A745E.png" width="528" height="270" /></a> </p> <ul> <ul> <li>Once this has been run, check again under <strong>Add/Remove Snap-in</strong> and <strong>Active Directory Schema </strong>will now be available:</li></ul></ul> <p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_5C6378ED.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_5C6378ED.png"><img title="image" style="border-left-width:0px;border-right-width:0px;border-bottom-width:0px;float:none;margin-left:auto;display:block;border-top-width:0px;margin-right:auto;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_thumb_3D457D6F.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_thumb_5F00_3D457D6F.png" width="530" height="376" /></a> </p> <ul> <li>From within the Active Directory Schema snap-in, navigate to the Attributes folder and scroll down on the right to find the desired attribute.&nbsp; In our example, perhaps the ‘drink’ attribute is considered essential (it’s a bit unusual, I admit, but never overestimate what may be considered essential to a company)</li></ul> <p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_5592B481.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_5592B481.png"><img title="image" style="border-left-width:0px;border-right-width:0px;border-bottom-width:0px;float:none;margin-left:auto;display:block;border-top-width:0px;margin-right:auto;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_thumb_5E3D4FD1.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_thumb_5F00_5E3D4FD1.png" width="534" height="276" /></a> </p> <ul> <li>Right-click the attribute and select <strong>Properties</strong>.  </li><li>In the resulting window, select the check box that says <strong>Replicate this attribute to the Global Catalog</strong> and select <strong>OK</strong> to close the window. </li></ul> <p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_463C001A.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_463C001A.png"><img title="image" style="border-left-width:0px;border-right-width:0px;border-bottom-width:0px;float:none;margin-left:auto;display:block;border-top-width:0px;margin-right:auto;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_thumb_7E7D07E3.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_thumb_5F00_7E7D07E3.png" width="373" height="410" /></a> </p> <blockquote> <p>Selecting this checkbox adds the attribute to the Partial Attribute Set so that it is now included when an object is replicated to the Global Catalog</p></blockquote> <ul> <li>Repeat this process with any additional attributes that need to be added to the Partial Attribute Set </li></ul> <p>Once these changes have been made, we will need to allow time for replication to complete (remember that the Schema must replicate to every Domain Controller in the forest and depending on the scope of the forest, the replication topology, etc. this may take some time).&nbsp; Once replication is completed, we will want to use LDIFDE to query again as we did above to verify that the new attribute is now part of the Partial Attribute Set.</p> <p></p> <p></p> <p></p> <p></p> <p><strong>Summary</strong></p> <p>In this article, I have outlined how Global Catalogs provide read-only access to the Domain Naming partition for every domain in an Active Directory (AD DS) forest.&nbsp; I have shown how to identify the differences between querying the Domain Naming partition with LDAP and the read-only partition of the GC via port 3268.&nbsp; I have also shown how it’s possible to add (or remove) attributes from the Partial Attribute Set.&nbsp; Typically, these changes are not needed, but if there is a compelling business reason to make such a change, the functionality is available.</p> <p>Always remember when making Schema changes, it is essential to use precautions and test thoroughly in a non-production environment before implementing in production.</p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p></p>]]></content:encoded>
    </item>
    <item>
      <title>Refreshing State Messages in System Center Configuration Manager 2012</title>
      <link>https://docs.microsoft.com/archive/blogs/scotts-it-blog/refreshing-state-messages-in-system-center-configuration-manager-2012</link>
      <pubDate>Mon, 23 Feb 2015 06:56:50 GMT</pubDate>
      <dc:creator><![CDATA[srachui]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.technet.microsoft.com/scotts-it-blog/2015/02/23/refreshing-state-messages-in-system-center-configuration-manager-2012/</guid>
      <description><![CDATA[Recently, I worked with a customer who reported that his clients were not reporting accurate data in...]]></description>
      <content:encoded><![CDATA[<p>Recently, I worked with a customer who reported that his clients were not reporting accurate data in their ConfigMgr compliance reports.&nbsp; Though the clients showed the correct settings when we looked at them directly, these settings were not reflected correctly in the compliance reports.&nbsp; This is an issue that has been dealt with in the past and there is a fair amount on the internet about how to handle it.&nbsp; In this post, I want to add to that information a bit and hopefully answer a few questions that others might have when attempting to resolve this issue.</p> <p><strong>Compliance Reporting</strong></p> <p>First of all, let’s talk briefly about Compliance reporting in ConfigMgr 2012.&nbsp; I include this only for those who are unsure what I’m talking about when I use this term.&nbsp; If you&#39;re familiar with Compliance reporting, feel free to skip to the next section.</p> <p>For those of you who are still reading this section, ConfigMgr comes with a fairly extensive set of pre-configured reports to provide information about the state of your infrastructure.&nbsp; There are different types of reports to become familiar with, but the ones we care about here can be found under Monitoring\Reports\Software Updates A - Compliance as shown below:</p> <p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_557016F6.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_557016F6.png"><img title="image" style="border-left-width:0px;border-right-width:0px;border-bottom-width:0px;display:inline;border-top-width:0px;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_thumb_2D5FF888.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_thumb_5F00_2D5FF888.png" width="587" height="215" /></a> </p> <p>If you don’t see this in your environment, it’s likely you are either viewing a Site Server that is not set up with the Reporting Service Point role.&nbsp; If this role is set up on another Site Server in your environment, target the Admin Console there instead.&nbsp; If not, the following article goes through the process of setting up Reporting Services in your ConfigMgr hierarchy:</p> <p><a href="https://technet.microsoft.com/en-us/library/gg712698.aspx" target="_blank">Configuring Reporting in Configuration Manager</a></p> <p>Once reporting is set up correctly, it’s trivially easy to select one of the Compliance reports, fill out the requested information, and get the desired results.&nbsp; Sometimes, however, the results in the report might not reflect what you know to be the case in your environment.&nbsp; As an example, suppose that you have devices that are candidates for Office 2013 Service Pack 1.&nbsp; The Compliance reports should show this to help you plan for rolling out this update as needed.</p> <p>In cases like this, the very first thing to do is determine whether the issue is restricted to reporting when viewed through ConfigMgr.&nbsp; To verify this, the following test can be done:</p> <p>Open Internet Explorer on the Reporting Services Point and navigate to <a href="https://&lt;servername&gt;/reports">https://&lt;servername&gt;/reports</a> as shown below:</p> <p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_52EE974B.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_52EE974B.png"><img title="image" style="border-left-width:0px;border-right-width:0px;border-bottom-width:0px;display:inline;border-top-width:0px;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_thumb_148B6449.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_thumb_5F00_148B6449.png" width="589" height="223" /></a> </p> <p>Select the parent folder (in my lab, ConfigMgr_PR1) to see a complete list of available reports:</p> <p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_0A5C5A8D.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_0A5C5A8D.png"><img title="image" style="border-left-width:0px;border-right-width:0px;border-bottom-width:0px;display:inline;border-top-width:0px;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_thumb_1E094421.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_thumb_5F00_1E094421.png" width="587" height="305" /></a> </p> <p>If so desired, you can choose the ‘Details View” on the right-hand side.&nbsp; I find this to be helpful when navigating reports in Internet Explorer, though it’s only my preference:</p> <p>&nbsp;<a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_14B00F9E.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_14B00F9E.png"><img title="image" style="border-left-width:0px;border-right-width:0px;border-bottom-width:0px;display:inline;border-top-width:0px;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_thumb_6B3BCE5D.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_thumb_5F00_6B3BCE5D.png" width="585" height="382" /></a> </p> <p>Select the folder containing the report of interest, which in our case is Software Updates A – Compliance and choose the report of interest:</p> <p></p> <p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_40F1B7E4.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_40F1B7E4.png"><img title="image" style="border-left-width:0px;border-right-width:0px;border-bottom-width:0px;display:inline;border-top-width:0px;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_thumb_295C9B22.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_thumb_5F00_295C9B22.png" width="589" height="296" /></a> </p> <p>By selecting the individual report, it is possible to see whether the discrepancy noted in ConfigMgr is also showing when viewed through the native reporting view.&nbsp; If the discrepancy is limited to ConfigMgr, then other methods of troubleshooting may be necessary.&nbsp; But in our case, the same information should be showing regardless of how we view the report.</p> <p><strong>The Reason for the Problem</strong></p> <p>Reports in ConfigMgr can only tell about things they know.&nbsp; The way ConfigMgr determines what should be in a report is through state messages sent by its managed devices.&nbsp; The state messaging system is fairly complicated, though an excellent blog that goes into this in some depth can be found <a href="https://blogs.msdn.com/b/steverac/archive/2011/01/07/sccm-state-messaging-in-depth.aspx" target="_blank">here</a> (full disclosure, this blog is about SCCM 2007, though the process is very similar).</p> <p>The idea is that for some reason or other (network hiccup, etc.) the state messages relating to a particular compliance setting did not make it to the Site Server, which has resulted in the Compliance report showing inaccurate information.&nbsp; By default, state messages should be resent every 30 days from all managed devices so any issues detected should resolve themselves over time.&nbsp; But in practice, I have found that sometimes it’s necessary to give the state message system a jump start in order to resolve the reporting discrepancy.</p> <p><strong>The Traditional Solution</strong></p> <p>It’s a fairly straightforward idea to resolve the reporting discrepancy.&nbsp; Somehow, we need to tell the managed devices which are showing incorrect information to resend their state messages and hopefully resolve the issue.&nbsp; Traditionally, this has been done through a script available via MSDN:</p> <p><a href="https://msdn.microsoft.com/en-us/library/cc146437.aspx" target="_blank">How to Refresh the Compliance State</a></p> <p>In reading the article, we can see that it was written for SCCM 2007 but I can personally attest that the script it contains (at least the VBScript, since I have not tested the C# code) still works in ConfigMgr 2012 R2.&nbsp; As the article also explains, the purpose of the script is as follows:</p> <p><em>“In Microsoft System Center Configuration Manager 2007, you refresh the client compliance state by creating an instance of the UpdatesStore COM class and by using the RefreshServerComplianceState method. This causes the client to resend a full compliance report to the Configuration Manager 2007 server.”</em></p> <p>The script which is typically used is as follows (taken directly from the MSDN article with only the comments removed):</p> <p><em>Sub RefreshServerComplianceState()<br />&nbsp;&nbsp; dim newCCMUpdatesStore <br />&nbsp;&nbsp; set newCCMUpdatesStore = CreateObject (&quot;Microsoft.CCM.UpdatesStore&quot;)<br />&nbsp;&nbsp; newCCMUpdatesStore.RefreshServerComplianceState<br />&nbsp;&nbsp; wscript.echo &quot;Ran RefreshServerComplianceState.&quot;<br />End Sub</em>  <p>To run it manually, all that’s needed is to give the script a name, save it, then open a command prompt as an Administrator and type:</p> <p><em>CSCRIPT &lt;PATH&gt;</em></p> <p>In my lab, this looks like the following:</p> <p><em>CSCRIPT C:\SCRIPTS\VBSCRIPT\RESYNCSTATE.VBS</em></p> <p><font color="#ff0000">NOTE: Depending on the architecture of the managed device, you will want to make sure you are running the correct version of cscript.&nbsp; There is a version under both the System32 and SysWOW64 directories.&nbsp; In my testing, I needed the version of cscript in System32, but if this causes problems test also with the version in the SysWOW64 directory.</font></p> <p>The VBScript is very short and easy to use (and, indeed, can be used in testing scenarios when we want to manually send state messages from a managed device).&nbsp; And in many cases, this is the final solution which leads to case closure.&nbsp; In some cases, however, there is still work to be done.</p> <p><strong>The Problem – Packing the VBScript for ConfigMgr</strong></p> <p>Maybe some of you have figured out how to get this VBScript to run as a package in ConfigMgr.&nbsp; But while there is a good bit of information on how this script can solve the reporting discrepancy, there is virtually nothing published on how to package it in ConfigMgr so that it runs automatically on managed devices.&nbsp; And if you have hundreds or even thousands of devices that need to run this script, doing so manually on every one simply isn’t practical.</p> <p>In the recent case I had, I worked for several hours to try and get the VBScript listed above to deploy and run successfully as a ConfigMgr package.&nbsp; I did many different variations including setting permissions, specifying the starting folder, and leveraging both versions of cscript.&nbsp; While I could get the script to install properly and while it would run successfully when I invoked it manually, I could never get it to run automatically regardless of the variations I tried.</p> <p><strong>PowerShell to the Rescue</strong></p> <p>After many frustrating hours, I decided there must be a better way.&nbsp; The VBScript itself was not hard.&nbsp; All it was doing was creating an instance of UpdatesStore in the WMI Repository on the managed client and then invoking the RefreshServerComplianceState method.&nbsp; Surely this could be done with PowerShell.</p> <p>Rather than try to re-invent the wheel I did a quick search on the Internet and came up with a two-line PowerShell equivalent that claimed to do what the VBScript does (and it turns out, it did!).&nbsp; The article where I located the code can be found <a href="https://trwagner1.wordpress.com/2013/09/19/powershell-refresh-sccm-updates-compliance/" target="_blank">here</a>.&nbsp; The author’s refresh script is two lines long, and there is also a 1-line version listed in the reply section.&nbsp; Both work, but I stuck with the 2-line version for ease of understanding.</p> <p>Additionally, in order to provide a way for clients to see that the script ran successfully, I added a reporting piece to create an event in the Application log of each managed device.&nbsp; The full code is below:</p> <p><em>$SCCMUpdatesStore = New-Object -ComObject Microsoft.CCM.UpdatesStore<br />$SCCMUpdatesStore.RefreshServerComplianceState()<br />New-EventLog -LogName Application -Source SyncStateScript -ErrorAction SilentlyContinue<br />Write-EventLog -LogName Application -Source SyncStateScript -EventId 555 -EntryType Information -Message &quot;Sync State ran successfully&quot;</em>  <p>Note that the first two lines are taken directly from the blog referenced immediately above.&nbsp; Line 3 is used to create the source that will be used when the events are written.&nbsp; The <em>–ErrorAction SilentlyContinue</em> is there because if the source has already been created, PowerShell will throw an error.&nbsp; Adding –ErrorAction allows the following to happen:</p> <ul> <li>Check to see if the source SyncStateScript has already been added to the managed device  </li><li>If not, add it  </li><li>If added already, suppress the error and continue with the script</li></ul> <p>The lines starting with New-EventLog and Write-EventLog are not strictly necessary as ConfigMgr contains log files that will tell if the state messages have been re-sent.&nbsp; But for those who prefer to see Event Log entries showing if and when the script ran successfully, this is one way to achieve that goal.</p> <p><strong>Verifying the Script</strong></p> <p>One possibility when running the script that I needed to test was to find out if the state messages were actually being resent.&nbsp; Sure, the Event Logs were being updated, but how did I know for sure the state messages were also being sent?&nbsp; I had a pretty good idea that no errors were being thrown (I didn’t have any language in the script to suppress errors in the first two lines of the script and I also had tested running it before adding the EventLog portion).&nbsp; But could I confirm that the state messages were actually sent?&nbsp; The answer is yes.</p> <p>As an administrator in ConfigMgr, it is essential to become familiar with the way logs are created to report important information.&nbsp; For our present case, the log file we want is found under CCM\Logs (or SMS_CCM\Logs if you’re looking on a client machine that is also a Management Point).&nbsp; In my lab, the folder of interest is C:\Program Files\SMS_CCM\Logs.&nbsp; Within this folder, the log file to find is UpdatesStore.log as shown below:</p> <p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_3F460D72.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_3F460D72.png"><img title="image" style="border-left-width:0px;border-right-width:0px;border-bottom-width:0px;display:inline;border-top-width:0px;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_thumb_4932B0F0.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_thumb_5F00_4932B0F0.png" width="575" height="142" /></a> </p> <p>Opening the log file after running the script, we should see the following:</p> <p><font size="1">Initiated refresh of update compliance to site server.&nbsp;&nbsp;&nbsp; UpdatesStore&nbsp;&nbsp;&nbsp; 2/23/2015 6:03:10 AM&nbsp;&nbsp;&nbsp; 7332 (0x1CA4)<br />Successfully called refresh of update compliance from automation object.&nbsp;&nbsp;&nbsp; UpdatesStore&nbsp;&nbsp;&nbsp; 2/23/2015 6:03:10 AM&nbsp;&nbsp;&nbsp; 13484 (0x34AC)<br />Message received to resend all update status, processing...&nbsp;&nbsp;&nbsp; UpdatesStore&nbsp;&nbsp;&nbsp; 2/23/2015 6:03:10 AM&nbsp;&nbsp;&nbsp; 14184 (0x3768)<br />Successfully raised Resync state message.&nbsp;&nbsp;&nbsp; UpdatesStore&nbsp;&nbsp;&nbsp; 2/23/2015 6:03:11 AM&nbsp;&nbsp;&nbsp; 14184 (0x3768)<br />Resend status completed successfully.&nbsp;&nbsp;&nbsp; UpdatesStore&nbsp;&nbsp;&nbsp; 2/23/2015 6:03:11 AM&nbsp;&nbsp;&nbsp; 14184 (0x3768)</font>  <p>If this information is found at the same time as the script has run, we can say with confidently that it has done what we asked.</p> <p>From here, the only thing left to do is verify the Compliance report is now reporting correct information, which can be easily done by re-running the report.</p> <p><strong>Creating the Package</strong></p> <p>This part is something I have had difficulty locating online, so I thought I’d provide a step-by-step of how I configured the package in my own lab.&nbsp; Note that I am creating a package and not an application.&nbsp; To do this, navigate in the ConfigMgr admin console to Software Library\Application Management\Packages and right-click the Packages node.&nbsp; Select Create Package and enter the following information (note that I am not entering any optional information, though you will likely want to do this when working in your production environment).</p> <p>On the initial page, I specified the following:</p> <p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_51B6103A.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_51B6103A.png"><img title="image" style="border-left-width:0px;border-right-width:0px;border-bottom-width:0px;display:inline;border-top-width:0px;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_thumb_680BB57F.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_thumb_5F00_680BB57F.png" width="583" height="494" /></a> </p> <p>NOTE: In order to use the PowerShell script I had to do the following prior to creating the package:</p> <ul> <li>Create the script itself (copying the code above and saving as a .ps1 file is sufficient)  </li><li>Create a share (in my case <a>\\s12-pr1\PowerShell</a>)  </li><li>Set the share with appropriate permissions (in my case I granted the Everyone group ‘Read” permission)</li></ul> <p>It is important to use the network location when choosing the source folder.&nbsp; This way, remote devices can access the folder successfully.</p> <p>On the next page, select ‘Standard Program’ (assuming we are using a client computer and not a device such as a Windows phone):</p> <p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_276BF9C1.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_276BF9C1.png"><img title="image" style="border-left-width:0px;border-right-width:0px;border-bottom-width:0px;display:inline;border-top-width:0px;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_thumb_500A65C8.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_thumb_5F00_500A65C8.png" width="579" height="491" /></a> </p> <p>After selecting the Standard Program, we need to enter information on the script and how we want to run it.&nbsp; The following screen provides that detail:</p> <p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_7D21E347.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_7D21E347.png"><img title="image" style="border-left-width:0px;border-right-width:0px;border-bottom-width:0px;display:inline;border-top-width:0px;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_thumb_05A7D343.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_thumb_5F00_05A7D343.png" width="579" height="488" /></a> </p> <p>Note that I have set the program to run whether the user is logged on or not.&nbsp; This automatically sets the Run mode to “Run with administrative rights”.&nbsp; To set the command line, all I did was browse to the folder which opens automatically (because I specified it in the previous screen when I set the network share) and select the Resync.ps1 script.&nbsp; If you don’t see the script when you open the folder, look in the lower left-hand corner of the window and make sure “All Files (*.*)” is selected:</p> <p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_73ED5A19.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_73ED5A19.png"><img title="image" style="border-left-width:0px;border-right-width:0px;border-bottom-width:0px;display:inline;border-top-width:0px;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_thumb_2ACA3F11.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_thumb_5F00_2ACA3F11.png" width="447" height="240" /></a> </p> <p>On the next page, choose whether to run another program first, and also which platforms can run the program.&nbsp; In my lab I left this blank as I did not want to run any other programs first and I was okay with the script running on any platform.</p> <p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_4596651D.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_4596651D.png"><img title="image" style="border-left-width:0px;border-right-width:0px;border-bottom-width:0px;display:inline;border-top-width:0px;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_thumb_00802898.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_thumb_5F00_00802898.png" width="581" height="489" /></a> </p> <p></p> <p></p> <p>From here, confirm the settings on the next page and close the wizard.</p> <p>The wizard will run and create both the package and the program.&nbsp; From here, you’ll want to distribute the package to your desired distribution points and then deploy the program.</p> <p><strong>Deploying the Program</strong></p> <p>This is the final step of deploying the PowerShell script, but it’s essential.&nbsp; First, you’ll right-click either the package or the program and select ‘Deploy’.&nbsp; Then you’ll do the following:</p> <p>On the first page of the deployment wizard, select the Collection to which this program will be deployed.&nbsp; As can be seen below, I have created a collection in my lab called Resync Test and added my test devices to it.</p> <p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_5DBEF0DA.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_5DBEF0DA.png"><img title="image" style="border-left-width:0px;border-right-width:0px;border-bottom-width:0px;display:inline;border-top-width:0px;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_thumb_3308A76C.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_thumb_5F00_3308A76C.png" width="582" height="488" /></a> </p> <p>From here, ensure that the desired distribution points (or distribution point groups) are selected and select Next:</p> <p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_1766AC27.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_1766AC27.png"><img title="image" style="border-left-width:0px;border-right-width:0px;border-bottom-width:0px;display:inline;border-top-width:0px;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_thumb_66D32E6E.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_thumb_5F00_66D32E6E.png" width="579" height="481" /></a> </p> <p>On the next screen, I selected ‘Required’ (I did not want my users to determine whether the script should run or not) and left the defaults as shown:</p> <p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_51E43CAC.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_51E43CAC.png"><img title="image" style="border-left-width:0px;border-right-width:0px;border-bottom-width:0px;display:inline;border-top-width:0px;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_thumb_162734AA.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_thumb_5F00_162734AA.png" width="582" height="488" /></a></p> <p>The next page is where I specified the script to run on a schedule.&nbsp; Because I don’t want to flood my environment with too many state messages, I set this to run immediately when installed and then after that on a weekly basis.&nbsp; I also specified that the script should re-run only if the previous attempt failed:</p> <p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_6E834930.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_6E834930.png"><img title="image" style="border-top:0px;border-right:0px;border-bottom:0px;border-left:0px;display:inline;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_thumb_4BC21173.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_thumb_5F00_4BC21173.png" width="580" height="484" /></a> </p> <p>I left everything else at the defaults and then refreshed the Machine Policy for my test clients.&nbsp; Because this is ConfigMgr 2012 R2, I was able to go to my collection under Assets and Compliance and the admin console, right-click and select Client Notification\Download Computer Policy as shown below.&nbsp; This sends a notification via the “Fast Channel Notification” process to managed devices in the collection instructing them to refresh their machine policy as soon as possible.</p> <p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_3D19F63F.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_3D19F63F.png"><img title="image" style="border-top:0px;border-right:0px;border-bottom:0px;border-left:0px;display:inline;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_thumb_15E23DBB.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_thumb_5F00_15E23DBB.png" width="530" height="363" /></a> </p> <p>From there it was a matter of monitoring my test clients to see that the script ran.&nbsp; Because I had enhanced the script, I was able to watch the Event Logs as well as the UpdatesStore.log file to ensure the script ran successfully.</p> <p><strong>Summary</strong></p> <p>While the process of running a compliance script to clear up reporting discrepancies has been known for some time, there has been very little documentation on doing this with PowerShell or using ConfigMgr packages to deploy and run the script.&nbsp; My goal in this blog has been to enhance the existing information with this extra detail for those seeking further information.</p> <p>Because there can be a discrepancy in reporting from time to time, it is not a bad idea to deploy a script such as the one in this blog to all of your clients and have them refresh their state messages on a regular basis.&nbsp; I chose once a week for my lab, but you’ll want to configure settings that make sense for your own environment.&nbsp; And as always, you should thoroughly test this solution before ever running it in production.&nbsp; What works in my lab may not work as easily in your own, and testing is the only way to avoid preventable issues when pushing scripts like this into production.</p></p></p></p>]]></content:encoded>
    </item>
    <item>
      <title>Working with Distribution Point Jobs in Configuration Manager 2012</title>
      <link>https://docs.microsoft.com/archive/blogs/scotts-it-blog/working-with-distribution-point-jobs-in-configuration-manager-2012</link>
      <pubDate>Sat, 31 Jan 2015 09:15:58 GMT</pubDate>
      <dc:creator><![CDATA[srachui]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.technet.microsoft.com/scotts-it-blog/2015/01/31/working-with-distribution-point-jobs-in-configuration-manager-2012/</guid>
      <description><![CDATA[Recently, we had a case in which a customer needed to find out how to prioritize his ConfigMgr...]]></description>
      <content:encoded><![CDATA[<p>Recently, we had a case in which a customer needed to find out how to prioritize his ConfigMgr packages so that certain ones would be distributed before others that were also distributing at the same time.&nbsp; There is other information out there about this and <a href="https://blogs.technet.com/b/configmgrteam/archive/2014/03/25/content-distribution-priorities.aspx" target="_blank">a very good blog</a> from the System Center team which goes into details about the underlying mechanisms at work when distributing packages to distribution points.&nbsp; In this blog (which will have some overlap with the linked blog above), I have decided to go through a discussion of distribution priorities and expand on a few of the things that might prove useful if you find yourself trying to ensure particular packages are being given priority over others in your environment.</p> <p><strong>Package Priorities</strong></p> <p>First, lets look at the package itself, located in the ConfigMgr console within the Software Library context (navigate to Overview\Application Management\Packages).&nbsp; When created, every package has a priority of ‘Medium’ by default.&nbsp; While this doesn’t show up in the wizard when the package is being created, you can easily see it by opening the package properties and checking the Distribution Settings tab as shown below:</p> <p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_69AC104B.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_69AC104B.png"><img title="image" style="border-left-width:0px;border-right-width:0px;border-bottom-width:0px;display:inline;border-top-width:0px;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_thumb_22594B0A.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_thumb_5F00_22594B0A.png" width="444" height="451" /></a> </p> <p>The options for distribution priority are High, Medium and Low.&nbsp; As you would expect, the higher the priority of a package, the higher the priority in sending that package over other packages with lower priorities.&nbsp; If you have a package that needs to be sent more urgently than some others, going this tab and seeing the priority to High will help ensure this happens.</p> <p><strong>Distribution Point Schedules</strong></p> <p>Beyond setting the priority on the package itself, it’s possible to specify which package priorities are allowed to be sent to a distribution point at a given time.&nbsp; For example, you may decide that during the workday only high priority packages can be sent to distribution points due to the limited availability of bandwidth in your environment.</p> <p>To configure this on a per-distribution point basis, navigate to the Administration context in the ConfigMgr admin console.&nbsp; Expand Overview\Site Configuration\Servers and Site System Roles and select the distribution point you want to work with in the middle window.&nbsp; From here, look at the Site System Roles window to see the roles installed on the selected computer.&nbsp; Right-click the Distribution Point role and choose properties.&nbsp; From here, you can choose the ‘Schedule’ tab as shown below.</p> <p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_14ABB064.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_14ABB064.png"><img title="image" style="border-left-width:0px;border-right-width:0px;border-bottom-width:0px;display:inline;border-top-width:0px;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_thumb_3800571C.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_thumb_5F00_3800571C.png" width="437" height="405" /></a> </p> <p>In this tab, it is possible to select blocks of time and specify which package priorities are allowed during that time period.&nbsp; As you can see from my screenshot, I have decided that the distribution point I’m configuring can only receive high priority packages between 8 a.m. and 6 p.m. on workdays, and it can’t receive packages at all between 10 p.m. and 2 a.m. on Saturdays and Sundays (this is our maintenance window).</p> <p>The schedule for your distribution points is fully customizable and setting the schedule for one distribution point does not affect the schedule of another.&nbsp; So if you are trying to ensure that a high priority package doesn’t have any competition from medium or low priority packages during a particular timeframe when being distributed to one of your distribution points, set the schedule to only allow high priority packages and you should see only that package being distributed.&nbsp; Note that setting this priority after a package starts to distribute should not cause it to stop in midstream.&nbsp; The scheduling should be worked out ahead of time if you are to achieve the desired effect.</p> <p><strong>Using DP Job Manager</strong></p> <p>The third thing I wish to discuss is a great new tool that comes with the <a href="https://www.microsoft.com/en-us/download/details.aspx?id=36213" target="_blank">System Center 2012 R2 Configuration Manager Toolkit</a>.&nbsp; This tool allows you to work with the packages being distributed to your distribution points in a variety of ways and every ConfigMgr admin needs to know how to use it.</p> <p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_2E3AEFA4.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_2E3AEFA4.png"><img title="image" style="border-left-width:0px;border-right-width:0px;border-bottom-width:0px;display:inline;border-top-width:0px;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_thumb_0FF038AE.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_thumb_5F00_0FF038AE.png" width="587" height="381" /></a> </p> <p>To start using this tool once you’ve downloaded the toolkit, select the General tab and enter the name of your Primary Site server and select Connect.&nbsp; If things work as they should, you will see a message in the lower-left that tells you the connection was made successfully.</p> <p>Below, I’ve offered a quick summary of each tab for completeness, but my main focus will be on the ‘Manage Jobs’ tab:</p> <p><em>Overview</em></p> <p>On this tab, every distribution point that belongs to the site will be listed.&nbsp; Here will be summary information on currently running jobs being processed by each distribution point, as well as the total jobs and current retries (packages that have failed to be distributed and that the distribution point is trying to distribute again).&nbsp; As shown below, my lab has 3 distribution points with one of them in retry mode for the two jobs being distributed to it.</p> <p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_442461F4.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_442461F4.png"><img title="image" style="border-left-width:0px;border-right-width:0px;border-bottom-width:0px;display:inline;border-top-width:0px;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_thumb_7B0146EB.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_thumb_5F00_7B0146EB.png" width="588" height="121" /></a> </p> <p>The Refresh button allows manually refreshing this view, while the Start Auto Refresh button causes DP Job Manager to start providing regular refreshes at the interval set (the minimum refresh interval is 2 minutes).</p> <p><em>Distribution Point Info</em></p> <p>This tab is where more granular detail can be seen about each distribution point, including the software being distributed, the Package ID, its size (assuming the size is included in the package), what % complete the package distribution is, and the start time (and restart time) of each package distribution.&nbsp; There is also a view on the number of retries for each specific package.&nbsp; And as always, there is the Refresh and Auto Refresh buttons.</p> <p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_240BE5E8.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_240BE5E8.png"><img title="image" style="border-left-width:0px;border-right-width:0px;border-bottom-width:0px;display:inline;border-top-width:0px;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_thumb_1809F5B4.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_thumb_5F00_1809F5B4.png" width="590" height="133" /></a> </p> <p><em>Help </em></p> <p>The Help tab outlines the specific features and elements of DP Job Manager.&nbsp; For example, it gives a description of the various icons we might encounter when working with package jobs.&nbsp; Referring back to the Distribution Point Info tab, for instance, we see a circular arrow to the left of the Software column.&nbsp; This might not be immediately obvious, but the Help tab explains this for us as shown below:</p> <p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_39F55838.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_39F55838.png"><img title="image" style="border-top:0px;border-right:0px;border-bottom:0px;border-left:0px;display:inline;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_thumb_09CE0D75.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_thumb_5F00_09CE0D75.png" width="586" height="103" /></a> </p> <p>If there is a need for further information, the Help tab has every useful information to better understand DP Job Manager</p> <p><em>Manage Jobs</em></p> <p>Circling back to the Manage Jobs tab, we can see that DP Job Manager provides us an ability to see and interact with package jobs in order to better control what goes on in our ConfigMgr environment.&nbsp; The screenshot below shows us what the Manage Jobs tab looks like:</p> <p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_79C1CF6E.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_79C1CF6E.png"><img title="image" style="border-top:0px;border-right:0px;border-bottom:0px;border-left:0px;display:inline;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_thumb_0DDAEBF8.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_thumb_5F00_0DDAEBF8.png" width="587" height="121" /></a> </p> <p>One thing that’s immediately obvious is that the columns for the Manage Jobs tab are identical with those for specific jobs in the Distribution Point Info tab.&nbsp; The difference here is that we have the ability to interact with the jobs while on the Distribution Point Info tab we couldn’t (we could right-click a specific job and select ‘Manage Job(s)’ but this would just send us to the Manage Jobs tab.&nbsp; We could also copy the specific job and paste the information somewhere like a Notepad file, but this was about all we could do on that tab).</p> <p>To interact with a distribution point job, select the package of interest and right-click as shown below:</p> <p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_4FE15B39.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_4FE15B39.png"><img title="image" style="border-top:0px;border-right:0px;border-bottom:0px;border-left:0px;display:inline;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_thumb_58D0ED78.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_thumb_5F00_58D0ED78.png" width="244" height="236" /></a> </p> <p>Here, we can see that we have many options:</p> <ul> <li>Run – this allows us to manually start the job, which may be useful when troubleshooting why a package is not distribution properly.</li> <li>Move – this is one of the nicer things about DP Job Manager.&nbsp; If you have a large number of packages and want to re-prioritize them so that certain ones are processed sooner than others, all that needs to happen is to right-click the job of interest and move it either up or down in the list.&nbsp; This gives a great deal of control over the jobs that are being distributed, especially since you can do this on a per-distribution point basis.&nbsp; Notice in the screenshot below that I have chosen to distribute the DTC Ping software to a 2nd distribution point and setting the priority of this package is entirely independent based on which distribution point I’m sending it to.&nbsp; I could choose to prioritize all of my packages destined for EX-MB1 before S12-OSD or any other way I choose (maybe I want all distribution points to receive a specific package first before any others, so I prioritize every instance of that package regardless of which distribution point it’s destined for)</li></ul> <p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_0D0516BF.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_0D0516BF.png"><img title="image" style="border-top:0px;border-right:0px;border-bottom:0px;border-left:0px;display:inline;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_thumb_562AC278.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_thumb_5F00_562AC278.png" width="593" height="68" /></a> </p> <ul> <li>Copy – this is the same functionality as on the Distribution Point Info tab.&nbsp; If you copy the package, the details listed on the table will be available for pasting to Notepad, an Excel spreadsheet, etc.&nbsp; This can be useful for reporting or for evaluating trends over time (% complete of a package, for example)</li> <li>Cancel – if the distribution of a package needs to be canceled altogether, this can be done from the Manage Jobs tab.&nbsp; When choosing to cancel a job, the following pop-up provides a warning and then allows us to either confirm or decline to cancel the job we’ve selected.</li></ul> <p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_384C3E77.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_384C3E77.png"><img title="image" style="border-top:0px;border-right:0px;border-bottom:0px;border-left:0px;display:inline;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_thumb_17C4FEC5.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_thumb_5F00_17C4FEC5.png" width="359" height="149" /></a> </p> <p>NOTE: You can select multiple jobs at once in the Manage Jobs tab, but the move commands will be grayed out.</p> <p><strong>Summary</strong></p> <p>There are various ways to configure and work with job priority when it comes to distributing package via ConfigMgr 2012.&nbsp; This blog has attempted to provide a bit more detail on the options available through the graphical interface and when using DP Job Manager.&nbsp; Bottom line, if you are ever in a position where you’ve distributed jobs that need to be re-prioritized or stopped altogether, ConfigMgr provides tools to help you accomplish that task.</p>]]></content:encoded>
    </item>
    <item>
      <title>Verifying a Distribution Point Has Installed Successfully</title>
      <link>https://docs.microsoft.com/archive/blogs/scotts-it-blog/verifying-a-distribution-point-has-installed-successfully</link>
      <pubDate>Mon, 19 Jan 2015 17:54:27 GMT</pubDate>
      <dc:creator><![CDATA[srachui]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.technet.microsoft.com/scotts-it-blog/2015/01/19/verifying-a-distribution-point-has-installed-successfully/</guid>
      <description><![CDATA[When installing the DP role in Configuration Manager 2012, the most traditional way to verify the...]]></description>
      <content:encoded><![CDATA[<p>When installing the DP role in Configuration Manager 2012, the most traditional way to verify the role has installed is to look on the site server at distmgr.log.&nbsp; While this is certainly useful, there are other ways to verify DP installation that I’ll go through in this article.&nbsp; </p> <p><strong>Monitoring</strong></p> <p>One of the nice things in ConfigMgr 2012 is the Monitoring context.&nbsp; In here, most things can be monitored to determine their health, their deployment state, etc.&nbsp; Distributions Points are no different.&nbsp; To validate the status of a newly added Distribution Point, take the following steps:</p> <ul> <li>In the ConfigMgr Admin Console, select the Monitoring context  </li><li>On the left-hand side, expand Overview and Distribution Status  </li><li>Within Distribution Status, look for Distribution Point Configuration Status as shown below</li></ul> <p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_14580F92.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_14580F92.png"><img title="image" style="border-left-width:0px;border-right-width:0px;border-bottom-width:0px;display:inline;border-top-width:0px;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_thumb_5D118856.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_thumb_5F00_5D118856.png" width="588" height="225" /></a> </p> <ul> <li>Select the Site Server where the Distribution Point has been added and select the Details tab</li></ul> <p>If all is well, everything should read green.&nbsp; If not, this will provide an opportunity to troubleshoot what may not be working as expected.</p> <p>If there is something besides a green checkbox next to the site server, it’s also possible to look at the state messages by navigating (still within the Monitoring context) to System Status\Site Status and right-clicking the site server of interest, as shown below.</p> <p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_5EE1DE1D.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_5EE1DE1D.png"><img title="image" style="border-left-width:0px;border-right-width:0px;border-bottom-width:0px;display:inline;border-top-width:0px;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_thumb_7A1A371E.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_thumb_5F00_7A1A371E.png" width="479" height="180" /></a> </p> <p>By selecting Show Messages, admins are enabled to choose the types of status messages they want to see.&nbsp; By selecting them, a pop-up window with additional detail is provided to assist with troubleshooting tasks.&nbsp; Below is an example of this from the one of the site servers in my lab:</p> <p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_3C20A660.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_3C20A660.png"><img title="image" style="border-left-width:0px;border-right-width:0px;border-bottom-width:0px;display:inline;border-top-width:0px;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_thumb_668F682E.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_thumb_5F00_668F682E.png" width="544" height="281" /></a> </p> <p>NOTE: In order to show the Status Message Viewer with actual content, I had to select a different device in my lab.&nbsp; The majority, if not all, of these errors are due to the fact that I have deliberately isolated my lab from the internet, so it provides a good illustration of what sorts of errors might show up in a production environment that needs admin attention.</p> <p><strong>Manual Review of the Distribution Point</strong></p> <p>Beyond monitoring the install in the ConfigMgr Admin Console, it’s possible (and often helpful) to check the new Distribution Point itself to see if the components that are necessary for its functioning are being added successfully.</p> <p>Below is an outline of what you can look for on your Distribution Points to verify that they are healthy:</p> <ul> <li><u>Check the Content Library</u>: this is the location where packages are stored and made available to clients in ConfigMgr.  <ul> <li>Navigate (by default) to: C:\SCCMContentLib  </li><li>Expand SCCMContentLib and make sure it contains 3 folders (as shown below):  <ul> <li>DataLib  </li><li>FileLib  </li><li>PkgLib</li></ul></li></ul></li></ul> <p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_0640D2A8.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_0640D2A8.png"><img title="image" style="border-left-width:0px;border-right-width:0px;border-bottom-width:0px;display:inline;border-top-width:0px;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_thumb_1A59EF31.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_thumb_5F00_1A59EF31.png" width="537" height="168" /></a> </p> <p>NOTE: To read an excellent blog about the structure of the Content Library and how to verify your packages, I recommend the article <a href="https://blogs.technet.com/b/configmgrdogs/archive/2012/04/16/configmgr-2012-content-library-overview.aspx" target="_blank">ConfigMgr 2012 Content Library Overview</a>.&nbsp; There is also an excellent tool called the <a href="https://anoopcnair.com/2013/12/18/configmgr-sccm-2012-r2-tool-contcontentlibraryexplorerent-library-explorer/" target="_blank">Content Library Explorer</a> that every ConfigMgr admin should know about.&nbsp; Check both of these out to understand more about the details of the Content Library.</p> <p></p> <ul> <li><u>Review Scheduled Tasks</u>: Every Distribution Point is configured with scheduled tasks that run regularly  <ul> <li>Content Usage – This scheduled tasks runs the executable smsdpusage.exe and is present on every distribution point  </li><li>Content Validation – This scheduled task runs smsdpmon.exe and will be present on a Distribution Point if you’ve set it to validate its content on a schedule</li></ul></li></ul> <p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_15773B75.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_15773B75.png"><img title="image" style="border-left-width:0px;border-right-width:0px;border-bottom-width:0px;display:inline;border-top-width:0px;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_thumb_056AFD6F.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_thumb_5F00_056AFD6F.png" width="547" height="113" /></a> </p> <p>NOTE: To view the results of these scheduled tasks, navigate to SMS_DP$\sms\logs on the Distribution Point and review the log files associated with the scheduled task (the log names map to the executable that each scheduled task runs).&nbsp; If you want to validate the results of your scheduled task immediately, right-click the task in Task Scheduler and select ‘Run’.&nbsp; Then navigate to the log files shown below to review the results.&nbsp; If there are errors or other issues requiring attention, they should be listed in these files.</p> <p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_198419F8.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_198419F8.png"><img title="image" style="border-left-width:0px;border-right-width:0px;border-bottom-width:0px;display:inline;border-top-width:0px;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_thumb_174A21ED.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_thumb_5F00_174A21ED.png" width="543" height="233" /></a> </p> <p></p> <ul> <li><u>Review the Content of SMS_DP$</u>: This share contains the log files for the Distribution Point and is where pre-staged content will go, among other things.&nbsp; This folder should have the following structure:  <ul> <li>sms\bin – contains various binary files (.dlls, etc.) necessary to the functioning of the Distribution Point  </li><li>sms\logs – contains the log files used by the Distribution Point to report information (such as scheduled task results, per our conversation above)  </li><li>sms\Tools – contains extractcontent.exe which is used to prestage content that should reside on the Distribution Point</li></ul></li></ul> <p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_445F0EBB.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_445F0EBB.png"><img title="image" style="border-left-width:0px;border-right-width:0px;border-bottom-width:0px;display:inline;border-top-width:0px;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_thumb_5F9767BC.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_thumb_5F00_5F9767BC.png" width="531" height="184" /></a> </p> <ul> <li>Confirm IIS: Each Distribution Point uses the two virtual directories shown below to download content via BITS.&nbsp; If you have installed BITS on your DP (and Pull Distribution Points require BITS), the virtual directories SMS_DP_SMSPKG$ and SMS_DP_SMSSIG$ should be present in IIS as shown below.</li></ul> <p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_08A206B9.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_08A206B9.png"><img title="image" style="border-left-width:0px;border-right-width:0px;border-bottom-width:0px;display:inline;border-top-width:0px;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/24/metablogapi/image_thumb_51C7B272.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-24-metablogapi/image_5F00_thumb_5F00_51C7B272.png" width="241" height="225" /></a> </p> <p>If any of this information is missing, you’ll need to figure out why.&nbsp; With the exception of the optional Content Validation task mentioned above and the virtual directories in IIS, every Distribution Point should have all of these components.</p> <p><strong>Summary</strong></p> <p>There are obviously other tasks that you’ll want to keep track of with your Distribution Point.&nbsp; In the case of my lab, my Distribution Point is PXE enabled, which allows me to provide operating system images to clients participating in Operating System Deployments (OSD).&nbsp; Additionally, I will want to ensure that the packages I push to my Distribution Point are present and available to clients.&nbsp; This can involve many possible methods of confirmation, including reviewing SQL database tables, walking through the Content Library (either with or without the Content Library Explorer), etc.</p> <p>What I have tried to do here is to give a basic set of tasks to allow administrators of all levels to validate their Distribution Points contain the components necessary to participate as site system roles in Configuration Manager 2012.</p>]]></content:encoded>
    </item>
  </channel>
</rss>