<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" gd:etag="W/&quot;D08DRHgzcCp7ImA9WhRWFE8.&quot;"><id>tag:blogger.com,1999:blog-4377279713904753127</id><updated>2012-01-01T08:51:15.688-05:00</updated><category term="SCOM" /><category term="Tape" /><category term="down economy" /><category term="Queue" /><category term="SPF" /><category term="PTR" /><category term="cleanup" /><category term="Close" /><category term="Windows Server Backup" /><category term="DNS" /><category term="SCCM" /><category term="Email" /><category term="Print" /><category term="Exchange" /><category term="Customization" /><category term="Change" /><category term="Management" /><category term="DR" /><category term="Test" /><category term="Group Policy" /><category term="switch" /><category term="Communications" /><category term="NTBackup" /><category term="WMI" /><category term="Backup" /><category term="DomainKeys" /><category term="profiles" /><category term="participation" /><category term="Planning" /><category term="blacklist" /><category term="NDR" /><category term="performance" /><category term="Applications" /><category term="Send Connector" /><category term="Spam" /><category term="file" /><category term="closeout" /><category term="Empathy" /><category term="training" /><category term="SCCM WMI" /><category term="Windows 7" /><category term="Tech tips" /><category term="router" /><category term="Workgroup" /><category term="Script" /><category term="VSS" /><category term="security" /><category term="success" /><category term="Restore" /><category term="strategies" /><category term="ribbon" /><category term="Office 2010" /><category term="Templates" /><category term="Bulk User Change" /><category term="helpdesk" /><category term="self help portal" /><category term="rollout" /><category term="detractors" /><category term="Cat tools" /><category term="GPO" /><category term="Plan" /><category term="optimization" /><category term="kiwi" /><category term="Disaster Recovery" /><category term="TLS" /><category term="project" /><category term="partners" /><category term="OCT" /><category term="Sender ID" /><category term="Snapshot" /><category term="AD" /><category term="lower impact" /><title>Smart IT for SMB</title><subtitle type="html">Simple solutions for IT Managers/Administrators in the Small and Medium Business market to help you get the most of your Microsoft IT investment. We will do this by tackling a couple topics each week.</subtitle><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://smartit4smb.blogspot.com/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://smartit4smb.blogspot.com/" /><link rel="next" type="application/atom+xml" href="http://www.blogger.com/feeds/4377279713904753127/posts/default?start-index=26&amp;max-results=25&amp;redirect=false&amp;v=2" /><author><name>IT Guy</name><uri>http://www.blogger.com/profile/06077702289675708030</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="22" src="http://3.bp.blogspot.com/__3Fv9I-dKhM/THCBA7MpYkI/AAAAAAAAAAQ/i0ELDMJBiuQ/S220/glasses.jpg" /></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>51</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/SmartItForSmb" /><feedburner:info uri="smartitforsmb" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><entry gd:etag="W/&quot;C0UFQnw-eSp7ImA9WhZREE0.&quot;"><id>tag:blogger.com,1999:blog-4377279713904753127.post-3708832745995590029</id><published>2011-04-05T07:00:00.021-04:00</published><updated>2011-04-05T07:00:13.251-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-04-05T07:00:13.251-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="SCOM" /><title>SCOM: Building Instance Groups from Groups of a Different Class</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/e8q12XwmyRcCpSsGzeISCdzdGog/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/e8q12XwmyRcCpSsGzeISCdzdGog/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/e8q12XwmyRcCpSsGzeISCdzdGog/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/e8q12XwmyRcCpSsGzeISCdzdGog/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;span xmlns=""&gt;&lt;/span&gt;&lt;br /&gt;
When I first started working with Operations Manager, one of the items that I struggled with was how to make a group from another group targeting a different class such as all Non-System Drives hosted on Windows 2008 Servers. This can just as easily be used to help segment your management environment among multiple groups or departments managing different aspects of your environment. &lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;You may have multiple web development groups in your organization and each may use similar systems, IIS and Tomcat for example, but they may each desire different overrides for the same components. Segmenting their views of the environment is relatively simple through simple computer groups, but overrides need to be targeted at the actual object class. This is especially true if you have a group that wants overrides targeted at some logical disks, but not all.&lt;br /&gt;
&lt;br /&gt;
There are a number of articles out there that talk through how to use the SCOM containment constructs to your advantage (See References at end of the article), but none that I found specifically talked about how to use groups, either instance or computer, as a part of the formula. While on the surface it appears the same principles should work, my first few attempts were anything but successful.&lt;br /&gt;
&lt;br /&gt;
The first thing that you discover is like I have already hinted at, not all groups are created equal. There are many different kinds of groups and each one has their own containment relationship. This is critically important as the group population rules need to refer to the proper relationship entity or the workflow errors out. Luckily for us, most of the management packs I have seen use either the Computer Groups or the Instance Group constructs provided by the base System Center Libraries. Computer Groups are defined in the &lt;em&gt;Microsoft.SystemCenter.Library&lt;/em&gt; management pack and are groups that may only contain computers. Computer Groups have a Relationship named &lt;em&gt;Microsoft.SystemCenter.ComputerGroupContainsComputer&lt;/em&gt; defined. Instance Groups are defined in the &lt;em&gt;Microsoft.SystemCenter.InstanceGroup.Library&lt;/em&gt; management pack and are groups that may contain any combination of any class. Instance Groups have a relationship named &lt;em&gt;Microsoft.SystemCenter.InstanceGroupContainsEntities&lt;/em&gt; defined.&lt;br /&gt;
&lt;br /&gt;
Now I am sure that you are asking yourself, "How did he find that out?" I assure you that it was not through any sort of divine intervention, centuries old enlightenment techniques, or voodoo. (no animals were harmed in the writing of this article)&lt;br /&gt;
&lt;br /&gt;
It is a simple thing to lookup for any group (or any other type of object for that matter). Simply have the management pack defining the object open in the Authoring Console (Even if it is a sealed management pack, you can still use the Author Console to view its configuration, you just can't change it). From the Service Model tab, find your Group in the Classes list. (Yes, groups are treated as classes just like every other logical representation construct in SCOM) To find out what kind of group construct that your group is defined from, simply look at the "InheritedFrom" column of the main view or look at the Base Class selection on the General Tab of the properties window. To discover the relationship defined for your group, simply navigate to the Relationships Tab of the properties window for your group and all will be revealed.&lt;br /&gt;
&lt;br /&gt;
Now that we know the containment details for our group, we can use the same steps to uncover the containment relationships for essentially any other object in the system and use those relationships to build our Group Populator configuration XML.&lt;br /&gt;
&lt;br /&gt;
Let say we want to create a group of all logical drives that are not named "C:" on machines contained in a group Named "Production Webservers" because our web team only wants to see alerts on Non-System Drives. (AKA they want you addressing all the system drive problems) In a management pack that you control, you simply create a new Instance Group of whatever name you want in the Classes section of the Service Model Tab of the Authoring Console. Then navigate to the discoveries section of the Health Model tab of the authoring console and create a new Custom Discovery object named whatever you like. (Good naming consistency does help when you have to revisit these later) For the target of the discovery, select the Group Class you created earlier. On the Classes Tab, make sure that the relationship for your group class is defined in the "Discovered relationships and their attributes" window. For an Instance class, this should be &lt;em&gt;Microsoft.SystemCenter.InstanceGroupContainsEntities&lt;/em&gt;. &lt;br /&gt;
&lt;br /&gt;
Now for the dreaded Configuration Tab. Be Strong, you can do this.&lt;br /&gt;
&lt;br /&gt;
For a type, select GroupPopulator. This will bring up a configuration window for the GroupPopulator object type. Enter &lt;strong&gt;$MPElement$&lt;/strong&gt; for the RuleID. Enter &lt;strong&gt;$Target/Id$&lt;/strong&gt; for the GroupInstanceID. (See 2 fields out of the way and we haven't had to sweat yet) &lt;br /&gt;
&lt;br /&gt;
Now for the Membership Rules. For this, I am going to show the full XML and then explain where/how it is derived from.&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;lt;MembershipRule&amp;gt; &lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;lt;MonitoringClass&amp;gt;$MPElement[Name="MicrosoftWindowsLibrary6172210!Microsoft.Windows.LogicalDisk"]$&amp;lt;/MonitoringClass&amp;gt; &amp;lt;RelationshipClass&amp;gt;$MPElement[Name="MicrosoftSystemCenterInstanceGroupLibrary6172210!Microsoft.SystemCenter.InstanceGroupContainsEntities"]$&amp;lt;/RelationshipClass&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;lt;Expression&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;lt;And&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;lt;Expression&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;lt;Contained&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;lt;MonitoringClass&amp;gt;$MPElement[Name="MicrosoftWindowsLibrary6172210!Microsoft.Windows.Computer"]$&amp;lt;/MonitoringClass&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;lt;Expression&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;lt;Contained&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;lt;MonitoringClass&amp;gt;$MPElement[Name="MicrosoftSystemCenterInstanceGroupLibrary6172210!Microsoft.SystemCenter.InstanceGroup"]$&amp;lt;/MonitoringClass&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;lt;Expression&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;lt;SimpleExpression&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;lt;ValueExpression&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;lt;Property&amp;gt;$MPElement[Name="SystemLibrary6172210!System.Entity"]/DisplayName$&amp;lt;/Property&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;lt;/ValueExpression&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;lt;Operator&amp;gt;Equal&amp;lt;/Operator&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;lt;ValueExpression&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;lt;Value&amp;gt;Production Webservers&amp;lt;/Value&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;lt;/ValueExpression&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;lt;/SimpleExpression&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;lt;/Expression&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;lt;/Contained&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;lt;/Expression&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;lt;/Contained&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;lt;/Expression&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;lt;Expression&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;lt;RegExExpression&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;lt;ValueExpression&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;lt;Property&amp;gt;$MPElement[Name="SystemLibrary6172210!System.Entity"]/DisplayName$&amp;lt;/Property&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;lt;/ValueExpression&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;lt;Operator&amp;gt;DoesNotMatchWildcard&amp;lt;/Operator&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;lt;Pattern&amp;gt;^C:$&amp;lt;/Pattern&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;lt;/RegExExpression&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;lt;/Expression&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;lt;Expression&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;lt;RegExExpression&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;lt;ValueExpression&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;lt;Property&amp;gt;$MPElement[Name="SystemLibrary6172210!System.Entity"]/DisplayName$&amp;lt;/Property&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;lt;/ValueExpression&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;lt;Operator&amp;gt;MatchesWildcard&amp;lt;/Operator&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;lt;Pattern&amp;gt;^_:$&amp;lt;/Pattern&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;lt;/RegExExpression&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;lt;/Expression&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;lt;/And&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;lt;/Expression&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;lt;/MembershipRule&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Relax. Breathe slowly and deeply. Don't Panic, we are going to tackle this together. Let's take it from the top.&lt;br /&gt;
&lt;br /&gt;
The membershiprules section of the XML configuration, needs to contain one or more membership rules, so we start off with (and end with) the tags (&amp;lt;MembershipRule&amp;gt;&amp;lt;/MembershipRule&amp;gt; denoting a MembershipRule. The next line containing the &amp;lt;MonitoringClass&amp;gt; tag denotes what type of objects we are placing in our group. In our case, we want Logical Disk objects. Logical Disk objects are Management Pack elements, so we need to denote that by the $MPElement[Name=""]$ portion of the line. We can see that Logical Disks are named Microsoft.Windows.LogicalDisk by looking at the class definitions of the Windows OS Management packs. So where did the "MicrosoftWindowsLibrary6172210!" portion of the line come from? It turns out that you can have different definitions of the same class from different management packs, so you need to tell the Group Populator which definition you are intending to use, which is done by "aliases". &lt;br /&gt;
&lt;br /&gt;
The easiest way I have found to uncover the alias being used by your management pack is to simply open the raw management pack XML file with a text editor and retrieving the Alias from the references section of the file near the top. In my case, the Windows Library Reference looks like this:&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;lt;Reference Alias="MicrosoftWindowsLibrary6172210"&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;lt;ID&amp;gt;Microsoft.Windows.Library&amp;lt;/ID&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;lt;Version&amp;gt;6.1.7221.0&amp;lt;/Version&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;lt;PublicKeyToken&amp;gt;31bf3856ad364e35&amp;lt;/PublicKeyToken&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;lt;/Reference&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
I now know that the alias for the Windows Library being used in my management pack is "MicrosoftWindowsLibrary6172210". This will vary from management pack to management pack on the same system, so get in the habit of looking it up. The only character in the line left undefined is the "!" character between the alias and the class definition and it is simply a delimiter to let the group populator know where the alias definition ends and the class name begins.&lt;br /&gt;
&lt;br /&gt;
The line with the &amp;lt;RelationshipClass&amp;gt; tags simply defines which relationship definition we are using to define our group and is built using the info we learned earlier about our Group and is constructed in the same way as the &amp;lt;MonitoringClass&amp;gt; line.&lt;br /&gt;
&lt;br /&gt;
We now need to restrict which logical disks end up in our group, which is done with &amp;lt;expression&amp;gt; tags using a sort of "backwards Reverse Polish Notation" of &amp;lt;operator&amp;gt; &amp;lt;operand&amp;gt; &amp;lt;operand&amp;gt; . Logical operators such as &amp;lt;AND&amp;gt;, &amp;lt;OR&amp;gt; and comparisons like &amp;lt;EQUAL&amp;gt;, &amp;lt;MatchesWildcard&amp;gt;, etc are fairly simple to understand and are explained in great detail elsewhere. The more interesting operators in this construct are the &amp;lt;Contained&amp;gt; and &amp;lt;Contains&amp;gt; operators. The contained and contains operators denote containment relationships either moving up or down the containment tree. Each rule is constructed of operands built in the same manner as we did the original &amp;lt;MonitoringClass&amp;gt; line.&lt;br /&gt;
&lt;br /&gt;
Roughly translated, the membership rules defined in the XML above equate to:&lt;br /&gt;
All Logical Disks contained on Computers contained in a Group named "Production Webservers" with logical disk names that are 2 character names ending in a colon (_:$) and not named "C:"&lt;br /&gt;
&lt;br /&gt;
The 2 character names portion of the rule needed to be included in my environment as it includes Windows Cluster servers and the logical disks used by the cluster appear as "GUID" strings on the passive node of the cluster.&lt;br /&gt;
&lt;br /&gt;
Hopefully this example can help you to implement similar constructs in your environment and to better understand the Group Populator rules in general.&lt;br /&gt;
&lt;h2&gt;Good Reference Sites&lt;/h2&gt;&lt;a href="http://systemcentercentral.com/BlogDetails/tabid/143/IndexID/67784/Default.aspx"&gt;http://systemcentercentral.com/BlogDetails/tabid/143/IndexID/67784/Default.aspx&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://technet.microsoft.com/en-us/library/ee957040.aspx"&gt;http://technet.microsoft.com/en-us/library/ee957040.aspx&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://technet.microsoft.com/fr-fr/library/dd362550.aspx"&gt;http://technet.microsoft.com/fr-fr/library/dd362550.aspx&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4377279713904753127-3708832745995590029?l=smartit4smb.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/SmartItForSmb/~4/qk0A1huW86Q" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://smartit4smb.blogspot.com/feeds/3708832745995590029/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://smartit4smb.blogspot.com/2011/04/scom-building-instance-groups-from.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4377279713904753127/posts/default/3708832745995590029?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4377279713904753127/posts/default/3708832745995590029?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/SmartItForSmb/~3/qk0A1huW86Q/scom-building-instance-groups-from.html" title="SCOM: Building Instance Groups from Groups of a Different Class" /><author><name>IT Guy</name><uri>http://www.blogger.com/profile/06077702289675708030</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="22" src="http://3.bp.blogspot.com/__3Fv9I-dKhM/THCBA7MpYkI/AAAAAAAAAAQ/i0ELDMJBiuQ/S220/glasses.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://smartit4smb.blogspot.com/2011/04/scom-building-instance-groups-from.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0UFQ3k8fSp7ImA9WhZSFUs.&quot;"><id>tag:blogger.com,1999:blog-4377279713904753127.post-1795018205883116917</id><published>2011-03-31T07:00:00.002-04:00</published><updated>2011-03-31T07:00:12.775-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-03-31T07:00:12.775-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="SCOM" /><title>Operations Manager: Cleaning Up Cluster Resources</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/8YfJcAYNwCM1hB7GaQYDKlyKQb0/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/8YfJcAYNwCM1hB7GaQYDKlyKQb0/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/8YfJcAYNwCM1hB7GaQYDKlyKQb0/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/8YfJcAYNwCM1hB7GaQYDKlyKQb0/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;span xmlns=""&gt;&lt;/span&gt;&lt;br /&gt;
Fixing client issues or removing defunct clusters is one of the more frustrating tasks in Operations Manager. You try to uninstall the client on a Windows Cluster node and you are immediately met with a message that that the "Agent is managing other devices and cannot be uninstalled. Please resolve this issue via Agentless managed view in Administration". &lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;If you are brave enough to keep fighting, you will find that you can remove the client from any "passive" nodes in the cluster. This is because all of these clients are truly agentless. The clients on any "active" node of the cluster will not uninstall through any means on the console.&lt;br /&gt;
This problem exists for the most part because the cluster itself physically does not. That is to say that the cluster itself, and its associated groups, is a virtual entity that exhibits most of the same properties as a computer resource without actually being a physical resource. It has a name, a domain, an IP address, one or more logical disks… You get the point. However, there is not a physical server to actually "house" the agent. These virtual resources need to be managed "remotely" through agentless monitoring and it is the active node of the cluster housing the physical resources that is responsible for monitoring those resources. It is this agentless monitoring that leads to the client maintenance problems.&lt;br /&gt;
There are a couple different approaches to correcting this problem; both are pretty drastic and not for the faint of heart. The first more common recommendation is a pretty ugly SQL query to purge the OperationsManager database of the cluster resources. These queries typically look something like this:&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&lt;span style="color: blue;"&gt;declare&lt;/span&gt; @nodeHS &lt;span style="color: blue;"&gt;nvarchar&lt;span style="color: grey;"&gt;(&lt;/span&gt;255&lt;span style="color: grey;"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&lt;span style="color: blue;"&gt;Set&lt;/span&gt; @nodeHS&lt;span style="color: grey;"&gt;=&lt;span style="color: red;"&gt;N'Microsoft.SystemCenter.HealthService:FQDN'&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&lt;span style="color: blue;"&gt;DECLARE&lt;/span&gt; Rel_Cursor &lt;span style="color: blue;"&gt;CURSOR&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: blue;"&gt;FOR&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&lt;span style="color: grey;"&gt;(&lt;span style="color: blue;"&gt;SELECT&lt;/span&gt; [Rel&lt;/span&gt;ationshipGenericView]&lt;span style="color: grey;"&gt;.&lt;/span&gt;[Id]&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&lt;span style="color: blue;"&gt;FROM&lt;/span&gt; dbo&lt;span style="color: grey;"&gt;.&lt;/span&gt;RelationshipGenericView&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: blue; font-family: Courier New; font-size: 8pt;"&gt;WHERE &lt;span style="color: grey;"&gt;((&lt;/span&gt;RelationshipGenericView&lt;span style="color: grey;"&gt;.&lt;/span&gt;[MonitoringRelationshipClassId] &lt;span style="color: grey;"&gt;=&lt;/span&gt;&amp;nbsp; dbo&lt;span style="color: grey;"&gt;.&lt;/span&gt;fn_ManagedTypeId_MicrosoftSystemCenterHealthServiceShouldManageEntity&lt;span style="color: grey;"&gt;())&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: grey;"&gt;AND&lt;span style="color: blue;"&gt;&lt;br /&gt;
&lt;span style="color: grey;"&gt;(((&lt;/span&gt;dbo&lt;span style="color: grey;"&gt;.&lt;/span&gt;[RelationshipGenericView]&lt;span style="color: grey;"&gt;.&lt;/span&gt;[IsDeleted] &lt;span style="color: grey;"&gt;=&lt;/span&gt; 0&lt;span style="color: grey;"&gt;))))&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: grey; font-family: Courier New; font-size: 8pt;"&gt;AND&lt;span style="color: blue;"&gt;&lt;br /&gt;
&lt;span style="color: grey;"&gt;(&lt;/span&gt;[RelationshipGenericView]&lt;span style="color: grey;"&gt;.&lt;/span&gt;[SourceMonitoringObjectId]&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: grey;"&gt;IN&lt;span style="color: blue;"&gt;&lt;br /&gt;
&lt;span style="color: grey;"&gt;(&lt;span style="color: blue;"&gt;select&lt;/span&gt; BaseManagedEntityId &lt;span style="color: blue;"&gt;from&lt;/span&gt; BaseManagedEntity &lt;span style="color: blue;"&gt;where&lt;/span&gt; FullName =&lt;/span&gt;@NodeHS&lt;span style="color: grey;"&gt;)))&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&lt;span style="color: blue;"&gt;OPEN&lt;/span&gt; Rel_Cursor&lt;span style="color: grey;"&gt;;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&lt;span style="color: blue;"&gt;declare&lt;/span&gt; @relId &lt;span style="color: blue;"&gt;uniqueidentifier&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&lt;span style="color: blue;"&gt;declare&lt;/span&gt; @discoSource &lt;span style="color: blue;"&gt;uniqueidentifier&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&lt;span style="color: blue;"&gt;declare&lt;/span&gt; @now &lt;span style="color: blue;"&gt;datetime&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&lt;span style="color: blue;"&gt;set&lt;/span&gt; @now &lt;span style="color: grey;"&gt;=&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: magenta;"&gt;GETUTCDATE&lt;span style="color: grey;"&gt;()&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&lt;span style="color: blue;"&gt;FETCH&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: blue;"&gt;NEXT&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: blue;"&gt;FROM&lt;/span&gt; Rel_Cursor &lt;span style="color: blue;"&gt;INTO&lt;/span&gt; @RelId&lt;span style="color: grey;"&gt;;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&lt;span style="color: blue;"&gt;WHILE&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: magenta;"&gt;@@FETCH_STATUS&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: grey;"&gt;=&lt;/span&gt; 0&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: blue; font-family: Courier New; font-size: 8pt;"&gt;BEGIN&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;SELECT&lt;/span&gt; @discoSource&lt;span style="color: grey;"&gt;=&lt;/span&gt;DSTR&lt;span style="color: grey;"&gt;.&lt;/span&gt;[DiscoverySourceId]&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;FROM&lt;/span&gt;&amp;nbsp; dbo&lt;span style="color: grey;"&gt;.&lt;/span&gt;[DiscoverySourceToRelationship] DSTR&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: grey;"&gt;inner&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: grey;"&gt;join&lt;/span&gt; dbo&lt;span style="color: grey;"&gt;.&lt;/span&gt;[DiscoverySource] DS &lt;span style="color: blue;"&gt;on&lt;/span&gt; DS&lt;span style="color: grey;"&gt;.&lt;/span&gt;DiscoverySourceId &lt;span style="color: grey;"&gt;=&lt;/span&gt; DSTR&lt;span style="color: grey;"&gt;.&lt;/span&gt;DiscoverySourceId&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: grey;"&gt;inner&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: grey;"&gt;join&lt;/span&gt; Discovery &lt;span style="color: blue;"&gt;on&lt;/span&gt; Discovery&lt;span style="color: grey;"&gt;.&lt;/span&gt;DiscoveryId &lt;span style="color: grey;"&gt;=&lt;/span&gt; DS&lt;span style="color: grey;"&gt;.&lt;/span&gt;DiscoveryRuleId&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;WHERE&lt;/span&gt; [DiscoveryName] &lt;span style="color: grey;"&gt;=&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: red;"&gt;'Microsoft.Windows.Cluster.Classes.Discovery'&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: grey;"&gt;AND&lt;/span&gt; [RelationshipId]&lt;span style="color: grey;"&gt;=&lt;/span&gt;@relId&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: grey;"&gt;AND&lt;/span&gt; DSTR&lt;span style="color: grey;"&gt;.&lt;/span&gt;[IsDeleted] &lt;span style="color: grey;"&gt;=&lt;/span&gt; 0&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;exec&lt;/span&gt; dbo&lt;span style="color: grey;"&gt;.&lt;/span&gt;p_RemoveRelationshipFromDiscoverySourceScope&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;@RelationshipId&lt;span style="color: grey;"&gt;=&lt;/span&gt;@relId&lt;span style="color: grey;"&gt;,&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; @DiscoverySourceId&lt;span style="color: grey;"&gt;=&lt;/span&gt;@discoSource&lt;span style="color: grey;"&gt;,&lt;/span&gt;@TimeGenerated&lt;span style="color: grey;"&gt;=&lt;/span&gt;@now&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;FETCH&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: blue;"&gt;NEXT&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: blue;"&gt;FROM&lt;/span&gt; Rel_Cursor &lt;span style="color: blue;"&gt;INTO&lt;/span&gt; @RelId&lt;span style="color: grey;"&gt;;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: blue; font-family: Courier New; font-size: 8pt;"&gt;END&lt;span style="color: grey;"&gt;;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&lt;span style="color: blue;"&gt;CLOSE&lt;/span&gt; Rel_Cursor&lt;span style="color: grey;"&gt;;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: 8pt;"&gt;&lt;span style="color: blue; font-family: Courier New;"&gt;DEALLOCATE&lt;/span&gt;&lt;span style="font-family: Courier New;"&gt; Rel_Cursor&lt;span style="color: grey;"&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
Where FQDN is the fully qualified domain name of one of your physical cluster nodes. &lt;br /&gt;
This query would then need to be run once for each physical node in the cluster.&lt;br /&gt;
After that "emergency chainsaw surgery", the client will be able to be removed from the physical nodes in a "normal" way, repaired, or simply deleted and while this method does certainly work, it has all the subtlety of a 2000lb bomb.&lt;br /&gt;
There is another way that at least saves you from needing to go tromping through the production database and that is through judicious use of the "remove-disabledmonitoringobject" commandlet. The first step in this approach is to create a group housing the individual physical members of the cluster needing client maintenance/decommissioning. After the group is created, you simply need to create overrides for all of the cluster discovery methods disabling them for targets in your newly created group. After giving your management group sufficient time to fully replicate the new overrides throughout the hierarchy, one can simply launch the Ops Manager Powershell connected to your root management server and run the "remove-disabledmonitoringobject" commandlet. Once this commandlet completes, the cluster instance should be removed from your management group allowing you to then perform any necessary maintenance on the physical nodes' clients. While this is certainly more precise and less risky than direct SQL Queries in the production database, it is still far from ideal.&lt;br /&gt;
It should not be necessary to remove the entire cluster from the management group to perform simple client maintenance on any of the physical nodes. Given that clustering is one of the more common HA approaches and the assumption that if you want something to stay HA it needs to be proactively monitored, needing to resort to tactics like these should not be necessary. Hopefully MS finds a better approach in the future.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4377279713904753127-1795018205883116917?l=smartit4smb.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/SmartItForSmb/~4/v7-4rAlBhYc" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://smartit4smb.blogspot.com/feeds/1795018205883116917/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://smartit4smb.blogspot.com/2011/03/operations-manager-cleaning-up-cluster.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4377279713904753127/posts/default/1795018205883116917?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4377279713904753127/posts/default/1795018205883116917?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/SmartItForSmb/~3/v7-4rAlBhYc/operations-manager-cleaning-up-cluster.html" title="Operations Manager: Cleaning Up Cluster Resources" /><author><name>IT Guy</name><uri>http://www.blogger.com/profile/06077702289675708030</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="22" src="http://3.bp.blogspot.com/__3Fv9I-dKhM/THCBA7MpYkI/AAAAAAAAAAQ/i0ELDMJBiuQ/S220/glasses.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://smartit4smb.blogspot.com/2011/03/operations-manager-cleaning-up-cluster.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEMEQHcyfSp7ImA9WhZSE0Q.&quot;"><id>tag:blogger.com,1999:blog-4377279713904753127.post-6784274190834908113</id><published>2011-03-29T07:00:00.001-04:00</published><updated>2011-03-29T07:00:01.995-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-03-29T07:00:01.995-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="performance" /><category scheme="http://www.blogger.com/atom/ns#" term="AD" /><title>Advanced AD Inter-Site Replication</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/dlLwuQHJtL0XXEkPN_WDFhcgSaw/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/dlLwuQHJtL0XXEkPN_WDFhcgSaw/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/dlLwuQHJtL0XXEkPN_WDFhcgSaw/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/dlLwuQHJtL0XXEkPN_WDFhcgSaw/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;span xmlns=""&gt;&lt;/span&gt;&lt;br /&gt;
Many of us have physical locations that are connected by high-speed connections, but we have elected to still represent these sites as separate AD Sites for other reasons: segmentation of authentication traffic, global catalog load balancing, DFS Root location, disaster recovery, etc. Unfortunately, now that the DCs are in separate AD sites, replication is relegated to the timed replication cycle rather than the change notification cycle used within the same site, or are they?&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;
Before we discuss how to change one's Inter-Site links, let us review the 2 primary mechanisms used for replication within Active Directory: Timed Replication and Change Notification Replication.&lt;br /&gt;
The default replication mechanism for Intra-Site connections, DCs within the same AD Site, is Change Notification Replication. This is a mechanism where each Domain Controller communicates directly to the others in its site immediately notifying each other that they have changes. This allows for fast convergence of changes within a site, but takes a fair amount of communication to accomplish.&lt;br /&gt;
The default replication mechanism for Inter-Site connections, that is connections between DCs in different sites, is a timed replication cycle that can occurs at best four times per hour. This can lead to change convergence times on the order of 30 minutes in a typical mesh type replication configuration; and even longer if you have been forced to configure your replication in a tree fashion due to either DC/Site count or unruly WAN links. This mechanism is easy to configure, easy to maintain/explain, and reasonably efficient over slow WAN links. Unfortunately, it can also lead to unacceptable security lags and service delivery.&lt;br /&gt;
This is because changes need to replicate out from where they are made to all other sites. While the change is "in transit", one cannot guarantee which way AD will respond until the change has been replicated to all DCs. This transit time is called the convergence time. As one would expect, changes will go into effect pretty quickly in the original site due to the change notification replication. Changes to DCs in other sites however, will take significantly longer to reach other AD sites due to the default timed nature of replication across Inter-Site links. While many times this has no effect on overall service, there are times this can be unacceptable.&lt;br /&gt;
If your organization is like most others and you have a centralized service desk and/or AD management team, the real timing of changes may have a significant impact on the steps necessary and hence the overall service. For example, when you get that call from HR that an account needs to be disabled for disciplinary reasons and a technician makes the change to disable the account. If the technician is "forward thinking" and connects to the DC in the site where the end-user is located, the change is effective locally very quickly preventing access from workstations locally. However, we all live in a very connected world. If the user is in a site in a different site from their Exchange Mailbox server (not that uncommon today), the same user will still have access to their mailbox contents until the change reaches the domain controllers in the site with the Exchange Mailbox and CAS servers; potentially a major security issue.&lt;br /&gt;
With the cost effective availability of Ethernet speed links between locations today, there may be a business case to eliminate timed AD replication in significant portions of your environment. While this can be accomplished by simply spanning AD Sites across multiple physical locations, this may not have the desired results due to DFS root locators, GC access speeds, and a number of other issues. Ideally, one should be able to enable change notification replication on select AD Site connectors.&lt;br /&gt;
Luckily this is possible, if poorly communicated and documented. Change notification is possible on any IP Link. SMTP Links do not support Change Notification. To enable change notification on an IP site link&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;Launch ADSI Edit by running adsiedit.msc&lt;/li&gt;
&lt;li&gt;In ADSI Edit, expand the Configuration Container icon and then expand CN=Configuration, DC= ForestRootDomainName and CN=Sites.&lt;/li&gt;
&lt;li&gt;Expand the CN=Inter-Site Transports container, and then click CN=IP.&lt;/li&gt;
&lt;li&gt;In the details pane, right-click the site link object whose options attribute you want to change, and then click Properties.&lt;/li&gt;
&lt;li&gt;In the Select a property to view box, click options.&lt;/li&gt;
&lt;li&gt;If the Value(s) box displays &amp;lt;not set&amp;gt;, in the Edit Attribute box, type 1 for the value (bit 0=1). See note below.&lt;/li&gt;
&lt;li&gt;Click Set and then click OK.&lt;/li&gt;
&lt;/ol&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;Note:&lt;/strong&gt; If the Value(s) box contains a value, you must derive the new value by using a Boolean BITWISE-OR calculation of the existing value and the value that enables the replication change you are making. Then convert that value to an integer. Therefore, if a value is set, convert the integer value to a binary value and OR that value with the value 0001. Then convert the results back to an integer and type the value in the Edit Attribute box.&lt;br /&gt;
For example, if the existing decimal value is 4, that value is equal to 0100 in the binary system. The value that enables change notification is 1, or 0001 in binary. The OR operation combines 0 OR 0 = 0, 0 OR 1 = 1, 1 OR 0 = 1, 1 OR 1 = 1. Therefore, the following OR calculation computes the binary value:&lt;br /&gt;
0100 (existing value)&lt;br /&gt;
0001 (value that enables change notification)&lt;br /&gt;
0101 (adds enable change notification to the existing setting) The binary value 0101 converts to the digital value 5. For information about binary calculations and converting binary values to digital values, see Windows 2000 Server Help.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Due to the increased communications needs of Change Notification replication, one should not simply enable change notification on all links. Latency and available bandwidth needs to be reviewed prior to making this type of change. As a general rule of thumb, I wouldn't consider doing this across any link with more than 50ms of latency, so intercontinental links are pretty much out of the question regardless of bandwidth. I have never seen any absolute recommendations about the minimum amount of bandwidth needed to support a change notification environment, but the rule of thumb has been 5Mbps total bandwidth AND 1Mbps average free bandwidth before even considering change notification replication. Even if your environment meets that minimum, be prepared to reverse the configuration should overall network performance be adversely affected.&lt;br /&gt;
Even with change notification, one still needs to be judicious about the proper assignment of server connections within the ntDS config of each server in Sites and Services; probably even more so. This is because the fewer servers that each server needs to notify, the faster each server will complete their replication cycle and the fewer system resources will be consumed. One can think of each server connection as a link in a chain. The longest chain needed (spanning tree depth) to get a change from point A to point B will drive the convergence time in your environment. The trick is keeping both connections per server and total communications chain length low for optimal replication performance.&lt;br /&gt;
Even if you are lucky enough to have a WAN that can support change notification from end-to-end, do not expect instant change convergence. In most production enterprise environments with an expected number of DCs and sites, the convergence time will still likely be on the order of a couple minutes. This is still a significant improvement over the 30-40 minutes one expects in a mesh type replication configuration with scheduled replication.&lt;br /&gt;
For a more in depth discussion of AD replication considerations, please see the following &lt;a href="http://technet.microsoft.com/en-us/library/cc755994(WS.10).aspx"&gt;article&lt;/a&gt; from Microsoft.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4377279713904753127-6784274190834908113?l=smartit4smb.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/SmartItForSmb/~4/zmZVD5zemtI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://smartit4smb.blogspot.com/feeds/6784274190834908113/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://smartit4smb.blogspot.com/2011/03/advanced-ad-inter-site-replication.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4377279713904753127/posts/default/6784274190834908113?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4377279713904753127/posts/default/6784274190834908113?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/SmartItForSmb/~3/zmZVD5zemtI/advanced-ad-inter-site-replication.html" title="Advanced AD Inter-Site Replication" /><author><name>IT Guy</name><uri>http://www.blogger.com/profile/06077702289675708030</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="22" src="http://3.bp.blogspot.com/__3Fv9I-dKhM/THCBA7MpYkI/AAAAAAAAAAQ/i0ELDMJBiuQ/S220/glasses.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://smartit4smb.blogspot.com/2011/03/advanced-ad-inter-site-replication.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkcEQXkzfyp7ImA9WhZSE0w.&quot;"><id>tag:blogger.com,1999:blog-4377279713904753127.post-6907271134704640171</id><published>2011-03-28T07:00:00.001-04:00</published><updated>2011-03-28T07:00:00.787-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-03-28T07:00:00.787-04:00</app:edited><title>Vacation Over</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/FOAsp8bkXFguwtmKJR7nurhRgxs/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/FOAsp8bkXFguwtmKJR7nurhRgxs/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/FOAsp8bkXFguwtmKJR7nurhRgxs/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/FOAsp8bkXFguwtmKJR7nurhRgxs/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;span xmlns=""&gt;&lt;/span&gt;&lt;br /&gt;
Well my little vacation was far longer than originally planned. &lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;Now that things have settled into a manageable routine, it is time to climb back on the "blogging" horse. Unfortunately, I know that I will not be able to maintain the daily publishing target that I was striving for before, so I am going to back off of that promise and aim for a more or less 2 time per week schedule with Tuesdays and Thursdays @ 7A Eastern being the targets for new content.&lt;br /&gt;
As always, should there be any specific desire for a topic, simply drop me a message or comment and we will see if we can't address that post-haste.&lt;br /&gt;
Thanks for your patience.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4377279713904753127-6907271134704640171?l=smartit4smb.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/SmartItForSmb/~4/kjsLk0uqRiM" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://smartit4smb.blogspot.com/feeds/6907271134704640171/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://smartit4smb.blogspot.com/2011/03/vacation-over.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4377279713904753127/posts/default/6907271134704640171?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4377279713904753127/posts/default/6907271134704640171?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/SmartItForSmb/~3/kjsLk0uqRiM/vacation-over.html" title="Vacation Over" /><author><name>IT Guy</name><uri>http://www.blogger.com/profile/06077702289675708030</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="22" src="http://3.bp.blogspot.com/__3Fv9I-dKhM/THCBA7MpYkI/AAAAAAAAAAQ/i0ELDMJBiuQ/S220/glasses.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://smartit4smb.blogspot.com/2011/03/vacation-over.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A04ESXw5cSp7ImA9Wx5bE0k.&quot;"><id>tag:blogger.com,1999:blog-4377279713904753127.post-179443289936295087</id><published>2010-10-29T06:56:00.001-04:00</published><updated>2010-10-29T06:58:28.229-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-10-29T06:58:28.229-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="SCCM" /><title>Other Common Problems Preventing SCCM Client Installation</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/ULeezjXXg_cI3pSNEeVY95KxjQI/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ULeezjXXg_cI3pSNEeVY95KxjQI/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/ULeezjXXg_cI3pSNEeVY95KxjQI/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ULeezjXXg_cI3pSNEeVY95KxjQI/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;span xmlns=""&gt;&lt;/span&gt;&lt;br /&gt;
Over the last 4 days, we have covered several of the common items that prevent SCCM Client installation and operation. Today we will cover a few more common issues, such as the dreaded VAPPDeploy registration issue, and common issues with the Windows Installer Itself.&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;
&lt;h2&gt;Fixing Issues related to VAPPDeploy Registration&lt;/h2&gt;If you see in the CCMSetup log errors relating to an inability to properly register VAppDeploy.DLL, the underlying problem is very likely a DLL registration problem, but it is not with VAppDeploy.dll. The real problem is likely with an improper version of the ATL.dll being registered from a prior version of the SCCM/SMS client. You can try to register the ATL.dll file by running &lt;strong&gt;regsvr32 atl.dll /s &lt;/strong&gt;and then trying to reinstall the client. If that still fails due to a VAppDeploy registration problem, perform a complete client wipe as was described in the &lt;a href="http://smartit4smb.blogspot.com/2010/10/repairing-sccm-clients-with-duplicate.html"&gt;Duplicate GUID article&lt;/a&gt; making sure that the CCM folder (%WIN%\system32\ccm) is removed. VAppDeploy &lt;span style="text-decoration: underline;"&gt;should&lt;/span&gt; no longer be a reason why the client doesn't install.&lt;br /&gt;
&lt;h2&gt;Fixing Issues Relating to Installer Error 1601&lt;/h2&gt;If you are seeing the client installation fail due to 1601 errors, the problem is with the Windows installer itself. To address these errors, simply run &lt;strong&gt;MSIEXEC /unreg /q&lt;/strong&gt; on the machine. Wait about 5 seconds, and then run &lt;strong&gt;MSIEXEC /regserver /q&lt;/strong&gt;. This process should reregister the Installer on the system allowing it to respond to the CCMSetup process.&lt;br /&gt;
&lt;h2&gt;Fixing Issues Relating to Installer Error 1651&lt;/h2&gt;1651 errors are usually indicative of installation components not being fully present; however the SCCM client does a pretty good job of making sure it has everything before launching the Windows Installer. If you are seeing these errors pop up, they are usually indicative that 1 of 2 things are going on:&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;The machine needs a reboot to complete a previous installation, or&lt;/li&gt;
&lt;li&gt;The machine is not running a current version of the Windows Installer&lt;/li&gt;
&lt;/ol&gt;Needless to say, start with the reboot to see if that clears things up. If not, reinstall the Windows Installer using the latest version available.&lt;br /&gt;
&lt;h2&gt;Resolving Issues related to "Another installation is running"&lt;/h2&gt;At times, installers, including the SCCM Installer, do not properly close their sessions with the Windows Installer Service leaving the Installer Service believing that another installation is currently in progress. If you perform this process with another installation in progress, you will abnormally stop the current installation and leave the machine in an "unknown" state. If you are 100% certain another installer is not running, simply do the following:&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;Stop the &lt;em&gt;CCMSetup&lt;/em&gt; service, if present and running&lt;/li&gt;
&lt;li&gt;Using Task Manager, kill any &lt;em&gt;CCMSetup&lt;/em&gt;, &lt;em&gt;CCMClean&lt;/em&gt;, and &lt;em&gt;CCMExec&lt;/em&gt; processes that are running&lt;/li&gt;
&lt;li&gt;Reconfirm your believe that no other installations should be running at this time&lt;/li&gt;
&lt;li&gt;Using Task Manager, kill any &lt;em&gt;MSIEXEC&lt;/em&gt; processes that are running. When you kill the one associated with the Windows Installer service, another will immediately respawn; this is fine. We just need to kill the "old" ones.&lt;/li&gt;
&lt;li&gt;Run &lt;strong&gt;MSIEXEC /unreg /q&lt;/strong&gt;; wait 5 secs; run &lt;strong&gt;MSIEXEC /regserver /q&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Try reinstalling the client; the system should no longer think that a previous installation is currently running.&lt;/li&gt;
&lt;/ol&gt;&lt;h2&gt;Conclusion&lt;/h2&gt;Hopefully this week's articles help you get through your client remediation issues. If you think there are any common solutions that I have missed, feel free to drop a comment.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4377279713904753127-179443289936295087?l=smartit4smb.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/SmartItForSmb/~4/8Sgs_QwoE9Y" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://smartit4smb.blogspot.com/feeds/179443289936295087/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://smartit4smb.blogspot.com/2010/10/other-common-problems-preventing-sccm.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4377279713904753127/posts/default/179443289936295087?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4377279713904753127/posts/default/179443289936295087?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/SmartItForSmb/~3/8Sgs_QwoE9Y/other-common-problems-preventing-sccm.html" title="Other Common Problems Preventing SCCM Client Installation" /><author><name>IT Guy</name><uri>http://www.blogger.com/profile/06077702289675708030</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="22" src="http://3.bp.blogspot.com/__3Fv9I-dKhM/THCBA7MpYkI/AAAAAAAAAAQ/i0ELDMJBiuQ/S220/glasses.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://smartit4smb.blogspot.com/2010/10/other-common-problems-preventing-sccm.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUEEQHY5cSp7ImA9Wx5bEks.&quot;"><id>tag:blogger.com,1999:blog-4377279713904753127.post-7171808826315367348</id><published>2010-10-28T07:00:00.000-04:00</published><updated>2010-10-28T07:00:01.829-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-10-28T07:00:01.829-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="SCCM WMI" /><title>Dealing with WMI Issues – Part 3</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/HJqx0yYI97Ud5F-HpXQ-mwkl7fg/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/HJqx0yYI97Ud5F-HpXQ-mwkl7fg/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/HJqx0yYI97Ud5F-HpXQ-mwkl7fg/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/HJqx0yYI97Ud5F-HpXQ-mwkl7fg/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;span xmlns=""&gt;&lt;/span&gt;&lt;br /&gt;
Over the last 2 days, we have addressed a couple of escalating methods in a process to repair the WMI subsystem on machines where it is not functioning properly. Today, we will cover, what is hopefully the last method needed, as it is a fairly drastic step: wiping the WBEM Repository.&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;
The WBEM repository is the holding point for all of the compiled MOF and MTL files, so wiping it is about as close as one can come to "starting fresh" with WMI. To wipe the repository, simply stop the winmgmt service, rename the Repository folder (%WIN%\system32\WBEM\repository) to something new like Repository.old, then restart the winmgmt service. This will force the WMI subsystem to create a new repository and perform a repair at its next access. &lt;br /&gt;
With that complete, one can simply try to reinstall the SCCM Client on the affected machine. A good portion of the machines will then properly install. A small portion will still fail with WMI-related issues. In this case, simply repeat the WMIRepair process from the SCCM Client Center application, and try to reinstall the client.&lt;br /&gt;
If after wiping the repository and re-running the WMIRepair process the client still will not install, it is probably time to throw in the towel and reimage the machine.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4377279713904753127-7171808826315367348?l=smartit4smb.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/SmartItForSmb/~4/kl8wmxTrgRg" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://smartit4smb.blogspot.com/feeds/7171808826315367348/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://smartit4smb.blogspot.com/2010/10/dealing-with-wmi-issues-part-3.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4377279713904753127/posts/default/7171808826315367348?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4377279713904753127/posts/default/7171808826315367348?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/SmartItForSmb/~3/kl8wmxTrgRg/dealing-with-wmi-issues-part-3.html" title="Dealing with WMI Issues – Part 3" /><author><name>IT Guy</name><uri>http://www.blogger.com/profile/06077702289675708030</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="22" src="http://3.bp.blogspot.com/__3Fv9I-dKhM/THCBA7MpYkI/AAAAAAAAAAQ/i0ELDMJBiuQ/S220/glasses.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://smartit4smb.blogspot.com/2010/10/dealing-with-wmi-issues-part-3.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUUEQns8cSp7ImA9Wx5bEUo.&quot;"><id>tag:blogger.com,1999:blog-4377279713904753127.post-391606096440717146</id><published>2010-10-27T07:00:00.000-04:00</published><updated>2010-10-27T07:00:03.579-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-10-27T07:00:03.579-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="SCCM WMI" /><title>Dealing with WMI Issues – Part 2</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/L2ZNJ0C1UVRKEK4giPjD_ePv7pQ/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/L2ZNJ0C1UVRKEK4giPjD_ePv7pQ/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/L2ZNJ0C1UVRKEK4giPjD_ePv7pQ/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/L2ZNJ0C1UVRKEK4giPjD_ePv7pQ/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;span xmlns=""&gt;&lt;/span&gt;&lt;br /&gt;
Assuming that the WMIDiag script did not repair the WMI Subsystem sufficiently to allow for a successful client reinstall, the next step is to run a more "invasive" WMI Repair process. Luckily, it doesn't need to come with a lot of legwork on your part.&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;
&lt;h2&gt;Enter the SCCM Client Center&lt;/h2&gt;If you haven't done so already, download the &lt;a href="http://sourceforge.net/projects/smsclictr/"&gt;SCCM Client Center v2.0.2&lt;/a&gt; from SourceForge. This tool gives you the ability to gain a great deal of info about the clients remotely including site assignment, recent advertisement and inventory activity, and the ability to trigger a number of actions on a healthy client. The Client Center also provides a number of actions that are invaluable when trying to repair clients. Unfortunately, the tool can be a bit "clunky" to use when addressing a significant number of machines and the uninstall action doesn't end up completing on a significant number of machines. However, the WMIRepair service that is included is a great follow-up to the Microsoft WMIDiag process as it goes a little bit further in trying to address the WMI subsystem. This service will also take a look at several of the key registry and DLL files, but will take it a big step beyond that. This WMIRepair process will also:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Reregister every DLL and EXE in the WMI folders&lt;/li&gt;
&lt;li&gt;Force a full service reregistration&lt;/li&gt;
&lt;li&gt;Recompile every MOF and MTL file in the repository&lt;/li&gt;
&lt;/ul&gt;To perform the WMIRepair process, simply enter the name of the machine you wish to repair in the upper left corner and click &lt;em&gt;Connect&lt;/em&gt;. Once connected, navigate to the Install/Repair tab and click the &lt;em&gt;WMIRepair&lt;/em&gt; button. You can track the progress of the service by clicking the folder icon next to the WMI Repair button and navigating to the WMIRepair.log file.&lt;br /&gt;
Once the service completes and uninstalls itself, you can once again try to install the SCCM client again to see if you can get a successful installation.&lt;br /&gt;
Even this thorough revisiting of the WMI subsystem doesn't end up solving every WMI problem, it definitely addresses a significant number of issues. In tomorrow's article, we will cover what to do when this approach still doesn't solve the problem.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4377279713904753127-391606096440717146?l=smartit4smb.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/SmartItForSmb/~4/ZaC9CI9T6lU" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://smartit4smb.blogspot.com/feeds/391606096440717146/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://smartit4smb.blogspot.com/2010/10/dealing-with-wmi-issues-part-2.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4377279713904753127/posts/default/391606096440717146?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4377279713904753127/posts/default/391606096440717146?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/SmartItForSmb/~3/ZaC9CI9T6lU/dealing-with-wmi-issues-part-2.html" title="Dealing with WMI Issues – Part 2" /><author><name>IT Guy</name><uri>http://www.blogger.com/profile/06077702289675708030</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="22" src="http://3.bp.blogspot.com/__3Fv9I-dKhM/THCBA7MpYkI/AAAAAAAAAAQ/i0ELDMJBiuQ/S220/glasses.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://smartit4smb.blogspot.com/2010/10/dealing-with-wmi-issues-part-2.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Ck8EQn8_cSp7ImA9Wx5bEEQ.&quot;"><id>tag:blogger.com,1999:blog-4377279713904753127.post-5840384353153233350</id><published>2010-10-26T07:00:00.002-04:00</published><updated>2010-10-26T07:00:03.149-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-10-26T07:00:03.149-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="WMI" /><category scheme="http://www.blogger.com/atom/ns#" term="SCCM" /><title>Dealing with WMI Issues – Part 1</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/riYYtsDREDu_lOHhz76AJBKPWf0/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/riYYtsDREDu_lOHhz76AJBKPWf0/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/riYYtsDREDu_lOHhz76AJBKPWf0/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/riYYtsDREDu_lOHhz76AJBKPWf0/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;span xmlns=""&gt;&lt;/span&gt;&lt;br /&gt;
One of the most common issues with SCCM client implementations is WMI errors. Unfortunately, while WMI errors are a common cause of problems, there is not a "one-size-fits-all" method of fixing them. In practice, there are three real approaches to addressing the problems and they are best used in a particular order to give one the best chance at success, but that is getting ahead of the game. First, we need to know that we have a problem.&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;
&lt;h2&gt;Identifying WMI problems&lt;/h2&gt;Identifying WMI problems at client installation is pretty straightforward. If you look in the CCMSetup.log file (%WINDIR%\system32\ccmsetup\setup.log), you will see one of a number of symptoms.&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Errors registering WMI Namespaces&lt;/li&gt;
&lt;li&gt;Errors compiling .MOF files&lt;/li&gt;
&lt;li&gt;Most 1603 errors are related in some way to WMI issues&lt;/li&gt;
&lt;/ul&gt;Identifying WMI problems post install gets a little harder. The most common way of finding these problems is looking at the Inventory log files. You normally will see a number of 800410XX errors in the inventory logs when WMI errors are creeping in&lt;br /&gt;
&lt;h2&gt;Phase 1 Repair&lt;/h2&gt;As mentioned earlier, there are 3 common approaches to addressing WMI errors: WMIDIAG, SCCM Client Console WMI Repair, and a Repository reset. In this first article, we will cover the WMIDIAG script. &lt;br /&gt;
WMIDIAG is a vbs script provided by Microsoft (Source at end of article) that addresses checking for common things that induce problems within the WMI subsystem. Some have said that you can run WMIDIAG with the SCCM client in place as long as it is shutdown, but I have found that if there are errors in the inventory files already you are usually better removing the client before getting started. &lt;br /&gt;
Removing the client is straightforward, simply run either &lt;em&gt;ccmsetup /uninstall&lt;/em&gt; from the %WINDIR%\system32\ccmsetup folder or use the latest ccmclean utility by running &lt;em&gt;ccmclean /client&lt;/em&gt; . Many times I will run &lt;a href="http://smartit4smb.blogspot.com/2010/10/repairing-sccm-clients-with-duplicate.html"&gt;the Client Wipe procedure&lt;/a&gt; used for duplicate GUIDs to make sure everything gets reset.&lt;br /&gt;
Once the client has been removed, one can start to address the WMI problems.&lt;br /&gt;
Simply copy the WMIDiag.vbs file local to the machine and run it. If you wish for it to run silently and simply record a log file of its activities, run it with the silent and logfilepath directives as shown below:&lt;br /&gt;
&lt;span style="color: #a31515; font-family: Consolas; font-size: 9pt;"&gt;cscript wmidiag.vbs silent=true logfilepath=c:\temp&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The script does a pretty good job of correcting permissions and registration based problems. Unfortunately, it is not a fast fix. On many machines, this process can take upwards of 5-10 minutes. &lt;br /&gt;
Once the WMIDiag script has completed, one can try to install the SCCM client again to see if you can get a successful installation. While this script doesn't end up being the stopping point for fixing many WMI problems, I have found it to do the most thorough job of checking to make sure that all of the fundamentals are in good working order. As a result, I usually start with this script.&lt;br /&gt;
Tomorrow, we will discuss the typical next step, the WMIRepair process from the &lt;a href="http://sourceforge.net/projects/smsclictr/"&gt;SCCM Client Center&lt;/a&gt; from SourceForge.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
WMIDIAG.VBS can be found at &lt;a href="http://www.microsoft.com/downloads/en/details.aspx?familyid=D7BA3CD6-18D1-4D05-B11E-4C64192AE97D&amp;amp;displaylang=en"&gt;http://www.microsoft.com/downloads/en/details.aspx?familyid=D7BA3CD6-18D1-4D05-B11E-4C64192AE97D&amp;amp;displaylang=en&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4377279713904753127-5840384353153233350?l=smartit4smb.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/SmartItForSmb/~4/fN25RBm8YL8" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://smartit4smb.blogspot.com/feeds/5840384353153233350/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://smartit4smb.blogspot.com/2010/10/dealing-with-wmi-issues-part-1.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4377279713904753127/posts/default/5840384353153233350?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4377279713904753127/posts/default/5840384353153233350?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/SmartItForSmb/~3/fN25RBm8YL8/dealing-with-wmi-issues-part-1.html" title="Dealing with WMI Issues – Part 1" /><author><name>IT Guy</name><uri>http://www.blogger.com/profile/06077702289675708030</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="22" src="http://3.bp.blogspot.com/__3Fv9I-dKhM/THCBA7MpYkI/AAAAAAAAAAQ/i0ELDMJBiuQ/S220/glasses.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://smartit4smb.blogspot.com/2010/10/dealing-with-wmi-issues-part-1.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUUBQ3wyeip7ImA9Wx5bEEg.&quot;"><id>tag:blogger.com,1999:blog-4377279713904753127.post-3932302851021140534</id><published>2010-10-25T07:05:00.002-04:00</published><updated>2010-10-25T20:34:12.292-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-10-25T20:34:12.292-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="SCCM" /><title>Repairing SCCM Clients with Duplicate GUIDs</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/P1NYDEXBtf2ODrDwbxpdacTxh20/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/P1NYDEXBtf2ODrDwbxpdacTxh20/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/P1NYDEXBtf2ODrDwbxpdacTxh20/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/P1NYDEXBtf2ODrDwbxpdacTxh20/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;span xmlns=""&gt;&lt;/span&gt;&lt;br /&gt;
After a few weeks off to get some other projects under control, I am back. This week we will address repairing common problems within the SCCM client starting with machines with duplicate GUIDs.&lt;br /&gt;
There is no reason to be ashamed when these situations arise in your SCCM sites. These machines can arise for a number of reasons within an organization and no all of them are even due to problems within the SCCM system itself. &lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;Some hardware vendors (&lt;a href="http://www.tangent.com/"&gt;Tangent Computers&lt;/a&gt; would be one example) are "shortcutting" their manufacturing processes and shipping machines without populating the SMBIOS GUID within their machine BIOS. Then when these machines are imaged, all of the machines end up with the same SCCM GUID as it is based off the SMBIOS GUID. For these machines, you need to not only address the SCCM Client, but also the underlying root cause which is the SMBIOS itself. (Tangent does have a downloadable DOS EXE to randomly generate an SMBIOS GUID on their machines) Another major cause of duplicate SCCM GUIDs is improper imaging techniques where the SCCM client was not fully removed from the "master" image prior to capture.&lt;br /&gt;
Luckily regardless of the reason why there is a duplicate GUID, the fix is straightforward and pretty easy. You simply need to remove the SCCM client and all of its history-storing pieces then re-install the client from scratch. The uninstall process can be broken into a number of discrete steps.&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;Removing the SCCM Client Certs with the ccmdelcert utility&lt;/li&gt;
&lt;li&gt;Uninstalling the client software through &lt;em&gt;ccmsetup /uninstall&lt;/em&gt; or the latest &lt;em&gt;ccmclean /client&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;Deleting the %WINDIR%\SMSCFG.ini file&lt;/li&gt;
&lt;li&gt;Deleting the %WINDIR%\system32\ccm folder&lt;/li&gt;
&lt;li&gt;Deleting the HKLM\Software\Microsoft\CCMSetup key from the registry&lt;/li&gt;
&lt;li&gt;Deleting the HKLM\Software\Microsoft\SMS key from the registry&lt;/li&gt;
&lt;/ol&gt;&lt;strong&gt;Note:&lt;/strong&gt; At the bottom of this posting is the contents of an SMS Installer script to accomplish these steps. Just put copies of the ccmclean.exe, ccmdelcert.exe and tranguid.exe from the SMS 2003 Toolkit in the C:\packages\DupGUID\files folder.&lt;br /&gt;
For those, like me, that love using the latest &lt;a href="http://sourceforge.net/projects/smsclictr/"&gt;SCCM Client Center&lt;/a&gt;, unfortunately the uninstall process within that tool does not fully address these steps, so to address these machines remotely you will need to rely on copying the files to the machines and using something like PSEXEC to start them remotely.&lt;br /&gt;
Locating which machines need this process done is a straightforward process too. One simply needs to run the &lt;em&gt;Computers that may share the same SMS Unique ID&lt;/em&gt; report from the SCCM Reporting Point. Make sure you run this process over all of the machines listed in the report including those appearing in the&amp;nbsp;Name Column, not just the ones in the previous names column. &lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;Note:&lt;/strong&gt; As the client gets reinstalled on these machines, there will be an "obsolete" record created in the All Systems Collection. The clients will not drop off the&amp;nbsp;&lt;em&gt;Computers that may share the same SMS Unique ID&lt;/em&gt; report until this obsolete record is removed.&lt;br /&gt;
&lt;br /&gt;
Script contents below:&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;Document Type: IPF&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;item: Global&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;Version=6.0&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;Title English=Duplicate SCCM GUID Repair&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;Flags=00000100&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;Languages=0 0 65 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;LanguagesList=English&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;Default Language=2&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;Copy Default=1&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;Japanese Font Size=9&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;Start Gradient=0 0 255&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;End Gradient=0 0 0&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;Windows Flags=00000100000000010010110000011000&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;Message Font=MS Sans Serif&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;Font Size=8&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;Disk Filename=SETUP&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;Patch Flags=0000000000000001&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;Patch Threshold=85&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;Patch Memory=4000&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;FTP Cluster Size=20&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;end&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;item: Check Disk Space&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;end&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;item: Set Variable&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;Variable=ROOT&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;Value=C:&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;end&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;item: Get Environment Variable&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;Variable=WINDIR&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;Environment=WINDIR&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;end&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;item: Install File&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;Source=C:\packages\DupGUID\files\*.*&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;Destination=%ROOT%\temp\dupguid&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;Flags=0000000000100010&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;end&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;item: Execute Program&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;Pathname=%ROOT%\temp\dupguid\ccmdelcert.exe&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;Default Directory=%ROOT%\temp\dupguid&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;Flags=00001010&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;end&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;item: Delete File&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;Pathname=%WINDIR%\SMSCFG.ini&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;end&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;item: Execute Program&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;Pathname=%ROOT%\temp\dupguid\ccmclean&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;Command Line=/client /q&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;Default Directory=%ROOT%\temp\dupguid&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;Flags=00001010&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;end&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;item: Insert Line into Text File&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;Pathname=%WINDIR%\system32\ccm\temp.txt&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;New Text=TEMP&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;Line Number=0&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;Flags=00010000&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;end&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;item: Delete File&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;Pathname=%WINDIR%\system32\ccm\temp.txt&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;Flags=00001100&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;end&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;item: Edit Registry&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;Total Keys=1&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;Key=SOFTWARE\Microsoft\CCMSetup&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;Root=130&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;end&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;item: Edit Registry&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;Total Keys=1&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;Key=SOFTWARE\Microsoft\SMS&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;Root=130&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;end&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4377279713904753127-3932302851021140534?l=smartit4smb.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/SmartItForSmb/~4/sc_sWeUeS9U" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://smartit4smb.blogspot.com/feeds/3932302851021140534/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://smartit4smb.blogspot.com/2010/10/repairing-sccm-clients-with-duplicate.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4377279713904753127/posts/default/3932302851021140534?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4377279713904753127/posts/default/3932302851021140534?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/SmartItForSmb/~3/sc_sWeUeS9U/repairing-sccm-clients-with-duplicate.html" title="Repairing SCCM Clients with Duplicate GUIDs" /><author><name>IT Guy</name><uri>http://www.blogger.com/profile/06077702289675708030</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="22" src="http://3.bp.blogspot.com/__3Fv9I-dKhM/THCBA7MpYkI/AAAAAAAAAAQ/i0ELDMJBiuQ/S220/glasses.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://smartit4smb.blogspot.com/2010/10/repairing-sccm-clients-with-duplicate.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUIFRXg5fCp7ImA9Wx5UGU8.&quot;"><id>tag:blogger.com,1999:blog-4377279713904753127.post-8421892735959161838</id><published>2010-10-07T07:00:00.002-04:00</published><updated>2010-10-24T08:31:54.624-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-10-24T08:31:54.624-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Script" /><category scheme="http://www.blogger.com/atom/ns#" term="GPO" /><title>GPO Scripts – Creating your own ADMX/ADML files</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/ANFEpLHhyg5WdLWCS8GUd0AafAw/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ANFEpLHhyg5WdLWCS8GUd0AafAw/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/ANFEpLHhyg5WdLWCS8GUd0AafAw/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ANFEpLHhyg5WdLWCS8GUd0AafAw/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;span xmlns=""&gt;&lt;/span&gt;&lt;br /&gt;
Unfortunately a full decade after the release of Active Directory and the introduction of its powerful Group Policy Engine, many, if not most, application vendors have not yet got with the program and produced template files for managing their applications via GPO. To get around this limitation, many administrators have gotten in the habit of "rolling their own" policy template files in order to be able to manage application settings quickly and easily. Unfortunately, doing so manually requires a lot of effort in order to get the file formatting correct. &lt;br /&gt;
Luckily the author or today's script from the &lt;a href="http://gallery.technet.microsoft.com/ScriptCenter/en-us"&gt;Technet Script Center&lt;/a&gt;, Mariano S. Cosentino, has made our life much easier by being able to simply convert .REG registry files to appropriate ADMx/ADML files automatically. While not perfect, the script definitely takes most of the work out of the process. To do this the script makes a few assumptions: &lt;br /&gt;
&lt;ol&gt;&lt;li&gt;the "name" of the value is also used as the caption for all displays.&lt;/li&gt;
&lt;li&gt;all dwords values are assigned a numeric textbox for data entry&lt;/li&gt;
&lt;li&gt;all other value types are treated as strings and assigned a textbox for data entry.&lt;/li&gt;
&lt;/ol&gt;&lt;br /&gt;
&lt;br /&gt;
Known Limitations&lt;br /&gt;
&lt;strong&gt;@ or (Default)&lt;/strong&gt;&lt;br /&gt;
The tools will not handle correctly the "@" or unnamed value name. This is the one that in the registry editor shows as (Default).&lt;br /&gt;
WORKAROUND: For now it's assigning the value to a "(Default)" value, but as you can see in the examples bellow, windows does not recognize this "(Default)" value as the real "(Default)" value.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;Hex, Hex(0) ...&lt;/strong&gt;&lt;br /&gt;
This is another example of things that I was not able to learn from the ADMX files that I have available.&lt;br /&gt;
We have several cases of registry files that assigning a value composed of several 2 char Hexadecimal values, but I have not find any ADMX file that applies this kind of settings to to policies.&lt;br /&gt;
WORKAROUND: For now, the script will make this hexadecimal values into a text.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;HKU or HKEY_USERS&lt;/strong&gt;&lt;br /&gt;
The ADMX definition allows you to set policies for Users (Current User, actually) and/or Computers, this does not include the HKU or the HKEY_USERS.&lt;br /&gt;
WORKAROUND: The script will treat any HKU policy as a HKCU (it will clean any named user defined as part of the HKU).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;Usage:&lt;/strong&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
CSCRIPT REG_2_ADMXL.vbs registry-file language [name]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
registry-file is the name and path of the registry file to be converted.&lt;br /&gt;
language is the language and culture to be used, ie: en-US, sp-AR, etc.&lt;br /&gt;
name Display Name to show in the GPO. if omited "REG_2_ADMXL Generated Policy" will be used.&lt;br /&gt;
The output file will be named after the .REG file (if the input is myfile.REG, the output will be myfile.ADMX and myfile.ADML.&lt;br /&gt;
The ADMX output file will be saved in the same folder the input .REG file is located, while the ADML output file will be saved in a subfolder of the one the .REG file is located. The subfolder will be named after the language specified.&lt;br /&gt;
So, if the reg file is C:\myapp\myfile.reg and the lang is en-US, then the ADMX file will be as in C:\myAPP\myfile.ADMX and the ADML file will be saved as C:\myAPP\en-US\myfile.ADMX&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;' The goal of this tools is to read a .reg file and generate a .admx that would allow us to set those settings thru GPO&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;' +-----------------------------------------------------------------------------+&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;' | App.Name :&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;REG_2_ADMXL.vbs&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; |&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;' | App.Description :&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; |&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;' | This tools reads a .reg file and generates a ADMX/ADML |&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;' | pair of files that would allow us to set those settings thru GPO |&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;' | This file accepts 3 parameters: &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;|&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;' |&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1) Reg File to convert&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;|&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;' |&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;2) Default Language (i.e.: en-US or sp-AR, po-BR) |&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;' |&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;3) (optional) Display Name to show in the GPO&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;|&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;' |&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;|&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;' | The output file will be named after the .REG file (if&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;|&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;' | the input is myfile.REG, the output will be myfile.ADMX and myfile.ADML)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;|&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;' |&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; The ADMX output file will be saved in the same folder |&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;' | the input .REG file is located&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;|&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;' |&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; The ADML output file will be saved in a subfolder of |&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;' | the one the .REG file is located. The subfolder will be named after the &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;|&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;' |&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Language specified.&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;|&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;' |&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;So, if the reg file is C:\myapp\myfile.reg and the lang |&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;' | is en-US, then the ADMX file will be as in C:\myAPP\myfile.ADMX and the |&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;' | ADML file will be saved as C:\myAPP\en-US\myfile.ADMX&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;|&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;' |&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;|&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;' |&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;|&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;' |&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;|&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;' |&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; This file does a very simple assignment of input fields |&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;' |&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;If the data type is a dword a numeric textbox is used, otherwise a textbox |&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;' | will be used. &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;|&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;' |&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; In my experience, this is good enought for 90% of the&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;|&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;' | cases. And if you would like fancier stuff (like comboboxes, listboxes, |&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;' | date picker, etc.) you can still use this tool to generate the initial file |&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;' | and then add the stuff you need. &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;|&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;' |&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;|&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;' |&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;|&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;' | Current Version:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;1.02&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;|&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;' | &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; By:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Mcosentino&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;(reg_2_ADMXL at marianok.com.ar)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;|&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;' | &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Date:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Mar. 01 2010&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;|&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;' |&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;|&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;' +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -+&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;' | 1.02 03/01/10&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mcosentino&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Fixed issue with HKCU/HKCC/HKCR/HKC not&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;|&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;' | &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;being parsed correctly&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;|&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;' |&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Thanks to JimmyRolaff for reporting it&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;|&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;' |&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;|&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;' +-----------------------------------------------------------------------------+&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;' |&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;|&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;' | How to use it: &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;|&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;' |&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cscript REG_2_ADMXL.vbs &amp;lt;Registry file&amp;gt; &amp;lt;Language&amp;gt; [&amp;lt;name&amp;gt;] |&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;' |&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Sample:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;|&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;' |&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cscript REG_2_ADMXL.vbs c:\myapp\myfile.reg en-US "MY APP Policies" |&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;' |&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;|&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;' +-----------------------------------------------------------------------------+&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;Const ForReading = 1&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;dim sRegFileName&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;dim sLang&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;dim sRootDisplay&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;dim objFSO&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;set objFSO = createobject("Scripting.FileSystemObject")&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;' check that we have the necesary arguments, if not display instructions and end.&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;if wscript.Arguments.Count &amp;lt; 2 then&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;wscript.echo "Missing Parameters:" &amp;amp; vbcrlf &amp;amp; _&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;"Usage:" &amp;amp; vbcrlf &amp;amp; vbtab &amp;amp; _&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;"cscript " &amp;amp; WScript.ScriptName &amp;amp; " &amp;lt;Registry file&amp;gt; &amp;lt;Language&amp;gt; [&amp;lt;name&amp;gt;]" &amp;amp; vbcrlf &amp;amp; _&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;" Sample:" &amp;amp; vbcrlf &amp;amp; vbtab &amp;amp; _&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;"cscript " &amp;amp; WScript.ScriptName &amp;amp; " c:\myapp\myfile.reg en-US MY_APP_Policies"&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;wscript.quit&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;else&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;sRegFileName=Wscript.Arguments.Item(0)&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;sLang=Wscript.Arguments.Item(1)&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;end if&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;' Let's check that the input file really exists&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;if not objFSO.FileExists(sRegFileName) then&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;wscript.echo "File not found. Unable to open " &amp;amp; sRegFileName &amp;amp; "."&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;wscript.quit&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;end if&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;' OK, we have the necesary parameters, let's the games begin&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;' Let's check of they have specified a root node, otherwise I will use mine&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;if wscript.Arguments.Count &amp;gt;= 3 then&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;sRootDisplay=Wscript.Arguments.Item(2)&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;else &lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;sRootDisplay="REG_2_ADMXL Generated Policy"&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;end if&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;' Define the Table that will hold the categories.&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;dim lCategories()&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;redim lCategories(4,0)&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;' First field is the name&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;' Second field is the data&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;' Third field is the GUID&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;' Fourth field is the GUID for the parent&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;' Set Node 0 with the data of the Root node.&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;' I must admit that is not really nice to be using node 0 this way, but it works.&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; lCategories(4,0) = ""&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; lCategories(1,0) = sRootDisplay&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; lCategories(2,0) = sRootDisplay&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; lCategories(3,0) = "MARIANOKS_XML_2_ADMXL"&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;' Define the table that will hold the value assignments (from now on "policies")&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;dim lPolicies()&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;redim lPolicies(8,0)&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;' First field is the caption&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;' Second field is the GUID&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;' Third field is the GUID for the parent&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;' Fourth field is the valueName&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;' Fifth field is the ValueType&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;' Sixth field is the ValueData&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;' Seventh field is the PATH&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;' Eight Field is the class (user Machine, both)&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;' Read and import the registry file.&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;ImportRegFile(sRegFileName)&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;'Create the Basic ADMX/ADML files&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;set ADMXDoc = CreateADMX&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;set ADMLDoc = CreateADML&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;'ListCategories&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;'ListPolicies&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;'Generate the XML&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;WriteCategories&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;WritePolicies&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;' Write the XML files to disk&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;SaveXML&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;' ------------------------------------------------------------------------------------------&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;' ALL FUNCTIONS START HERE&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;' ------------------------------------------------------------------------------------------&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;sub SaveXML()&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;' This function Saves the XML files in the correct locations and with the correct name&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;dim ADMXName, ADMLName, iLastBar&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;ADMXName = replace(lcase(sRegFileName),".reg",".ADMX")&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;ADMLName = replace(lcase(sRegFileName),".reg",".ADML")&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;iLastBar = InStrRev(ADMLName,"\")&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;if iLastBar=0 then&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;ADMLName = sLang &amp;amp; "\" &amp;amp; ADMLName&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;strFolder = sLang&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;elseif iLastBar=1 then&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;ADMLName = "\" &amp;amp; sLang &amp;amp; ADMLName&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;strFolder = "\" &amp;amp; sLang&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;else&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;strFolder = left(ADMLName,iLastBar) &amp;amp; sLang&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;ADMLName = left(ADMLName,iLastBar) &amp;amp; sLang &amp;amp; "\" &amp;amp; right(ADMLName,len(ADMLName) - iLastBar)&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;end if&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;ADMXDoc.save ADMXName&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;if not objFSO.FolderExists(strFolder) then&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;objFSO.CreateFolder(strFolder)&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;end if&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;ADMLDoc.save ADMLName&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;end sub &lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;function CreateADMX ()&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;' This function creates the a template ADMX&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;' The ADMX file is the one that contains the policies, the ADML file(s) is the one that contains all the strings and tex, and is where all language/culture customization takes place.&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;' In other words, if you want to have the same policy file in a diferent language, you copy the ADML to another folder and trasnlate each string (preserving the rest of the file)&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;' All comments and settings are updated with the information from the .REG file&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;' Most of this values were obtained from reading existing ADMX files, I'm unsure of the need for some of them, so I'm including them to be safe&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;' Create the xml Document&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;Set xmlDoc = CreateObject("MSXML.DOMDocument")&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;' Create the root node for the document&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;Set objRoot = xmlDoc.createElement("policyDefinitions") &lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;xmlDoc.appendChild objRoot &lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;' Set the properties for the root node as required for the ADMX/L to work correctly&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;Set xmlAttribute = xmlDoc.createAttribute("revision")&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;Set xmlText = xmlAttribute.appendChild(xmlDoc.createTextNode("1.0"))&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;objRoot.Attributes.setNamedItem(xmlAttribute)&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;Set xmlAttribute = xmlDoc.createAttribute("schemaVersion")&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;Set xmlText = xmlAttribute.appendChild(xmlDoc.createTextNode("1.0"))&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; objRoot.Attributes.setNamedItem(xmlAttribute)&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;Set xmlAttribute = xmlDoc.createAttribute("xmlns:xsd")&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;Set xmlText = xmlAttribute.appendChild(xmlDoc.createTextNode("http://www.w3.org/2001/XMLSchema"))&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; objRoot.Attributes.setNamedItem(xmlAttribute)&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;Set xmlAttribute = xmlDoc.createAttribute("xmlns:xsi")&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;Set xmlText = xmlAttribute.appendChild(xmlDoc.createTextNode("http://www.w3.org/2001/XMLSchema-instance"))&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; objRoot.Attributes.setNamedItem(xmlAttribute)&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;'Set xmlAttribute = xmlDoc.createAttribute("xmlns")&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;''Set xmlText = xmlAttribute.appendChild(xmlDoc.createTextNode("http://www.microsoft.com/GroupPolicy/PolicyDefinitions"))&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;'Set xmlText = xmlAttribute.appendChild(xmlDoc.createTextNode("http://schemas.microsoft.com/GroupPolicy/2006/07/PolicyDefinitions"))&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;'objRoot.Attributes.setNamedItem(xmlAttribute)&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;'Create the policynamspaces node for future use&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;Set objPolNS = xmlDoc.createElement("policyNamespaces") &lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;objRoot.appendChild objPolNS&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;'Create the Target node (Looks like we need a unique one for each app, so I'll be using a GUID to ensure this)&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;Set tNode = xmlDoc.createElement("target") &lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;objPolNS.appendChild tNode&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;' Set the properties for the target node &lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;Set xmlAttribute = xmlDoc.createAttribute("prefix")&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;Set xmlText = xmlAttribute.appendChild(xmlDoc.createTextNode("Marianok")) ' I needed a unique Namespace, so I used mine (I deserve a little credit for my work, after all)&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; tNode.Attributes.setNamedItem(xmlAttribute)&lt;/span&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;Set xmlAttribute = xmlDoc.createAttribute("namespace")&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;Set xmlText = xmlAttribute.appendChild(xmlDoc.createTextNode("MSC.Policies." &amp;amp; GenerateGUID ))&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; tNode.Attributes.setNamedItem(xmlAttribute)&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;'Create the using node (defines this a a GPO)&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;Set tNode = xmlDoc.createElement("using") &lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;objPolNS.appendChild tNode&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;' Set the properties for the target node &lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;Set xmlAttribute = xmlDoc.createAttribute("prefix")&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;Set xmlText = xmlAttribute.appendChild(xmlDoc.createTextNode("windows"))&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; tNode.Attributes.setNamedItem(xmlAttribute)&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;Set xmlAttribute = xmlDoc.createAttribute("namespace")&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;Set xmlText = xmlAttribute.appendChild(xmlDoc.createTextNode("Microsoft.Policies.Windows"))&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; tNode.Attributes.setNamedItem(xmlAttribute)&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;'Create the supersededAdm node (not sure i need this, but maybe some one will use it if they find it on the output file)&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;Set tNode = xmlDoc.createElement("supersededAdm") &lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;objRoot.appendChild tNode&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;' Set the properties for the supersededAdm node &lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;Set xmlAttribute = xmlDoc.createAttribute("fileName")&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;Set xmlText = xmlAttribute.appendChild(xmlDoc.createTextNode(""))&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; tNode.Attributes.setNamedItem(xmlAttribute)&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;'Create the resources node (not sure i need this)&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;Set tNode = xmlDoc.createElement("resources") &lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;objRoot.appendChild tNode&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;' Set the properties for the target node &lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;Set xmlAttribute = xmlDoc.createAttribute("minRequiredRevision")&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;Set xmlText = xmlAttribute.appendChild(xmlDoc.createTextNode("1.0"))&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; tNode.Attributes.setNamedItem(xmlAttribute)&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;Set xmlAttribute = xmlDoc.createAttribute("fallbackCulture")&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;Set xmlText = xmlAttribute.appendChild(xmlDoc.createTextNode(sLang))&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; tNode.Attributes.setNamedItem(xmlAttribute)&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;' ' Create the definitions node&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;' Set tNode = xmlDoc.createElement("definitions") &lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;' objRoot.appendChild tNode &lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;' Create the categories node, All categories will end up here&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;Set tNode = xmlDoc.createElement("categories") &lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;objRoot.appendChild tNode &lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;' Create the policies node, All Policies will end up here&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;Set tNode = xmlDoc.createElement("policies") &lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;objRoot.appendChild tNode &lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;'&amp;lt;?xml version="1.0" encoding="utf-8"?&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;' Set objIntro = xmlDoc.createProcessingInstruction ("xml","version='1.0'") &lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;' xmlDoc.insertBefore objIntro,xmlDoc.childNodes(0) &lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;set CreateADMX = xmlDoc&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;end function&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;function CreateADML ()&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;' This function creates the a template ADML&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;' The ADMX file is the one that contains the policies, the ADML file(s) is the one that contains all the strings and tex, and is where all language/culture customization takes place.&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;' In other words, if you want to have the same policy file in a diferent language, you copy the ADML to another folder and trasnlate each string (preserving the rest of the file)&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;' All comments and settings are updated with the information from the .REG file&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;' Most of this values were obtained from reading existing ADMX/ADML files, I'm unsure of the need for some of them, so I'm including them to be safe&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;' Create the xml &lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;Set xmlDoc = CreateObject("MSXML.DOMDocument")&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;' Create the root node&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;Set objRoot = xmlDoc.createElement("policyDefinitionResources") &lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;xmlDoc.appendChild objRoot &lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;' Set the properties for the root node &lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;Set xmlAttribute = xmlDoc.createAttribute("revision")&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;Set xmlText = xmlAttribute.appendChild(xmlDoc.createTextNode("1.0"))&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;objRoot.Attributes.setNamedItem(xmlAttribute)&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;Set xmlAttribute = xmlDoc.createAttribute("schemaVersion")&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;Set xmlText = xmlAttribute.appendChild(xmlDoc.createTextNode("1.0"))&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; objRoot.Attributes.setNamedItem(xmlAttribute)&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;Set xmlAttribute = xmlDoc.createAttribute("xmlns:xsd")&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;Set xmlText = xmlAttribute.appendChild(xmlDoc.createTextNode("http://www.w3.org/2001/XMLSchema"))&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; objRoot.Attributes.setNamedItem(xmlAttribute)&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;Set xmlAttribute = xmlDoc.createAttribute("xmlns:xsi")&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;Set xmlText = xmlAttribute.appendChild(xmlDoc.createTextNode("http://www.w3.org/2001/XMLSchema-instance"))&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; objRoot.Attributes.setNamedItem(xmlAttribute)&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;' Set xmlAttribute = xmlDoc.createAttribute("xmlns")&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;' Set xmlText = xmlAttribute.appendChild(xmlDoc.createTextNode("http://www.microsoft.com/GroupPolicy/PolicyDefinitions"))&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;'' Set xmlText = xmlAttribute.appendChild(xmlDoc.createTextNode("http://schemas.microsoft.com/GroupPolicy/2006/07/PolicyDefinitions"))&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;'&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; objRoot.Attributes.setNamedItem(xmlAttribute)&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;'Create the displayName node&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;Set objPolNS = xmlDoc.createElement("displayName") &lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;objRoot.appendChild objPolNS&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;objPolNS.text="REG_2_ADMXL"&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;'Create the description node&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;Set objPolNS = xmlDoc.createElement("description") &lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;objRoot.appendChild objPolNS&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;objPolNS.text="This policy file was generated by the REG_2_ADMXL tool" &amp;amp; vbcrlf &amp;amp; _&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;"Source File: " &amp;amp; sRegFileName &amp;amp; vbcrlf &amp;amp; vbcrlf &amp;amp; _&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;"This Freeware Tool can be downloaded from www.marianok.com.ar"&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;'Create the resources node&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;Set objPolNS = xmlDoc.createElement("resources") &lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;objRoot.appendChild objPolNS&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;'Create the stringTable node. This will hold all strings for the language/culture&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;Set tNode = xmlDoc.createElement("stringTable") &lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;objPolNS.appendChild tNode&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;'Create the presentationTable node. this will hold the diferent ways in with we want the data show (texbox, combobox, listbox, calendar picker, etc)&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;Set tNode = xmlDoc.createElement("presentationTable") &lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;objPolNS.appendChild tNode&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;Set objIntro = xmlDoc.createProcessingInstruction ("xml","version='1.0'") &lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;xmlDoc.insertBefore objIntro,xmlDoc.childNodes(0) &lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;set CreateADML = xmlDoc&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;end function&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;Sub ImportRegFile(sRegFileName)&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;' this function will read the .REG file and parse it in order to store it's data in the internal tables&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;dim strLine, sTempLine, sSubkey, sValueName, sValuetype, SValueData, iIndex ,sTestFile&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Set objTextFile = objFSO.OpenTextFile(sRegFileName , ForReading,, -2)&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;' if objTextFile.AtEndOfStream &amp;lt;&amp;gt; True then sTempLine = objtextFile.ReadLine&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Do While objTextFile.AtEndOfStream &amp;lt;&amp;gt; True&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;if (objTextFile.AtEndOfStream &amp;lt;&amp;gt; True) and (bSkip &amp;lt;&amp;gt; true) then sTempLine = objtextFile.ReadLine&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;bSkip = false&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;strLine = sTempLine&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;If left(strLine, 16) = "Windows Registry" or strLine = "" or left(strLine, 8) = "REGEDIT4" Then&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;' If it's a declaratory line, then skip&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;else &lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;' If this is a KEY, then create a new category&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;If left(strLine, 1) = ";" Then&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ' If it's a comment line, then skip&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;elseIf left(strLine, 1) = "[" Then&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;' If this is a KEY, then create a new category&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sSubkey = left(right(strLine, len(strLine)- 1), len(strLine)- 2)&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;redim preserve lCategories(4,ubound(lCategories,2) +1)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;lCategories(1,ubound(lCategories,2)) = GetName(sSubkey)&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;lCategories(2,ubound(lCategories,2)) = sSubkey&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;lCategories(3,ubound(lCategories,2)) = GenerateGUID&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;lCategories(4,ubound(lCategories,2)) = GetParentGUID(sSubkey,lCategories(1,ubound(lCategories,2)))&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;elseif left(strLine, 1) = """" or left(strLine, 1) = "@" Then&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;'If the line starts with @, it's an asignation of the Default Value.&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;' I'm forcing the string to be the corresponding valuename&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if left(strLine, 1) = "@" Then&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;strLine = """(Default)""" &amp;amp; right(strLine, len(strLine)- 1)&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;' &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;strLine = """@""" &amp;amp; right(strLine, len(strLine)- 1)&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;end if&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;'If the line starts with double quotes, it's an asignation of values, this will be converted into a pilicy for the ADMX/L files&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;strLine = right(strLine, len(strLine)- 1)&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;iIndex = instr(strLine,"""")&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if iIndex &amp;gt; 0 then&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sValueName= left(strline,iIndex-1)&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;redim preserve lPolicies(8, ubound(lPolicies,2) +1)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Set TypeLib = CreateObject("Scriptlet.TypeLib")&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;lPolicies(1,ubound(lPolicies,2)) = sValueName&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; lPolicies(2,ubound(lPolicies,2)) = GenerateGUID&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;lPolicies(3,ubound(lPolicies,2)) = lCategories(3,ubound(lCategories,2))&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;lPolicies(4,ubound(lPolicies,2)) = sValueName&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;strLine=trim(strLine)&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;iIndex2 = instr(strLine,"=")&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;strLine = right(strLine, len(strLine)- iIndex2)&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;strLine=trim(strLine)&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;if left(strLine,1) = " " then strLine=right(strLine, len(strLine)-1)&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;strLine=trim(strLine)&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;if left(strLine,1) = chr(9) then strLine=right(strLine, len(strLine)-1)&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;strLine=trim(strLine)&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;if left(strLine,1) = " " then strLine=right(strLine, len(strLine)-1)&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;strLine=trim(strLine)&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;if left(strLine,1) = chr(9) then strLine=right(strLine, len(strLine)-1)&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;' Now, we need to determine if what we have on the right side of the = is an string or another kind of value.&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if left(strline,1)="""" then&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;' String value&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sValuetype = "string"&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SValueData = left(right(strLine, len(strLine)- 1), len(strLine)- 2)&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;else&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;' non string&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;iIndex = instr(strLine,":")&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if iIndex &amp;gt; 0 then&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sValuetype = left(strline,iIndex-1)&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SValueData = right(strLine, len(strLine)- iIndex)&lt;/span&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;if left(lcase(sValuetype),3) = "hex" then&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;bSkip = false&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;do&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;if right(SValueData,1)="\" then &lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;SValueData = left(SValueData,len(SValueData)-1)&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;if (objTextFile.AtEndOfStream &amp;lt;&amp;gt; True) and (bSkip &amp;lt;&amp;gt; true) then &lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;sTempLine = objtextFile.ReadLine&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;if left(sTempLine,1) = "@" or left(sTempLine,1) = "[" or left(sTempLine,1) = """" then&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;bSkip = true&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;exit do&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;else&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;SValueData = SValueData &amp;amp; sTempLine&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;end if&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;else&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;'bSkip = true&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;exit do&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;end if&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;else&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;'bSkip = true&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;exit do&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;end if&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;loop until bSkip&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;SValueData = replace (SValueData," ","") &lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;end if &lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;else&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;'&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sWriteLog "Invalid record (datatype w/o ':'): " &amp;amp; sTempLine&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;end if&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;end if&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; lPolicies(5,ubound(lPolicies,2)) = sValuetype&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; lPolicies(6,ubound(lPolicies,2)) = replace(SValueData,"\\","\")&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;sText=lCategories(2,ubound(lCategories,2))&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;lPolicies(8,ubound(lPolicies,2)) = GetClass(sText)&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;lPolicies(7,ubound(lPolicies,2)) = sText&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;else&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sWriteLog "Invalid record (Valuename w/o end quote): " &amp;amp; sTempLine&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;end if&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;else&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sWriteLog "Invalid record (or Valuename w/o quote): " &amp;amp; sTempLine&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;end if&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;end if&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;' if (objTextFile.AtEndOfStream &amp;lt;&amp;gt; True) and (bSkip &amp;lt;&amp;gt; true) then sTempLine = objtextFile.ReadLine&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;' bSkip = false&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Loop&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;objtextFile.Close&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;end sub&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;sub sWriteLog (stexto)&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;wscript.echo stexto&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;end sub&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;sub ListCategories()&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;' This is a function for testing porpouses, it will just list all items stored on the Categories table&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;dim iCounter&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;for icounter = 1 to ubound(lCategories,2)&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;sWriteLog "Caption: [" &amp;amp; lCategories(1,iCounter) &amp;amp; "] " &amp;amp; vbcrlf &amp;amp; vbtab &amp;amp; "Path: [" &amp;amp; lCategories(2,iCounter) &amp;amp; "] " &amp;amp; vbcrlf &amp;amp; vbtab &amp;amp; " GUID: [" &amp;amp; lCategories(3,iCounter) &amp;amp; "] " &amp;amp; vbcrlf &amp;amp; vbtab &amp;amp; " ParentGuid: [" &amp;amp; lCategories(4,iCounter) &amp;amp; "]"&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;next&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;end sub&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;sub ListPolicies()&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;' This is a function for testing porpouses, it will just list all items stored on the Policies table&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;dim iCounter&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;for icounter = 1 to ubound(lPolicies,2)&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;sWriteLog "Caption: [" &amp;amp; lPolicies(1,iCounter) &amp;amp; "] " &amp;amp; vbcrlf &amp;amp; vbtab &amp;amp; " GUID: [" &amp;amp; lPolicies(2,iCounter) &amp;amp; "] " &amp;amp; vbcrlf &amp;amp; vbtab &amp;amp; " ParentGuid: [" &amp;amp; lPolicies(3,iCounter) &amp;amp; "] " &amp;amp; vbcrlf &amp;amp; vbtab &amp;amp; " Name: [" &amp;amp; lPolicies(3,iCounter) &amp;amp; "] " &amp;amp; vbcrlf &amp;amp; vbtab &amp;amp; " Type: [" &amp;amp; lPolicies(3,iCounter) &amp;amp; "] " &amp;amp; vbcrlf &amp;amp; vbtab &amp;amp; " Data: [" &amp;amp; lPolicies(6,iCounter) &amp;amp; "]"&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;next&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;end sub&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;sub WriteCategories()&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;'This function converts the KEYS read from the .REG file into the corresponding categories for the GPOs&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;dim iCounter&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;set ADMXParentNode = ADMXDoc.selectSingleNode("policyDefinitions/categories")&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;set ADMLStringNode = ADMLDoc.selectSingleNode("policyDefinitionResources/resources/stringTable")&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;for icounter = 0 to ubound(lCategories,2)&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;' sWriteLog "Path: [" &amp;amp; lCategories(1,iCounter) &amp;amp; "] " &amp;amp; vbcrlf &amp;amp; vbtab &amp;amp; _&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;' " GUID: [" &amp;amp; lCategories(2,iCounter) &amp;amp; "] " &amp;amp; vbcrlf &amp;amp; vbtab &amp;amp; _&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;' " ParentGuid: [" &amp;amp; lCategories(3,iCounter) &amp;amp; "]"&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;' Create the category node on the ADMX file&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;Set objCategory = ADMXDoc.createElement("category") &lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;ADMXParentNode.appendChild objCategory &lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;' Set the properties for the category node &lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;Set xmlAttribute = ADMXDoc.createAttribute("name")&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;Set xmlText = xmlAttribute.appendChild(ADMXDoc.createTextNode("CAT_" &amp;amp; lCategories(3,iCounter)))&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; objCategory.Attributes.setNamedItem(xmlAttribute)&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;Set xmlAttribute = ADMXDoc.createAttribute("displayName")&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;sTexto="$(string.CAT_" &amp;amp; lCategories(3,iCounter)&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;Set xmlText = xmlAttribute.appendChild(ADMXDoc.createTextNode(sTexto &amp;amp; ")"))&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; objCategory.Attributes.setNamedItem(xmlAttribute)&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;Set xmlAttribute = ADMXDoc.createAttribute("explainText")&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;sTexto="$(string.CAT_" &amp;amp; lCategories(3,iCounter)&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;Set xmlText = xmlAttribute.appendChild(ADMXDoc.createTextNode(sTexto &amp;amp; "_HELP)"))&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; objCategory.Attributes.setNamedItem(xmlAttribute)&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;' Set the parent category (so AD knows how to build the Tree)&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;if lCategories(4,iCounter) &amp;lt;&amp;gt; "" then&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;Set objTemp = ADMXDoc.createElement("parentCategory") &lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;objCategory.appendChild objTemp &lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;Set xmlAttribute = ADMXDoc.createAttribute("ref") &lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;Set xmlText = xmlAttribute.appendChild(ADMXDoc.createTextNode("CAT_" &amp;amp; lCategories(4,iCounter)))&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;objTemp.Attributes.setNamedItem(xmlAttribute) &lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;end if&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;' Create the string node on the ADML file&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;Set objTemp = ADMLDoc.createElement("string") &lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;ADMLStringNode.appendChild objTemp &lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;Set xmlAttribute = ADMLDoc.createAttribute("id")&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;Set xmlText = xmlAttribute.appendChild(ADMLDoc.createTextNode("CAT_" &amp;amp; lCategories(3,iCounter)))&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;objTemp.Attributes.setNamedItem(xmlAttribute)&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;objTemp.text = lCategories(1,iCounter)&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;Set objTemp = ADMLDoc.createElement("string") &lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;ADMLStringNode.appendChild objTemp &lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;Set xmlAttribute = ADMLDoc.createAttribute("id")&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;Set xmlText = xmlAttribute.appendChild(ADMLDoc.createTextNode("CAT_" &amp;amp; lCategories(3,iCounter) &amp;amp; "_HELP"))&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;objTemp.Attributes.setNamedItem(xmlAttribute)&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;objTemp.text = "This Category configures the Values located under the [" &amp;amp; lCategories(2,iCounter) &amp;amp; "] Key." &amp;amp; vbcrlf &amp;amp; vbcrlf &amp;amp; _&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;"This policy file was generated by the REG_2_ADMXL tool" &amp;amp; vbcrlf &amp;amp; _&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;"This Freeware Tool can be downloaded from www.marianok.com.ar"&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;' &amp;lt;parentCategory ref="SAMPLE" /&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;next&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;end sub&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;sub WritePolicies()&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;dim iCounter&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;set ADMXParentNode = ADMXDoc.selectSingleNode("policyDefinitions/policies")&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;set ADMLStringNode = ADMLDoc.selectSingleNode("policyDefinitionResources/resources/stringTable")&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;set ADMLPresentationNode = ADMLDoc.selectSingleNode("policyDefinitionResources/resources/presentationTable")&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;for icounter = 1 to ubound(lPolicies,2)&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;' sWriteLog "Path: [" &amp;amp; lPolicies(1,iCounter) &amp;amp; "] " &amp;amp; vbcrlf &amp;amp; vbtab &amp;amp; _&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;' " GUID: [" &amp;amp; lPolicies(2,iCounter) &amp;amp; "] " &amp;amp; vbcrlf &amp;amp; vbtab &amp;amp; _&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;' " ParentGuid: [" &amp;amp; lPolicies(3,iCounter) &amp;amp; "]"&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;' Create the policy node On the ADMX File&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;Set objPolicy = ADMXDoc.createElement("policy") &lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;ADMXParentNode.appendChild objPolicy &lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;' Set the properties for the Policy node On the ADMX File &lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;Set xmlAttribute = ADMXDoc.createAttribute("name")&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;Set xmlText = xmlAttribute.appendChild(ADMXDoc.createTextNode("POL_" &amp;amp; lPolicies(2,iCounter)))&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; objPolicy.Attributes.setNamedItem(xmlAttribute)&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;Set xmlAttribute = ADMXDoc.createAttribute("displayName")&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;Set xmlText = xmlAttribute.appendChild(ADMXDoc.createTextNode("$(string.POL_" &amp;amp; lPolicies(2,iCounter) &amp;amp; ")"))&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; objPolicy.Attributes.setNamedItem(xmlAttribute)&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;Set xmlAttribute = ADMXDoc.createAttribute("explainText")&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;Set xmlText = xmlAttribute.appendChild(ADMXDoc.createTextNode("$(string.POL_" &amp;amp; lPolicies(2,iCounter) &amp;amp; "_HELP)"))&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; objPolicy.Attributes.setNamedItem(xmlAttribute)&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;' Set xmlAttribute = ADMXDoc.createAttribute("valueName")&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;' Set xmlText = xmlAttribute.appendChild(ADMXDoc.createTextNode(lPolicies(1,iCounter)))&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;' &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; objPolicy.Attributes.setNamedItem(xmlAttribute)&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;Set xmlAttribute = ADMXDoc.createAttribute("key")&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;Set xmlText = xmlAttribute.appendChild(ADMXDoc.createTextNode(lPolicies(7,iCounter)))&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; objPolicy.Attributes.setNamedItem(xmlAttribute)&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;Set xmlAttribute = ADMXDoc.createAttribute("class")&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;Set xmlText = xmlAttribute.appendChild(ADMXDoc.createTextNode(lPolicies(8,iCounter)))&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; objPolicy.Attributes.setNamedItem(xmlAttribute)&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;'presentation="$(presentation.Sample_Textbox)"&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;'explainText="$(string.Sample_Textbox_Help)" &lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;' Create the string node On the ADML File&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;Set objTemp = ADMLDoc.createElement("string") &lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;ADMLStringNode.appendChild objTemp &lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;Set xmlAttribute = ADMLDoc.createAttribute("id")&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;Set xmlText = xmlAttribute.appendChild(ADMLDoc.createTextNode("POL_" &amp;amp; lPolicies(2,iCounter)))&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;objTemp.Attributes.setNamedItem(xmlAttribute)&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;objTemp.text = lPolicies(1,iCounter) &lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;Set objTemp = ADMLDoc.createElement("string") &lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;ADMLStringNode.appendChild objTemp &lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;Set xmlAttribute = ADMLDoc.createAttribute("id")&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;Set xmlText = xmlAttribute.appendChild(ADMLDoc.createTextNode("POL_" &amp;amp; lPolicies(2,iCounter) &amp;amp; "_HELP"))&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;objTemp.Attributes.setNamedItem(xmlAttribute)&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;objTemp.text = "This Policy configures the Value [" &amp;amp; lPolicies(4,iCounter) &amp;amp; "] located under the [" &amp;amp; lPolicies(7,iCounter) &amp;amp; "] Key." &amp;amp; vbcrlf &amp;amp; vbcrlf &amp;amp; _&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;"In the .REG file, this setting was defined as [" &amp;amp; lPolicies(5,iCounter) &amp;amp; "] and had the value [" &amp;amp; lPolicies(6,iCounter) &amp;amp; "] assigned." &amp;amp; vbcrlf &amp;amp; vbcrlf &amp;amp; _&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;"This policy file was generated by the REG_2_ADMXL tool" &amp;amp; vbcrlf &amp;amp; _&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;"This Freeware Tool can be downloaded from www.marianok.com.ar"&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;' Parent category so AD knows under what node of the tree to show this policy &lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;Set objTemp = ADMXDoc.createElement("parentCategory") &lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;objPolicy.appendChild objTemp &lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;Set xmlAttribute = ADMXDoc.createAttribute("ref")&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;Set xmlText = xmlAttribute.appendChild(ADMXDoc.createTextNode("CAT_" &amp;amp; lPolicies(3,iCounter)))&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;objTemp.Attributes.setNamedItem(xmlAttribute) &lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;'This is another of those settings that I do not really know if i need, nor I know what are oll the posible values. &lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;' I've found 2: "SUPPORTED_WindowsVista" and "SUPPORTED_ProductOnly". Because I do not really know what this last one means, I'll use the Vista one for everything.&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;' This goes on the ADMX file&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;Set objTemp = ADMXDoc.createElement("supportedOn") &lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;objPolicy.appendChild objTemp &lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;Set xmlAttribute = ADMXDoc.createAttribute("ref")&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;Set xmlText = xmlAttribute.appendChild(ADMXDoc.createTextNode("windows:SUPPORTED_WindowsVista"))&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;objTemp.Attributes.setNamedItem(xmlAttribute) &lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;Set objElements = ADMXDoc.createElement("elements") &lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;objPolicy.appendChild objElements&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;' &amp;lt;presentation id="POL_A10AF138_0BBF_4285_85DC_A68ACC333E63"&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;' Create the presentation node&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;' This goes on the ADML file&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;Set objpresentation = ADMLDoc.createElement("presentation") &lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;ADMLPresentationNode.appendChild objpresentation &lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;Set xmlAttribute = ADMLDoc.createAttribute("id")&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;Set xmlText = xmlAttribute.appendChild(ADMLDoc.createTextNode("POL_" &amp;amp; lPolicies(2,iCounter)))&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;objpresentation.Attributes.setNamedItem(xmlAttribute)&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;' Set the presentation for the presentation node &lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;Set xmlAttribute = ADMXDoc.createAttribute("presentation")&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;Set xmlText = xmlAttribute.appendChild(ADMXDoc.createTextNode("$(presentation.POL_" &amp;amp; lPolicies(2,iCounter) &amp;amp; ")"))&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; objPolicy.Attributes.setNamedItem(xmlAttribute)&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;' Here is the cheap and basic logic that determines what kind of interface the user will have in AD to enter the policy values.&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;' Currently, the logic is: If the data is a text gets a textbox, if the data is dword gets a numeric textbox. if the data is anything else, then becomes a text.&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;' I'm aware that this does not cover all posible cases, but it's a start and enought for my current needs.&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;' This goes on the ADMX file &lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;if lcase(lPolicies(5,iCounter)) = "string" then&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;' &amp;lt;text id="Sample_TextboxPrompt" valueName="Example2textbox" /&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;Set objTemp = ADMXDoc.createElement("text") &lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;objElements.appendChild objTemp &lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;Set xmlAttribute = ADMXDoc.createAttribute("id")&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;Set xmlText = xmlAttribute.appendChild(ADMXDoc.createTextNode("TXT_" &amp;amp; lPolicies(2,iCounter)))&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;objTemp.Attributes.setNamedItem(xmlAttribute) &lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;Set xmlAttribute = ADMXDoc.createAttribute("valueName")&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;Set xmlText = xmlAttribute.appendChild(ADMXDoc.createTextNode(lPolicies(1,iCounter)))&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; objTemp.Attributes.setNamedItem(xmlAttribute)&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;' The strings for the previous data must be saved as well&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;' This goes on the ADML file &lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;' &amp;lt;TextBox refId="TXT_EA865626_37FD_48A5_8CFE_77702C6D648D"&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;' Create the string node&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Set objTextbox = ADMLDoc.createElement("textBox") &lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; objpresentation.appendChild objTextbox &lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Set xmlAttribute = ADMLDoc.createAttribute("refId")&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Set xmlText = xmlAttribute.appendChild(ADMLDoc.createTextNode("TXT_" &amp;amp; lPolicies(2,iCounter)))&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; objTextbox.Attributes.setNamedItem(xmlAttribute)&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ' &amp;lt;label&amp;gt;Country&amp;lt;/label&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Set objTemp = ADMLDoc.createElement("label") &lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;objTextbox.appendChild objTemp &lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; objTemp.text=lPolicies(1,iCounter)&lt;/span&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ' &amp;lt;defaultValue&amp;gt;US&amp;lt;/defaultValue&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Set objTemp = ADMLDoc.createElement("defaultValue") &lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; objTextbox.appendChild objTemp &lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; objTemp.text=lPolicies(6,iCounter)&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;elseif lcase(lPolicies(5,iCounter)) = "dword" then &lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;' &amp;lt;decimal id="DXT_CECFD96A_F36B_4AB8_8B0F_57F8BAB84D08" key="SOFTWARE\INTERLINK\MSCLink\90\Config" valueName="User_Id" /&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;Set objTemp = ADMXDoc.createElement("decimal") &lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;objElements.appendChild objTemp &lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;Set xmlAttribute = ADMXDoc.createAttribute("id")&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;Set xmlText = xmlAttribute.appendChild(ADMXDoc.createTextNode("DXT_" &amp;amp; lPolicies(2,iCounter)))&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;objTemp.Attributes.setNamedItem(xmlAttribute) &lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;Set xmlAttribute = ADMXDoc.createAttribute("valueName")&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;Set xmlText = xmlAttribute.appendChild(ADMXDoc.createTextNode(lPolicies(1,iCounter)))&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; objTemp.Attributes.setNamedItem(xmlAttribute)&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;' &amp;lt;decimalTextBox refId="DXT_CECFD96A_F36B_4AB8_8B0F_57F8BAB84D08"&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;' &amp;lt;/decimalTextBox&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;' Create the decimalTextBox node ' This goes on the ADML file &lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Set objTextbox = ADMLDoc.createElement("decimalTextBox") &lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; objpresentation.appendChild objTextbox &lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Set xmlAttribute = ADMLDoc.createAttribute("refId")&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Set xmlText = xmlAttribute.appendChild(ADMLDoc.createTextNode("DXT_" &amp;amp; lPolicies(2,iCounter)))&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; objTextbox.Attributes.setNamedItem(xmlAttribute)&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;elseif left(lcase(lPolicies(5,iCounter)),3) = "hex" then &lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;' This is a Hexadecimal Value ... I have not found a way to handle them so, for now, I will just handle them as string&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;Set objTemp = ADMXDoc.createElement("text") &lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;objElements.appendChild objTemp &lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;Set xmlAttribute = ADMXDoc.createAttribute("id")&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;Set xmlText = xmlAttribute.appendChild(ADMXDoc.createTextNode("HXT_" &amp;amp; lPolicies(2,iCounter)))&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;objTemp.Attributes.setNamedItem(xmlAttribute) &lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;Set xmlAttribute = ADMXDoc.createAttribute("valueName")&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;Set xmlText = xmlAttribute.appendChild(ADMXDoc.createTextNode(lPolicies(1,iCounter)))&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; objTemp.Attributes.setNamedItem(xmlAttribute)&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;' &amp;lt;decimalTextBox refId="DXT_CECFD96A_F36B_4AB8_8B0F_57F8BAB84D08"&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;' &amp;lt;/decimalTextBox&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;' Create the decimalTextBox node ' This goes on the ADML file &lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Set objTextbox = ADMLDoc.createElement("TextBox") &lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; objpresentation.appendChild objTextbox &lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Set xmlAttribute = ADMLDoc.createAttribute("refId")&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Set xmlText = xmlAttribute.appendChild(ADMLDoc.createTextNode("HXT_" &amp;amp; lPolicies(2,iCounter)))&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; objTextbox.Attributes.setNamedItem(xmlAttribute)&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;else&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;wscript.echo "UNKNOWN DATATYPE: " &amp;amp; lPolicies(5,iCounter)&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;' Create the decimalTextBox node&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;Set objTemp = ADMXDoc.createElement("Text") &lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;objElements.appendChild objTemp &lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;Set objTextbox = ADMLDoc.createElement("Text") &lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;objpresentation.appendChild objTextbox &lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;end if&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;' If we had a Boolean data or something that get's turn ON/OFF we would use this, but I have not find a good way to determine that on the fly, so I just leave it here in case i ever do.&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;' Set objTemp = ADMXDoc.createElement("enabledValue") &lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;' objPolicy.appendChild objTemp &lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;' Set objTemp = ADMXDoc.createElement("disabledValue") &lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;' objPolicy.appendChild objTemp &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;next&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;end sub&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;function GetClass(byref sKey)&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;dim iBar&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;' This function determines the scope ("CLASS" in the ADMX file) of the KEY.&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;' As allwyass, my logic is really basic: everything is BOTH, except for HKCU that get's assigned USER and HKLM that get's assigned Machine.&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;dim sTempClass&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;sTempClass = "Both"&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;if left(sKey,17)="HKEY_CURRENT_USER" then&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;sKey=right(sKey,len(sKey)-17-1)&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;sTempClass="User"&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;elseif left(sKey,4)="HKCU" then&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;sKey=right(sKey,len(sKey)-4-1)&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;sTempClass="User"&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;elseif left(sKey,18)="HKEY_LOCAL_MACHINE" then&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;sKey=right(sKey,len(sKey)-18-1)&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;sTempClass="Machine"&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;elseif left(sKey,4)="HKLM" then&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;sKey=right(sKey,len(sKey)-4-1)&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;sTempClass="Machine"&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;elseif left(sKey,17)="HKEY_CLASSES_ROOT" then&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;sKey= "SOFTWARE\Classes" &amp;amp; right(sKey,len(sKey)-17)&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;sTempClass="Both"&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;elseif left(sKey,4)="HKCR" then&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;sKey="SOFTWARE\Classes" &amp;amp; right(sKey,len(sKey)-4)&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;sTempClass="Both"&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;elseif left(sKey,19)="HKEY_CURRENT_CONFIG" then&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;sKey= "SYSTEM\CurrentControlSet\Hardware Profiles\Current" &amp;amp; right(sKey,len(sKey)-19)&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;sTempClass="Machine"&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;elseif left(sKey,4)="HKCC" then&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;sKey= "SYSTEM\CurrentControlSet\Hardware Profiles\Current" &amp;amp; right(sKey,len(sKey)-4)&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;sTempClass="Machine"&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;elseif left(sKey,10)="HKEY_USERS" then&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;sKey=right(sKey,len(sKey)-10-1)&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;iBar = instr(1,sKey,"\")&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;sKey=right(sKey,len(sKey)-iBar) &lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;sTempClass="Both"&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;elseif left(sKey,3)="HKU" then&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;sKey=right(sKey,len(sKey)-3-1)&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;iBar = instr(1,sKey,"\")&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;sKey=right(sKey,len(sKey)-iBar) &lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;sTempClass="Both"&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;end if&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;GetClass = sTempClass&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;end function&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;function GetName(sPath)&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;' This function retrieves the name of the current KEY based on the full PAth&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;iLast = InStrRev(sPath,"\")&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;sTemp="\\\\"&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;if iLast &amp;gt; 0 then&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;sTemp=right(sPath,len(sPath)-iLast)&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;end if&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;GetName=sTemp&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;end function&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;function GetParentGUID(sPath,sName)&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;' This function finds the Parent of the current registry KEY based on the PATH structure.&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;sFind = replace(sPath,"\" &amp;amp; sName,"")&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;sTemp="MARIANOKS_XML_2_ADMXL"&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;for icounter = 1 to ubound(lCategories,2)&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;if lcase(sFind) = lcase(lCategories(2,iCounter)) then&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;sTemp= lCategories(3,iCounter) &lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;end if&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;next&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;GetParentGUID=sTemp&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;end function&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;function GenerateGUID()&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;' All settings in the GP must be unique, not only for this particular ADMX but for any other on the system.&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;' The best way to ensure that is to use GUIDs to name the objects.&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Set TypeLib = CreateObject("Scriptlet.TypeLib")&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;sTemp = TypeLib.GUID&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;sTemp = replace(sTemp,"{","")&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;sTemp = replace(sTemp,"}","")&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;sTemp = replace(sTemp,"-","_")&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;GenerateGUID = left(sTemp, len(sTemp)-2)&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;end function&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4377279713904753127-8421892735959161838?l=smartit4smb.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/SmartItForSmb/~4/krMWa-XsGaE" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://smartit4smb.blogspot.com/feeds/8421892735959161838/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://smartit4smb.blogspot.com/2010/10/gpo-scripts-creating-your-own-admxadml.html#comment-form" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4377279713904753127/posts/default/8421892735959161838?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4377279713904753127/posts/default/8421892735959161838?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/SmartItForSmb/~3/krMWa-XsGaE/gpo-scripts-creating-your-own-admxadml.html" title="GPO Scripts – Creating your own ADMX/ADML files" /><author><name>IT Guy</name><uri>http://www.blogger.com/profile/06077702289675708030</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="22" src="http://3.bp.blogspot.com/__3Fv9I-dKhM/THCBA7MpYkI/AAAAAAAAAAQ/i0ELDMJBiuQ/S220/glasses.jpg" /></author><thr:total>1</thr:total><feedburner:origLink>http://smartit4smb.blogspot.com/2010/10/gpo-scripts-creating-your-own-admxadml.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CE8FQXk6eCp7ImA9Wx5VE0s.&quot;"><id>tag:blogger.com,1999:blog-4377279713904753127.post-5764740261777925085</id><published>2010-10-06T07:00:00.005-04:00</published><updated>2010-10-06T07:00:10.710-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-10-06T07:00:10.710-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Script" /><category scheme="http://www.blogger.com/atom/ns#" term="GPO" /><title>GPO Scripts – Reporting on All GPOs in a Domain</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/Q7YTg-nk_vvmS-RQuRqHvBbzGsc/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Q7YTg-nk_vvmS-RQuRqHvBbzGsc/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/Q7YTg-nk_vvmS-RQuRqHvBbzGsc/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Q7YTg-nk_vvmS-RQuRqHvBbzGsc/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;span xmlns=""&gt;&lt;/span&gt;&lt;br /&gt;
There are a significant number of times in an administrator's career when it is nice to be able to view all of the GPOs affecting a domain at a single glance. Some examples that quickly jump to mind are:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Starting a job with a new company&lt;/li&gt;
&lt;li&gt;Consulting for a new customer&lt;/li&gt;
&lt;li&gt;Discovery phase of a recent acquisition&lt;/li&gt;
&lt;/ul&gt;Here is a Powershell script from the &lt;a href="http://gallery.technet.microsoft.com/ScriptCenter/en-us"&gt;Technet Script Center&lt;/a&gt; that happens to be from an administrator of a customer that fills the bill on being able to produce an HTML report of all GPOs in a domain. &lt;br /&gt;
To use, simply replace your domain for the text "your.domain.here" in the script. &lt;strong&gt;Note:&lt;/strong&gt; for this script to work you need the Group Policy Management Feature installed on your computer.Enjoy.&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;# Script By: Jonathan Knapp#&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;# Replacement for GPOTOOL.EXE (Windows Resource Kit Tool)&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;#&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;# &lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;$results1 = Test-Path C:\GPOReports&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;# Create folder&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;if ($results = "False") {&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;New-Item C:\GPOReports -type directory -Force&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;}&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;else {&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;}&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;$results2 = Test-Path C:\GPOReports\GPOReportsGUID.html&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;# Create empty file&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;if ($results = "False") {&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;New-Item C:\GPOReports\GPOReportsGUID.html -type file -force&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;}&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;else {&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;} &lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;Import-Module -Name grouppolicy &lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;Get-GPOReport -All -Domain Your.domain.Here -Server DC01 -ReportType HTML -Path C:\GPOReports\GPOReportsAll.html&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;# now View in IE&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;Invoke-Item C:\GPOReports\GPOReportsAll.html &lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4377279713904753127-5764740261777925085?l=smartit4smb.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/SmartItForSmb/~4/HY17XKjfXXY" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://smartit4smb.blogspot.com/feeds/5764740261777925085/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://smartit4smb.blogspot.com/2010/10/gpo-scripts-reporting-on-all-gpos-in.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4377279713904753127/posts/default/5764740261777925085?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4377279713904753127/posts/default/5764740261777925085?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/SmartItForSmb/~3/HY17XKjfXXY/gpo-scripts-reporting-on-all-gpos-in.html" title="GPO Scripts – Reporting on All GPOs in a Domain" /><author><name>IT Guy</name><uri>http://www.blogger.com/profile/06077702289675708030</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="22" src="http://3.bp.blogspot.com/__3Fv9I-dKhM/THCBA7MpYkI/AAAAAAAAAAQ/i0ELDMJBiuQ/S220/glasses.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://smartit4smb.blogspot.com/2010/10/gpo-scripts-reporting-on-all-gpos-in.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEMERHY9fip7ImA9Wx5VEko.&quot;"><id>tag:blogger.com,1999:blog-4377279713904753127.post-2935288052055604028</id><published>2010-10-05T07:00:00.001-04:00</published><updated>2010-10-05T07:00:05.866-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-10-05T07:00:05.866-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Script" /><category scheme="http://www.blogger.com/atom/ns#" term="GPO" /><title>GPO Scripts – Comparing 2 GPOs</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/MV5isvauEimJirN0Zfo-Z6JHnGw/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/MV5isvauEimJirN0Zfo-Z6JHnGw/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/MV5isvauEimJirN0Zfo-Z6JHnGw/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/MV5isvauEimJirN0Zfo-Z6JHnGw/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;span xmlns=""&gt;&lt;/span&gt;&lt;br /&gt;
Many times one needs to create very similar policies to address different OUs in a domain due to policy inheritance blocks etc. Then no matter how many times you cross check the settings between the 2 policies or how careful you are in typing in the values, one either forgets a key value or consumes so much time in doing the cross checks that it doesn't seem worth the effort. &lt;span style="font-family: Wingdings;"&gt;J&lt;/span&gt;&lt;br /&gt;
The following Powershell script from the &lt;a href="http://gallery.technet.microsoft.com/ScriptCenter/en-us"&gt;Technet Script Center&lt;/a&gt; addresses that problem. The script requires 5 parameters to work. &lt;br /&gt;
-domain Your.domain.here&lt;br /&gt;
-server Which DC to use&lt;br /&gt;
-gponame GPO Name1, GPO Name 2&lt;br /&gt;
-folder Folder to contain output&lt;br /&gt;
-user or -computer (Whether you want to look at the user or computer portion of the GPO)&lt;br /&gt;
&lt;strong&gt;Note:&lt;/strong&gt; for this script to work you need the Group Policy Management Feature installed on your computer. Enjoy.&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;# -----------------------------------------------------------------------------&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;# Compare-GPO.ps1&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;# ed wilson, msft, 7/13/2010&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;#&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;# HSG-07-15-2010&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;# -----------------------------------------------------------------------------&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;#requires -version 2.0&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;Param(&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;[string]$domain ="nwtraders.com",&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;[string]$server = "dc1.nwtraders.com",&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;[string]$gponame = "aTestOuGPO,AnotherTestOuGPO",&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;[string]$folder = "c:\fso",&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;[switch]$user,&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;[switch]$computer&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;)&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;Function Get-MyModule&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;{&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;Param([string]$name)&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;if(-not(Get-Module -name $name)) &lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;{ &lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;if(Get-Module -ListAvailable | &lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;Where-Object { $_.name -eq $name })&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;{ &lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;Import-Module -Name $name &lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;$true&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;} #end if module available then import&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;else { $false } #module not available&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;} # end if not module&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;else { $true } #module already loaded&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;} #end function get-MyModule &lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;Function Get-GPOAsXML&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;{&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;Param(&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;[string[]]$gponame,&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;[string]$domain,&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;[string]$server,&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;[string]$folder&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;)&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;$gpoReports = $null&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;ForEach($gpo in $gpoName)&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;{&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;$path = Join-Path -Path $folder -ChildPath "$gpo.xml"&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;(Get-GPO -Name $gpo -Domain $domain -Server $server).`&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;GenerateReportToFile("xml",$path)&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;[array]$gpoReports + $path&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;}&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;Return $gpoReports&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;} #end get-gpoasxml&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;Function Compare-XMLGPO&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;{&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;Param([string[]]$gpoReports, $user, $computer)&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;[xml]$xml1 = Get-Content -Path $gpoReports[0]&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;[xml]$xml2 = Get-Content -Path $gpoReports[1]&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;$regpolicyComputerNodes1 = $xml1.gpo.Computer.extensiondata.extension.ChildNodes | &lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;Select-Object name, state&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;$regpolicyComputerNodes2 = $xml2.gpo.Computer.extensiondata.extension.ChildNodes | &lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;Select-Object name, state&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;$regpolicyUserNodes1 = $xml1.gpo.User.extensiondata.extension.ChildNodes | &lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;Select-Object name, state&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;$regpolicyUserNodes2 = $xml2.gpo.User.extensiondata.extension.ChildNodes | &lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;Select-Object name, state&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;if($computer)&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;{&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;Try {&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;"Comparing Computer GPO's $($gpoReports[0]) to $($gpoReports[1])`r`n"&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;Compare-Object -ReferenceObject $regpolicyComputerNodes1 `&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;-DifferenceObject $regpolicyComputerNodes2 -IncludeEqual `&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;-property name}&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;Catch [system.exception]&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;{&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;if($regPolicyComputerNodes1) &lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;{&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;"Computer GPO $($gpoReports[0]) settings `r`f"&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;$regPolicyComputerNodes1&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;}&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;else { "Computer GPO $($gpoReports[0]) not set" }&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;if($regPolicyComputerNodes2) &lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;{&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;"Computer GPO $($gpoReports[1]) settings `r`f"&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;$regPolicyComputerNodes2&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;}&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;else { "Computer GPO $($gpoReports[1]) not set"}&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;} #end catch&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;} #end if computer&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;if($user)&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;{&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;Try {&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;"Comparing User GPO's $($gpoReports[0]) to $($gpoReports[1])`r`n"&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;Compare-Object -ReferenceObject $regpolicyUserNodes1 `&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;-DifferenceObject $regpolicyUserNodes2 -SyncWindow 5 -IncludeEqual `&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;-property name}&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;Catch [system.exception]&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;{&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;if($regPolicyUserNodes1) &lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;{&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;"User GPO $($gpoReports[0]) settings `r`f"&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;$regPolicyUserNodes1&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;}&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;else { "User GPO $($gpoReports[0]) not set" }&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;if($regPolicyUserNodes2) &lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;{&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;"User GPO $($gpoReports[1]) settings `r`f"&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;$regPolicyUserNodes2&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;}&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;else { "User GPO $($gpoReports[1]) not set"}&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;}&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;} #end catch&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;} #end function compare-XMLGPO&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;# *** Entry Point to Script ***&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;if(-not ($user -or $computer))&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;{ "Please specify either -computer or -user when running script" ; exit}&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;If(-not (Get-MyModule -name "GroupPolicy")) { exit }&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;$gpoReports = Get-GpoAsXML -gponame $gponame.split(",") -server $server `&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;-domain $domain -folder $folder&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;Compare-XMLGPO -gpoReports $gpoReports -user $user -computer $computer&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4377279713904753127-2935288052055604028?l=smartit4smb.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/SmartItForSmb/~4/GpFCH4E6zo8" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://smartit4smb.blogspot.com/feeds/2935288052055604028/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://smartit4smb.blogspot.com/2010/10/gpo-scripts-comparing-2-gpos.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4377279713904753127/posts/default/2935288052055604028?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4377279713904753127/posts/default/2935288052055604028?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/SmartItForSmb/~3/GpFCH4E6zo8/gpo-scripts-comparing-2-gpos.html" title="GPO Scripts – Comparing 2 GPOs" /><author><name>IT Guy</name><uri>http://www.blogger.com/profile/06077702289675708030</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="22" src="http://3.bp.blogspot.com/__3Fv9I-dKhM/THCBA7MpYkI/AAAAAAAAAAQ/i0ELDMJBiuQ/S220/glasses.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://smartit4smb.blogspot.com/2010/10/gpo-scripts-comparing-2-gpos.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkcERHY8fCp7ImA9Wx5VEUQ.&quot;"><id>tag:blogger.com,1999:blog-4377279713904753127.post-4830569552332936277</id><published>2010-10-04T07:00:00.005-04:00</published><updated>2010-10-04T07:00:05.874-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-10-04T07:00:05.874-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Script" /><category scheme="http://www.blogger.com/atom/ns#" term="GPO" /><title>GPO Scripts – Finding a GPO given only the GUID</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/KdTVmRZF1E_ePj8-zs4DpXL-47I/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/KdTVmRZF1E_ePj8-zs4DpXL-47I/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/KdTVmRZF1E_ePj8-zs4DpXL-47I/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/KdTVmRZF1E_ePj8-zs4DpXL-47I/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;span xmlns=""&gt;&lt;/span&gt;&lt;br /&gt;
Many times when you are chasing down a GPO problem, you only have the GPO GUID that is listed in the event log entry on the machine reporting the problem. If you are dealing with a domain of any size, finding the actual GPO that is causing the problem is a tedious process that requires a lot of patience when navigating through the directory tree looking for the actual policy link with the appropriate GUID.&lt;br /&gt;
The Powershell script below from the &lt;a href="http://gallery.technet.microsoft.com/ScriptCenter/en-us"&gt;Technet Script Center&lt;/a&gt; addresses that problem and will produce an HTML report of the GPO in question given only its GUID. To use, simply replace your domain for the text "your.domain.here" in the script. &lt;strong&gt;Note:&lt;/strong&gt; for this script to work you need the Group Policy Management Feature installed on your computer. Enjoy.&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;# Script By: Jonathan Knapp&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;#&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;# Script will search GPO's for GUID&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;#&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;# &lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;$results1 = Test-Path C:\GPOReports&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;# Create folder&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;if ($results1 = "False") {&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;New-Item C:\GPOReports -type directory -Force&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;}&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;else {&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;}&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;$results2 = Test-Path C:\GPOReports\GPOReportsGUID.html&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;# Create empty file&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;if ($results = "False") {&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;New-Item C:\GPOReports\GPOReportsGUID.html -type file -force&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;}&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;else {&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;} &lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;Import-Module -Name grouppolicy &lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;$guidgpo = Read-Host "Enter the GUID of the GPO (Do Not Include Brackets {}"&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;Get-GPOReport -Domain Your.Domain.Here -Server DC01 -GUID $guidgpo -ReportType HTML -Path C:\GPOReports\GPOReportsGUID.html&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;# Now open in IE to View report&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;Invoke-Item C:\GPOReports\GPOReportsGUID.html &lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4377279713904753127-4830569552332936277?l=smartit4smb.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/SmartItForSmb/~4/hDCiEXJBfCY" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://smartit4smb.blogspot.com/feeds/4830569552332936277/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://smartit4smb.blogspot.com/2010/10/gpo-scripts-finding-gpo-given-only-guid.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4377279713904753127/posts/default/4830569552332936277?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4377279713904753127/posts/default/4830569552332936277?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/SmartItForSmb/~3/hDCiEXJBfCY/gpo-scripts-finding-gpo-given-only-guid.html" title="GPO Scripts – Finding a GPO given only the GUID" /><author><name>IT Guy</name><uri>http://www.blogger.com/profile/06077702289675708030</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="22" src="http://3.bp.blogspot.com/__3Fv9I-dKhM/THCBA7MpYkI/AAAAAAAAAAQ/i0ELDMJBiuQ/S220/glasses.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://smartit4smb.blogspot.com/2010/10/gpo-scripts-finding-gpo-given-only-guid.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Ck8EQXY4cCp7ImA9Wx5WGU4.&quot;"><id>tag:blogger.com,1999:blog-4377279713904753127.post-4401532174781296040</id><published>2010-10-01T07:00:00.001-04:00</published><updated>2010-10-01T07:00:00.838-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-10-01T07:00:00.838-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Windows 7" /><category scheme="http://www.blogger.com/atom/ns#" term="optimization" /><title>Windows 7 Optimization – Improving Performance Post Deployment</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/1E5SFWZ0n0gvmtmb8CvypIBKQYs/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/1E5SFWZ0n0gvmtmb8CvypIBKQYs/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/1E5SFWZ0n0gvmtmb8CvypIBKQYs/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/1E5SFWZ0n0gvmtmb8CvypIBKQYs/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;span xmlns=""&gt;&lt;/span&gt;&lt;br /&gt;
All this week we have talked about methods for improving Windows 7's performance prior to deployment. While these items could be changed post deployment to address performance issues on a specific machine, today we will focus on a couple tools that are already on the workstation specifically focused on addressing performance issues on machines after they are in the hands of the end-user.&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;
&lt;h2&gt;Performance Troubleshooting Wizard&lt;/h2&gt;The Performance Troubleshooting Wizard is a tool Microsoft provides that is intended to help find and fix performance related problems. The Performance troubleshooter checks issues that might slow down your computer's performance, such as how many users are currently logged on to the computer and whether multiple programs are running at the same time.&lt;br /&gt;
To launch the Performance Troubleshooting Wizard, simply select the &lt;em&gt;Check for performance issues&lt;/em&gt; under the &lt;em&gt;System and Security&lt;/em&gt; Heading in the &lt;em&gt;Troubleshooting&lt;/em&gt; area of the Control Panel. You will be presented with a screen similar to the following:&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/__3Fv9I-dKhM/TKW3vKsfusI/AAAAAAAAACo/sWG1_Pkl5Rk/s1600/perftroubleshoot.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="244" px="true" src="http://4.bp.blogspot.com/__3Fv9I-dKhM/TKW3vKsfusI/AAAAAAAAACo/sWG1_Pkl5Rk/s320/perftroubleshoot.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;Simply follow the prompts and answer the various questions it returns with, such as whether or not applications should be loaded at startup. The wizard will then reconfigure your system based upon the answers provided.&lt;br /&gt;
&lt;h2&gt;System Configuration Editor&lt;/h2&gt;The System Configuration Editor provides a simple means to control what applications and programs are launching at system startup. Many times there are applications launching at system startup that really do not need to be and these programs drain system resources away from the tasks that should be running. While this is a common means of launching for many types of malware, including the fake antivirus applications, many times there are "innocent" applications added to the system startup by the normal application installers in an effort to give you the appearance that an application launches faster. Several of the Office Applications, iTunes, QuickTime, and Acrobat are some of the many applications that use this "trick".&lt;br /&gt;
To launch the System Configuration Editor, simply run &lt;strong&gt;MSCONFIG&lt;/strong&gt; at any command prompt. You will then see a screen similar to the following:&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/__3Fv9I-dKhM/TKW32Aq1A-I/AAAAAAAAACs/nIl0zhe_Zzw/s1600/msconfig.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="214" px="true" src="http://4.bp.blogspot.com/__3Fv9I-dKhM/TKW32Aq1A-I/AAAAAAAAACs/nIl0zhe_Zzw/s320/msconfig.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
Simply Navigate over to the &lt;em&gt;Startup&lt;/em&gt; Tab. All of the programs that are set to start from the Run Keys in the registry will be listed on this tab. If you find a program that is either suspicious or simply not needed, just uncheck the checkmark next to its entry. This will disable its launch at future logins.&lt;br /&gt;
&lt;strong&gt;Note:&lt;/strong&gt; For those that are relatively new to the registry, all programs whose location begins with HKLM will launch for all users of the machine, while those whose location begins with HKCU will launch only for the current user.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4377279713904753127-4401532174781296040?l=smartit4smb.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/SmartItForSmb/~4/PfpCCvtl5RA" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://smartit4smb.blogspot.com/feeds/4401532174781296040/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://smartit4smb.blogspot.com/2010/10/windows-7-optimization-improving.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4377279713904753127/posts/default/4401532174781296040?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4377279713904753127/posts/default/4401532174781296040?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/SmartItForSmb/~3/PfpCCvtl5RA/windows-7-optimization-improving.html" title="Windows 7 Optimization – Improving Performance Post Deployment" /><author><name>IT Guy</name><uri>http://www.blogger.com/profile/06077702289675708030</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="22" src="http://3.bp.blogspot.com/__3Fv9I-dKhM/THCBA7MpYkI/AAAAAAAAAAQ/i0ELDMJBiuQ/S220/glasses.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/__3Fv9I-dKhM/TKW3vKsfusI/AAAAAAAAACo/sWG1_Pkl5Rk/s72-c/perftroubleshoot.PNG" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://smartit4smb.blogspot.com/2010/10/windows-7-optimization-improving.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkMFRXw8fyp7ImA9Wx5WGEk.&quot;"><id>tag:blogger.com,1999:blog-4377279713904753127.post-942685273212296912</id><published>2010-09-30T07:00:00.001-04:00</published><updated>2010-09-30T07:00:14.277-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-09-30T07:00:14.277-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Windows 7" /><category scheme="http://www.blogger.com/atom/ns#" term="optimization" /><title>Windows 7 Optimization – User Environment Tuning</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/wRQTYZAjKe6MCrMfuG_Rc8JpS18/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/wRQTYZAjKe6MCrMfuG_Rc8JpS18/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/wRQTYZAjKe6MCrMfuG_Rc8JpS18/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/wRQTYZAjKe6MCrMfuG_Rc8JpS18/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;span xmlns=""&gt;&lt;/span&gt;&lt;br /&gt;
In an effort to optimize the Windows 7 environment, we have covered the removal of unnecessary network and system services. These on their own will make a significant difference in the overall performance of the system, but there are still other opportunities for improvement within the user environment itself. As was the case with the previous optimization techniques, there is not a "one size fits all" configuration, so there will be some discussion surrounding the impacts of the various items.&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;
&lt;h2&gt;Disable System Restore&lt;/h2&gt;System Restore has not changed significantly in Windows 7 from its predecessors. The system restore area still provides a handy means for malware authors to address automated reinstallation of their code. Additionally, given the ease in which machines can be repaired through other means, the value provided by the system restore functionality doesn't typically justify its overhead.&lt;br /&gt;
&lt;h2&gt;Setting Visual Effects to Maximize Performance&lt;/h2&gt;Setting the Visual Effects to Maximize Performance under the system properties will minimize the amount of "flashy" transitions and visual effects presented to the user and hence will lower the amount of CPU and memory overhead needed to process these effects. This is another one of the unwinnable "form over function" arguments, so I would recommend against forcing these settings via any type of policy.&lt;br /&gt;
&lt;h2&gt;Modify MenuShowDelay&lt;/h2&gt;MenuShowDelay is a registry setting that controls the amount of time it takes for a menu in Windows 7 to pop, fade, or slide open when you hover the mouse pointer over it. By default, this setting is 400 ms. It is during this delay that the system is processing visual effects such as the fade effects. Lower values result in far less system resources being used to process these visual effects. I typically set this to 1ms. The path to this registry value is HKCU\Control Panel\Desktop\MenuShowDelay.&lt;br /&gt;
&lt;strong&gt;Note:&lt;/strong&gt; This setting is located in the HKCU hive and as a result is profile specific, so it needs to be set for every user on the machine. This can be done by either using policies or by simply populating the value in the Default User profile.&lt;br /&gt;
&lt;h2&gt;Use the Basic Theme and Disable Aero&lt;/h2&gt;We have pretty much beat this horse to death over the last couple days. While the Aero system looks awesome, one needs to ask whether the windows transparency and other effects are really worth the CPU and memory costs.&lt;br /&gt;
&lt;h2&gt;Uninstall the Gadget Platform&lt;/h2&gt;I know this is another one of those items that can cause people to begin to reach for their torches and sharpen their pitchforks, because there are a number of gadgets that do have a valid business case to them. That being said, there are also a plethora of gadgets available that are simply time, resource, and/or bandwidth "wasters". Unfortunately in most organizations, leaving this component available becomes an implicit endorsement of all gadgets and an acknowledgement that you are willing to support them. &lt;br /&gt;
If your internal policies give you the freedom to support only those gadgets that have been "approved" then by all means feel free to leave this feature enabled.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4377279713904753127-942685273212296912?l=smartit4smb.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/SmartItForSmb/~4/l_C_FIdecHc" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://smartit4smb.blogspot.com/feeds/942685273212296912/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://smartit4smb.blogspot.com/2010/09/windows-7-optimization-user-environment.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4377279713904753127/posts/default/942685273212296912?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4377279713904753127/posts/default/942685273212296912?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/SmartItForSmb/~3/l_C_FIdecHc/windows-7-optimization-user-environment.html" title="Windows 7 Optimization – User Environment Tuning" /><author><name>IT Guy</name><uri>http://www.blogger.com/profile/06077702289675708030</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="22" src="http://3.bp.blogspot.com/__3Fv9I-dKhM/THCBA7MpYkI/AAAAAAAAAAQ/i0ELDMJBiuQ/S220/glasses.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://smartit4smb.blogspot.com/2010/09/windows-7-optimization-user-environment.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkcERn47fSp7ImA9Wx5WF0g.&quot;"><id>tag:blogger.com,1999:blog-4377279713904753127.post-1461008774371687153</id><published>2010-09-29T07:00:00.000-04:00</published><updated>2010-09-29T07:00:07.005-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-09-29T07:00:07.005-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Windows 7" /><category scheme="http://www.blogger.com/atom/ns#" term="optimization" /><title>Windows 7 Optimization – Remove Unnecessary System Services Part II</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/MmlgJmFYL1MThqPO7qHAqA9ByOw/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/MmlgJmFYL1MThqPO7qHAqA9ByOw/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/MmlgJmFYL1MThqPO7qHAqA9ByOw/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/MmlgJmFYL1MThqPO7qHAqA9ByOw/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;span xmlns=""&gt;&lt;/span&gt;&lt;br /&gt;
As we discussed &lt;a href="http://smartit4smb.blogspot.com/2010/09/windows-7-optimization-remove_28.html"&gt;yesterday&lt;/a&gt;, the systems services area includes a significant number of items that are likely not being used and are just robbing CPU and memory resources from the user community. In today's article, we will cover the 2&lt;sup&gt;nd&lt;/sup&gt; half of these services that can likely be turned off and disabled in your environment with little or no effect on the user community.&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;
&lt;h2&gt;Offline Files &lt;/h2&gt;Before you reach for the pitchforks and torches, I am well aware that this service can be unbelievably useful for the mobile worker. In fact, it is one of the tools that I rely on nearly every day. The key here though is that it is a tool for the mobile worker. In most environments, the mobile workforce is the minority; typically not more than 25%-40% of the overall user base. For the remainder of the workforce, this service has little, if any, value as they should have live access to the source materials nearly all the time. If you are using a scriptable image deployment system like the OSD component of SCCM, it is a simple matter to re-enable this service automatically as a part of your task sequences that address laptop computers. Even if you are not, it is a simple step to re-enable it as a part of the build process or in response to user inquiry.&lt;br /&gt;
&lt;h2&gt;Themes &lt;/h2&gt;Like the Desktop Window Manager Session Manager Service, this is another one of the "form over function" services within the OS. This service is responsible for providing user experience theme management. Together with the Desktop Window Manager Session Manager Service, the Themes service provides the heart of the "Aero Glass engine".&lt;br /&gt;
Don't get me wrong, the Windows 7 Aero looks awesome and can even be a plus. However, disabling the themes and Desktop Window Manager Session Manager Service to make it look like Windows 2000/XP could save you several hundred MB of RAM. In a 32-bit OS, several hundred MB of RAM is significant and could keep end-user workstations from paging when using more memory intensive applications and improving overall system responsiveness. On a 4GB machine, disabling these 2 services could result in an additional 10% of system RAM being available for end-user applications without paging. On a 2GB machine, the effects are even more significant.&lt;br /&gt;
&lt;h2&gt;Windows Media Player Network Sharing &lt;/h2&gt;This service shares Windows Media Player libraries to other networked players and media devices using Universal Plug and Play. If someone can come up with a business purpose for this service, I am all ears. &lt;br /&gt;
&lt;h2&gt;Windows Search&lt;/h2&gt;This is another one of the services that fills a very useful role for the mobile workforce, but not so much for the traditional desktop worker. Think about it; desktop search indexes files on the local workstation for faster searching. In most environments, users are strongly discouraged from storing files on their desktops in favor of using network shares for disaster recovery purposes.&lt;br /&gt;
&lt;h2&gt;Conclusion&lt;/h2&gt;There are likely other services that are providing questionable value for the resources they consume, but the nine services covered in the last 2 days should cover the vast majority of the "low hanging fruit". If you have others, feel free to add your two cents.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4377279713904753127-1461008774371687153?l=smartit4smb.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/SmartItForSmb/~4/cTGXm2GF9_0" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://smartit4smb.blogspot.com/feeds/1461008774371687153/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://smartit4smb.blogspot.com/2010/09/windows-7-optimization-remove_29.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4377279713904753127/posts/default/1461008774371687153?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4377279713904753127/posts/default/1461008774371687153?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/SmartItForSmb/~3/cTGXm2GF9_0/windows-7-optimization-remove_29.html" title="Windows 7 Optimization – Remove Unnecessary System Services Part II" /><author><name>IT Guy</name><uri>http://www.blogger.com/profile/06077702289675708030</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="22" src="http://3.bp.blogspot.com/__3Fv9I-dKhM/THCBA7MpYkI/AAAAAAAAAAQ/i0ELDMJBiuQ/S220/glasses.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://smartit4smb.blogspot.com/2010/09/windows-7-optimization-remove_29.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkcDQHk_eyp7ImA9Wx5WFko.&quot;"><id>tag:blogger.com,1999:blog-4377279713904753127.post-6193820981023207722</id><published>2010-09-28T07:41:00.000-04:00</published><updated>2010-09-28T07:41:11.743-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-09-28T07:41:11.743-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Windows 7" /><category scheme="http://www.blogger.com/atom/ns#" term="optimization" /><title>Windows 7 Optimization – Remove Unnecessary System Services Part I</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/ZN5F0HWtF0-zJxvjLIpH9mcChUw/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ZN5F0HWtF0-zJxvjLIpH9mcChUw/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/ZN5F0HWtF0-zJxvjLIpH9mcChUw/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ZN5F0HWtF0-zJxvjLIpH9mcChUw/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;span xmlns=""&gt;&lt;/span&gt;&lt;br /&gt;
Just like the network services portion of the OS, the systems services area includes a significant number of items that are likely not being used and are just robbing CPU and memory resources from the user community. In today's article, we will cover the 1&lt;sup&gt;st&lt;/sup&gt; half of these services that can likely be turned off and disabled in your environment with little or no effect on the user community.&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;
&lt;h2&gt;Application Experience &lt;/h2&gt;This service is essentially a database of 3rd party apps that Microsoft maintains to automatically apply proper settings to get well known programs with issues to run without user intervention (running in compatibility mode). If your environment doesn't include any apps that need to be run in compatibility mode, then this service is simply consuming resources and there is little risk to disabling it. If you have only one or two apps that need to run in compatibility mode, then you may still be able to disable it by manually specifying the compatibility mode parameters for those apps. If your environment houses more applications requiring compatibility mode than that, this service should probably be left running in your environment.&lt;br /&gt;
&lt;h2&gt;Desktop Windows Manager Session Manager &lt;/h2&gt;This service controls the Desktop Window Manager (DWM), which is responsible for Aero (transparent windows, etc). Without this service, you won't have the Aero effects. DWM consumes a fair amount of RAM which increases with each window you have open. While these visual effects are cool, are we really getting the value out of our machines by consuming our system resources this way and potentially forcing our "real" apps to be paging for memory?&lt;br /&gt;
Given some individual's propensity for choosing "form over function", I would strongly recommend against disabling this service by any sort of policy, either local or domain. It will simply lead to a confrontation down the road that isn't worth arguing over.&lt;br /&gt;
&lt;h2&gt;Diagnostic Policy Service &lt;/h2&gt;The Diagnostic Policy Service enables dynamic problem detection, troubleshooting and resolution for Windows components. If this service is stopped, diagnostics will no longer function. This is one of the services that I am always torn as to whether it should be left on or not. I usually disable it in the system image and then simply re-enable it on higher-end machines and on an as needed basis for lower-end machines.&lt;br /&gt;
I would recommend leaving this service enabled for all of the machines that are in your "QA" pool where you test system patches, etc. This service is usually quicker at finding problems on the system than we are.&lt;br /&gt;
&lt;h2&gt;Distributed Link Tracking Client&lt;/h2&gt;This service maintains links with NTFS files within your computer or across a domain. For example, you could make a file on "Computer A." You then create a "short cut" or "link" to that file on "Computer B." If you then move the file on Computer A to a different location, this service would tell Computer B to update its information to allow uninterrupted connectivity. Even though this is functionality sounds appealing, I have not found it terribly useful in a production environment. The user communities I have worked with simply don't maintain local shortcuts to all of their work files the way that this service expects them to. Additionally, there are usually only 3 reasons why a file or folder gets moved in the 1&lt;sup&gt;st&lt;/sup&gt; place and this really only "helps" the situation in one of the 3.&lt;br /&gt;
&lt;div&gt;&lt;table border="0" style="border-collapse: collapse;"&gt;&lt;colgroup&gt;&lt;col style="width: 319px;"&gt;&lt;col style="width: 319px;"&gt;&lt;/colgroup&gt;&lt;tbody valign="top"&gt;
&lt;tr&gt;&lt;td style="border-bottom: 0.5pt solid; border-left: 0.5pt solid; border-right: 0.5pt solid; border-top: 0.5pt solid; padding-left: 7px; padding-right: 7px;"&gt;Situation leading to file/folder move&lt;/td&gt;&lt;td style="border-bottom: 0.5pt solid; border-left: medium none; border-right: 0.5pt solid; border-top: 0.5pt solid; padding-left: 7px; padding-right: 7px;"&gt;Results&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="border-bottom: 0.5pt solid; border-left: 0.5pt solid; border-right: 0.5pt solid; border-top: medium none; padding-left: 7px; padding-right: 7px;"&gt;Server Swap-out&lt;/td&gt;&lt;td style="border-bottom: 0.5pt solid; border-left: medium none; border-right: 0.5pt solid; border-top: medium none; padding-left: 7px; padding-right: 7px;"&gt;In my testing, the only time this service was able to help was when the folder was a part of a DFS hierarchy. I have been unable to get this service to update shortcuts that move to a new server. (Which is kind of expected, when you think about it)&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="border-bottom: 0.5pt solid; border-left: 0.5pt solid; border-right: 0.5pt solid; border-top: medium none; padding-left: 7px; padding-right: 7px;"&gt;Misfiled Data&lt;/td&gt;&lt;td style="border-bottom: 0.5pt solid; border-left: medium none; border-right: 0.5pt solid; border-top: medium none; padding-left: 7px; padding-right: 7px;"&gt;While the service does update the links in this situation, the individual who misfiled the data in the first place never hears that the file or folder was moved or why. This then leads to larger, non-technical problems in the future.&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="border-bottom: 0.5pt solid; border-left: 0.5pt solid; border-right: 0.5pt solid; border-top: medium none; padding-left: 7px; padding-right: 7px;"&gt;Accidental Folder Move&lt;/td&gt;&lt;td style="border-bottom: 0.5pt solid; border-left: medium none; border-right: 0.5pt solid; border-top: medium none; padding-left: 7px; padding-right: 7px;"&gt;So who of us have not gotten the call that a whole folder structure has come up "missing"? Only to find (after some digging) that it has been dragged into an adjacent folder. In this situation, the updated shortcuts may actually shorten the discovery portion of this problem. &lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;h2&gt;IP helper&lt;/h2&gt;This service provides tunnel connectivity using IPv6 transition technologies (IPv6toIPv4, ISATAP, Port Proxy, and Teredo), and IP-HTTPS. If this service is stopped, the computer will not have the enhanced connectivity benefits that these technologies offer. Bottom line on this one is that unless you are running IPv6 in your environment, there is no need for this service.&lt;br /&gt;
That's it for today, we will pick it up tomorrow with more services that can likely be turned off to provide more resources to the user.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4377279713904753127-6193820981023207722?l=smartit4smb.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/SmartItForSmb/~4/GnGqq9l44c4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://smartit4smb.blogspot.com/feeds/6193820981023207722/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://smartit4smb.blogspot.com/2010/09/windows-7-optimization-remove_28.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4377279713904753127/posts/default/6193820981023207722?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4377279713904753127/posts/default/6193820981023207722?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/SmartItForSmb/~3/GnGqq9l44c4/windows-7-optimization-remove_28.html" title="Windows 7 Optimization – Remove Unnecessary System Services Part I" /><author><name>IT Guy</name><uri>http://www.blogger.com/profile/06077702289675708030</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="22" src="http://3.bp.blogspot.com/__3Fv9I-dKhM/THCBA7MpYkI/AAAAAAAAAAQ/i0ELDMJBiuQ/S220/glasses.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://smartit4smb.blogspot.com/2010/09/windows-7-optimization-remove_28.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0UEQ306eip7ImA9Wx5WFUU.&quot;"><id>tag:blogger.com,1999:blog-4377279713904753127.post-6413968725330824077</id><published>2010-09-27T07:00:00.001-04:00</published><updated>2010-09-27T07:00:02.312-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-09-27T07:00:02.312-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="performance" /><category scheme="http://www.blogger.com/atom/ns#" term="Windows 7" /><title>Windows 7 Optimization – Remove Unnecessary Network Services</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/H68A7TKIsG9vmFH5xS6lNVaRACk/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/H68A7TKIsG9vmFH5xS6lNVaRACk/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/H68A7TKIsG9vmFH5xS6lNVaRACk/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/H68A7TKIsG9vmFH5xS6lNVaRACk/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;span xmlns=""&gt;&lt;/span&gt;&lt;br /&gt;
Roughly 1 year ago Microsoft released Windows 7 to the retail world and it has definitely been received as a significant improvement over its predecessor Vista. Many of the organizations that took a pass on Vista to stay with XP are starting to give Windows 7 a serious look for its use as their workstation OS platform going forward. As a result, we thought that we should take a look at ways to improve overall system performance within the Windows 7 environment.&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;
Windows 7, like its predecessors, includes a number of features that are really intended on either setting you up for a future that has not yet arrived or are background processes meant to try and anticipate what you will need in the future to try to improve perceived performance. While these features are intended to improve the overall user experience, in many cases they simply end up consuming valuable CPU cycles or memory lowering overall performance. This occurs because these features must actively be used in order for them to contribute to your environment and many that are enabled by default simply are not used by many organizations.&lt;br /&gt;
One area that includes a number of examples is the network services that are installed by default. Included by default is support for the IPv6 protocol, Quality of Service for the workstation, and 2 topology services to help users find other systems on the network; none of which will likely perform any significant functionality in your environment. I am not saying these are not valuable services, but they need to be used in the proper context and environment in order to provide value to the organization. Let's take a look at them one by one, so one can make an informed decision as to whether these should be included in your default Windows 7 deployment image.&lt;br /&gt;
&lt;h2&gt;IPv6 Support&lt;/h2&gt;Enabled by default is the IPv6 protocol stack. Don't confuse this for standard TCP/IP, which has become the standard network protocol for most organizations, the Internet, etc. That protocol is formally known as IPv4, and it is enabled by default as well. IPv6 is intended as a long-term replacement for IPv4 due to its increased number of available addresses and other improvements. The point is, if you haven't specifically set your LAN/WAN environment up for IPv6, why enable it? Even if you had, there would then not be a need for IPv4. The two should only both need to be enabled on the same machine during a short transition period. &lt;br /&gt;
Bottom line if you are not using IPv6 today, disable it on the workstation image. Otherwise, you are forcing the machine to maintain a protocol stack it will not be using, which will force DHCP requests to take longer to resolve because the network layer needs to ask for both addresses forcing the system to wait for the IPv6 stack to timeout before resuming normal network operations.&lt;br /&gt;
&lt;h2&gt;QoS Packet Scheduler&lt;/h2&gt;Quality of Service and its little brother Class of Service, both fill a very important role in shaping network traffic in a finite bandwidth world. These are 2 very important technologies that help ensure that traffic on bandwidth capped lines such as those used in Wide Area Networks are used to their fullest by giving priority to applications that need real-time performance and lowering the priority of less business critical applications such as web surfing. That being said, is it really necessary to shape the traffic leaving a workstation?&lt;br /&gt;
Workstations are typically placed on high-speed gigabit subnets (or potentially 100Mbps in locations with older gear) with good connectivity to all other subnets on the LAN. Running the QoS scheduler forces the network subsystem to constantly check whether or not there is some other application running on the workstation that has a higher priority request for the network, lowering overall throughput and forcing a more memory and CPU intensive queue handler to be used. &lt;br /&gt;
Bottom line, if your network is congested to the point this technology would really make a difference, your time and money would probably be much better spent improving your local switch gear than managing the QoS policy for your workstations.&lt;br /&gt;
&lt;h2&gt;Link Layer Topology Services&lt;/h2&gt;The default network configuration also includes to network services: the Link-Layer Topology Discovery Mapper I/O Driver and the Link-Layer Topology Discovery Responder. These 2 services together are responsible for finding other systems on the network; the resources that they provide such as file and print shares or presence of a web server; and displying them on&amp;nbsp;the network diagram view. In a lot of ways they are the next version of the computer browser service. In nearly every environment that I have ever been in, all of the resources that a user should have access to are provided by the login script or some other similar means. These services have no role or effect on a user's ability to find AD published printers or shares. As a result, these services then just end up adding network traffic to the environment that only helps users find things they shouldn't be looking for.&lt;br /&gt;
&lt;h2&gt;Conclusion&lt;/h2&gt;As I mentioned earlier, it is not that I don't think that these services are without merit and cannot be useful in the proper environment; I am only questioning whether or not they really should be enabled by default in your organizations base image. If you think I am missing the boat, please leave a comment explaining your point of view. It's not like I haven't been wrong before; just ask my wife… ;)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4377279713904753127-6413968725330824077?l=smartit4smb.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/SmartItForSmb/~4/AqBcrNPaZEY" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://smartit4smb.blogspot.com/feeds/6413968725330824077/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://smartit4smb.blogspot.com/2010/09/windows-7-optimization-remove.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4377279713904753127/posts/default/6413968725330824077?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4377279713904753127/posts/default/6413968725330824077?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/SmartItForSmb/~3/AqBcrNPaZEY/windows-7-optimization-remove.html" title="Windows 7 Optimization – Remove Unnecessary Network Services" /><author><name>IT Guy</name><uri>http://www.blogger.com/profile/06077702289675708030</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="22" src="http://3.bp.blogspot.com/__3Fv9I-dKhM/THCBA7MpYkI/AAAAAAAAAAQ/i0ELDMJBiuQ/S220/glasses.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://smartit4smb.blogspot.com/2010/09/windows-7-optimization-remove.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEMEQHY9eyp7ImA9Wx5WFEw.&quot;"><id>tag:blogger.com,1999:blog-4377279713904753127.post-2962822756502445216</id><published>2010-09-25T07:00:00.003-04:00</published><updated>2010-09-25T07:00:01.863-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-09-25T07:00:01.863-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Queue" /><category scheme="http://www.blogger.com/atom/ns#" term="Exchange" /><title>Diagnosing Queuing Problems – Part II</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/UEnCO6tTT7JMgYFWeYDHpKrNfmM/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/UEnCO6tTT7JMgYFWeYDHpKrNfmM/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/UEnCO6tTT7JMgYFWeYDHpKrNfmM/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/UEnCO6tTT7JMgYFWeYDHpKrNfmM/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;span xmlns=""&gt;&lt;/span&gt;&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/__3Fv9I-dKhM/TJ0GaTUsIxI/AAAAAAAAACk/1t1OVsslvtY/s1600/magnifier.jpg" imageanchor="1" style="clear: right; cssfloat: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" height="149" px="true" src="http://3.bp.blogspot.com/__3Fv9I-dKhM/TJ0GaTUsIxI/AAAAAAAAACk/1t1OVsslvtY/s200/magnifier.jpg" width="200" /&gt;&lt;/a&gt;&lt;/div&gt;Over the last 2 days we have been seriously polishing our "magnifying glasses" in effort to improve our mail delivery efficiency. &lt;a href="http://smartit4smb.blogspot.com/2010/09/playing-traffic-cop-commands-for.html"&gt;Thursday&lt;/a&gt;, we covered the basics of the queue manipulation commands. &lt;a href="http://smartit4smb.blogspot.com/2010/09/diagnosing-mail-queuing-problems-part-i.html"&gt;Yesterday&lt;/a&gt;, we covered how to use those commands to address the most common mail queuing issues.&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;&amp;nbsp;In this article we will cover the final four common queuing issues:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;span style="font-family: Times New Roman; font-size: 12pt;"&gt;Messages rejected by destination&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-family: Times New Roman; font-size: 12pt;"&gt;Cannot route one or more recipients of a message &lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-family: Times New Roman; font-size: 12pt;"&gt;Messages stuck in the submission queue&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-family: Times New Roman; font-size: 12pt;"&gt;Messages show in the poison queue&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;h2&gt;Messages rejected by a remote machine&lt;/h2&gt;&lt;span style="font-family: Times New Roman; font-size: 12pt;"&gt;The last delivery error is either a per-message error received during a command like "mail from" or an aggregate of the recipient errors. The admin may see a recipient-specific error when looking at the message but would not know which recipient caused the problem. To get even more detailed information on a particular message run:&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Times New Roman; font-size: 12pt;"&gt;&lt;strong&gt;$m=get-message &amp;lt;MessageIdentity&amp;gt; -IncludeRecipientInfo&lt;br /&gt;
$m.Recipients | fl&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Times New Roman; font-size: 12pt;"&gt;This will also retrieve the recipients and will then display them in a detailed view (the message object will only print the email addresses). Each recipient has its own &lt;em&gt;Status&lt;/em&gt; and &lt;em&gt;LastError&lt;/em&gt; fields which can help identify what recipient caused the error and take an action (maybe the recipient wasn't found in AD or the mailbox is full, etc) In addition, the &lt;em&gt;RetryCount&lt;/em&gt; property displays the number of times delivery has been attempted for that message. &lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Times New Roman; font-size: 12pt;"&gt;When messages are rejected, NDRs are usually generated. If NDR messages start queuing up, there may be two problems: delivering to recipients and delivering the NDR to the sender. NDRs are easy to identify in the queue viewer: their FromAddress field is "&amp;lt;&amp;gt;" and the subject usually starts with "Undeliverable:" It is useful in this case to take a look at the NDRs themselves. To do so we can export the NDR messages and look at their body. To export a message it must be first suspended: &lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Times New Roman; font-size: 12pt;"&gt;&lt;strong&gt;suspend-message &amp;lt;message identity&amp;gt;&lt;br /&gt;
export-message &amp;lt;message identity&amp;gt; -Path: &amp;lt;path to directory or file&amp;gt;&lt;br /&gt;
resume-message &amp;lt;message identity&amp;gt;&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;
&lt;h2&gt;Cannot route one or more recipients of a message&lt;/h2&gt;&lt;span style="font-family: Times New Roman; font-size: 12pt;"&gt;When some recipients cannot be routed, the message with the subset of un-routable recipients will end up unreachable queue. The main question an admin must answer is "why did this message end up in the unreachable queue?" As in the previous cases, the &lt;em&gt;LastError&lt;/em&gt; field will help diagnose the problem – all messages in the unreachable queue will have the &lt;em&gt;LastError&lt;/em&gt; field populated. The value of this field is a concatenation of all the errors encountered when routing all recipients. There are errors like "A matching connector cannot be found to route the external recipient" or "The mailbox recipient does not have a MDB". &lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Times New Roman; font-size: 12pt;"&gt;Of course, this doesn't help much until we realize what recipient caused what error. To do so, run the same sequence of commands as above by adding the &lt;em&gt;IncludeRecipientInfo&lt;/em&gt; parameter to the get-message task to dump the recipients. All the recipients of the messages in this queue should have a last error string that describes the reason why they couldn't be routed.&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Times New Roman; font-size: 12pt;"&gt;In most case the actions needed to fix these issues follow from the error description. For example if the error on the message was "A matching connector cannot be found to route the external recipient" and the recipient is known to be valid, then it is likely that the send connectors are misconfigured (e.g. – missing address space, missing connector). After fixing the connectors, the unreachable queue will be automatically resubmitted too; this will result in those messages being drained and routed to the appropriate delivery queues.&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Times New Roman; font-size: 12pt;"&gt;To prevent automatic resubmission (e.g., when a few connectors need to be changed or added and we don't want the unreachable queue to be resubmitted after each configuration change because many messages may end up right back in the same queue) the queue can be suspended first, later resumed, and then resubmit can be performed manually:&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Times New Roman; font-size: 12pt;"&gt;&lt;strong&gt;suspend-queue Unreachable&lt;br /&gt;
&amp;nbsp;… fix whatever is preventing the connector from connecting&lt;br /&gt;
resume-queue Unreachable&lt;br /&gt;
retry-queue Unreachable -Resubmit:$true&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;
&lt;h2&gt;Messages stuck in the submission queue&lt;/h2&gt;&lt;span style="font-family: Times New Roman; font-size: 12pt;"&gt;The administrator will be alerted by MOM when the size of the Submission queue grows over the accepted limit. This can mean sometimes that we simply have a spike in incoming mail and the queue drains slower than the usual, but some other times we may see that no messages are going through the categorizer and into the delivery queues. This is usually an indication that something is wrong inside the categorizer component. &lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Times New Roman; font-size: 12pt;"&gt;As usual, before attempting to investigate further, make sure the submission queue is not suspended (the status must be Ready).&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Times New Roman; font-size: 12pt;"&gt;&lt;strong&gt;get-queue Submission&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Times New Roman; font-size: 12pt;"&gt;One case when the above behavior happens is when the messages reach the categorizer but are being deferred and put back in the submission queue because of AD errors – the recipients cannot be resolved (this will only happen in the Hub role, as the Edge role doesn't have a resolver). The fix is to look at the messages in Retry&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Times New Roman; font-size: 12pt;"&gt;&lt;strong&gt;get-message –Filter:{Queue –eq 'Submission' –and Status –eq 'Retry'}&amp;nbsp;&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Times New Roman; font-size: 12pt;"&gt;&lt;strong&gt;Note:&lt;/strong&gt; there is no way to know exactly how long a message will be deferred for, but generally, 400-level errors in remote delivery will defer a message for the time span configured in the transport server property MessageRetryInterval (default is 1 minute). The messages in the submission queue are usually deferred for 30 minutes (non-configurable) if errors like AD connectivity failures. In addition a categorizer agent could defer a message for any duration. Unlike in the case for queues, there isn't a way for the admin to change or reset the retry time for messages.&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Times New Roman; font-size: 12pt;"&gt;If AD is unavailable, the last error on those messages will say something like "AD transient failure during resolve." The AD connectivity problem must then be investigated.&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Times New Roman; font-size: 12pt;"&gt;All message retries that are triggered by the categorizer have a reason associated with them. There are &lt;em&gt;LastError&lt;/em&gt; messages indicating whether the message has been deferred by an agent ("Message deferred by categorizer agent."), that a failure happened during content conversion ("A storage transient failure has occurred during content conversion.") etc. These errors are not always giving an exact indication on what the problem is but they make a good starting point. For example, there won't be any indication in the last error field about which agent deferred the message and why, but if get-message returns too many messages in &lt;em&gt;Retry&lt;/em&gt; with the same "deferred by agent" last error, it likely means that one of the categorizer agents has encountered a problem. The next steps may be trying to identify the agent by disabling all categorizer agents or rules, then enabling them one by one. Ultimately, debugging the agent or analyzing the tracing log of that agent, if available, may be needed.&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Times New Roman; font-size: 12pt;"&gt;Another case that we have encountered is when a categorizer agent is deadlocked and cannot finish processing a message. By default, the categorizer can only process 20 messages at once (in various stages of categorization). If all those 20 jobs are stuck, no more messages will be picked up from the submission queue for processing, and as a result, the submission queue will grow continuously until someone intervenes. To figure out which messages are just being processed by the categorizer run:&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Times New Roman; font-size: 12pt;"&gt;&lt;strong&gt;get-message –Filter: {Queue –eq 'Submission' and Status –eq 'Active'} | ft Identity&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Times New Roman; font-size: 12pt;"&gt;Active messages are those being currently in various stages of categorization (routing, resolving, content conversion). This query should return at most 20 results. Run the query a few times in a row. If the same messages are returned each time the query is run (you can see that by the fact that the identities are the same) then it is very likely that we have a stuck categorizer agent problem. The quick fix to restore mail flow is to disable the agents. The in-depth fix would be to attach a debugger and identify the call stack on all the stuck threads which will point to the "stuck" code.&lt;/span&gt;&lt;br /&gt;
&lt;h2&gt;Messages show in the poison queue&lt;/h2&gt;&lt;span style="font-family: Times New Roman; font-size: 12pt;"&gt;The poison queue does not show up when get-queue is run, unless there are messages in it. Hopefully, you have never even heard of the poison queue; let alone needed to check it. The poison queue is a special mail queue for holding severely impaired messages. This means that the server has crashed at least twice while processing those messages. This can have many causes: bugs in our code not knowing how to deal with certain kinds of input, bugs in agents, misconfigurations, etc. In general, if poison messages exist, they have uncovered a bug somewhere. It is important to realize that the messages in the poison queue are usually not invalid or malicious. They would only become malicious if attackers discover that they can crash/exploit Exchange servers in this way.&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Times New Roman; font-size: 12pt;"&gt;If you discover poison messages after a crash, you can get more information using the following commands:&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Times New Roman; font-size: 12pt;"&gt;First, take a look at the poison queue&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Times New Roman; font-size: 12pt;"&gt;&lt;strong&gt;get-queue Poison &lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Times New Roman; font-size: 12pt;"&gt;or&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Times New Roman; font-size: 12pt;"&gt;&lt;strong&gt;get-queue &amp;lt;ServerName&amp;gt;\Poison&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Times New Roman; font-size: 12pt;"&gt;This will tell how many poison messages exist. Then the messages must be looked at individually and decisions must be made on a case-by-case basis.&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Times New Roman; font-size: 12pt;"&gt;&lt;strong&gt;get-message –Queue:Poison&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Times New Roman; font-size: 12pt;"&gt;All those messages are considered suspended. The admin now has a couple of options: &lt;/span&gt;&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;&lt;span style="font-family: Times New Roman; font-size: 12pt;"&gt;Resume the messages one by one and figure out if they still make the transport service crash &lt;strong&gt;resume-message &amp;lt;poison message identity&amp;gt;&lt;/strong&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-family: Times New Roman; font-size: 12pt;"&gt;Export the poison messages to files and have the content looked at by microsoft developers (the following command exports all poison messages in the temp directory) &lt;strong&gt;get-message –Queue:Poison | export-message –Path: "C:\temp"&lt;/strong&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-family: Times New Roman; font-size: 12pt;"&gt;&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;Delete messages if they are indeed poison (and choose to send or not to send NDR) &lt;strong&gt;remove-message &amp;lt;poison message identity&amp;gt; -withNDR:$false&lt;/strong&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;span style="font-family: Times New Roman; font-size: 12pt;"&gt;&lt;br /&gt;
If the problem is suspected to be happening because of some agent, disable the agent and resume the poison messages.&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Times New Roman; font-size: 12pt;"&gt;Messages in the Poison queue never expire; they have to be either resumed or deleted by an admin.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4377279713904753127-2962822756502445216?l=smartit4smb.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/SmartItForSmb/~4/qYpwM0kuXGI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://smartit4smb.blogspot.com/feeds/2962822756502445216/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://smartit4smb.blogspot.com/2010/09/diagnosing-queuing-problems-part-ii.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4377279713904753127/posts/default/2962822756502445216?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4377279713904753127/posts/default/2962822756502445216?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/SmartItForSmb/~3/qYpwM0kuXGI/diagnosing-queuing-problems-part-ii.html" title="Diagnosing Queuing Problems – Part II" /><author><name>IT Guy</name><uri>http://www.blogger.com/profile/06077702289675708030</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="22" src="http://3.bp.blogspot.com/__3Fv9I-dKhM/THCBA7MpYkI/AAAAAAAAAAQ/i0ELDMJBiuQ/S220/glasses.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/__3Fv9I-dKhM/TJ0GaTUsIxI/AAAAAAAAACk/1t1OVsslvtY/s72-c/magnifier.jpg" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://smartit4smb.blogspot.com/2010/09/diagnosing-queuing-problems-part-ii.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEcERXs7cSp7ImA9Wx5WE08.&quot;"><id>tag:blogger.com,1999:blog-4377279713904753127.post-320629268689617215</id><published>2010-09-24T07:00:00.002-04:00</published><updated>2010-09-24T07:00:04.509-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-09-24T07:00:04.509-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Queue" /><category scheme="http://www.blogger.com/atom/ns#" term="Exchange" /><title>Diagnosing Mail Queuing Problems – Part I</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/xUULzWfR5nKteomuCtWOJiK4Yvc/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/xUULzWfR5nKteomuCtWOJiK4Yvc/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/xUULzWfR5nKteomuCtWOJiK4Yvc/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/xUULzWfR5nKteomuCtWOJiK4Yvc/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;span xmlns=""&gt;&lt;/span&gt;&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/__3Fv9I-dKhM/TJvtr6f3_-I/AAAAAAAAACc/ykUtF2fwBEg/s1600/sherlock.jpg" imageanchor="1" style="clear: left; cssfloat: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" px="true" src="http://4.bp.blogspot.com/__3Fv9I-dKhM/TJvtr6f3_-I/AAAAAAAAACc/ykUtF2fwBEg/s320/sherlock.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;span style="font-family: Times New Roman; font-size: 12pt;"&gt;With yesterday's posting covering the basics of the queue viewer commands (&lt;a href="http://smartit4smb.blogspot.com/2010/09/playing-traffic-cop-commands-for.html"&gt;Playing Traffic Cop – Commands for Working with the Exchange Mail Queues&lt;/a&gt;), we now have a new set of tools to allow us to fulfill our role as the "Sherlock Holmes of NDRs". With that said, most mail flow interruption scenarios that can usually be classified in one the following categories:&lt;/span&gt;&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;span style="font-family: Times New Roman; font-size: 12pt;"&gt;Cannot connect to destination machine to deliver mail&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-family: Times New Roman; font-size: 12pt;"&gt;Messages stuck in a delivery queue, but destination is working properly&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-family: Times New Roman; font-size: 12pt;"&gt;Messages rejected by destination&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-family: Times New Roman; font-size: 12pt;"&gt;Cannot route one or more recipients of a message &lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-family: Times New Roman; font-size: 12pt;"&gt;Messages stuck in the submission queue&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-family: Times New Roman; font-size: 12pt;"&gt;Messages show in the poison queue &lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;&lt;/span&gt;&lt;span style="font-family: Times New Roman; font-size: 12pt;"&gt;When faced with these situations, one needs to resolve the following two questions:&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;ol&gt;&lt;li&gt;&lt;span style="font-family: Times New Roman; font-size: 12pt;"&gt;What caused this situation?&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-family: Times New Roman; font-size: 12pt;"&gt;How can I fix it so that mail flow is restored again?&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;span style="font-family: Times New Roman; font-size: 12pt;"&gt;We will cover the first two common scenarios today and the remaining four in tomorrow's article. &lt;/span&gt;&lt;br /&gt;
&lt;h2&gt;Cannot connect to destination machine to deliver mail&lt;/h2&gt;&lt;span style="font-family: Times New Roman; font-size: 12pt;"&gt;This is far and away the most common problem. Some of the common causes may be:&lt;/span&gt;&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;span style="font-family: Times New Roman; font-size: 12pt;"&gt;Destination machine is down or there are network connectivity problems&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-family: Times New Roman; font-size: 12pt;"&gt;Destination is being overwhelmed with traffic&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-family: Times New Roman; font-size: 12pt;"&gt;No MX records can retrieved for the destination&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-family: Times New Roman; font-size: 12pt;"&gt;Destination rejects connections because of certain limitations&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;span style="font-family: Times New Roman; font-size: 12pt;"&gt;One may be alerted to a possible mail delivery problem by a number of reasons: Users complaining of slow delivery times, a MOM/SCOM alert saying that the total number of messages in the transport queues on some server has exceeded the established threshold, etc. Since the information in these initial warnings is usually rather vague (for example, the counter used by MOM/SCOM only provides an aggregate message count for all delivery queues), the first step in the discovery process is to identify which queue seems to accumulate messages without delivering them. &lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: Times New Roman; font-size: 12pt;"&gt;To get to this information run the command: &lt;/span&gt;&lt;span style="font-family: Times New Roman; font-size: 12pt;"&gt;&lt;strong&gt;get-queue –SortOrder:-MessageCount &lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Times New Roman; font-size: 12pt;"&gt;(Alternatively, one can launch the Queue Viewer from the Exchange Administrator Console and sort by Message Count)&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Times New Roman; font-size: 12pt;"&gt;&lt;br /&gt;
&amp;nbsp;&lt;/span&gt;&lt;span style="font-family: Times New Roman; font-size: 12pt;"&gt;&lt;strong&gt;Note:&lt;/strong&gt; all commands that do not pass a full queue identity (prefixed with the server name) assume that the administrator is logged on the transport server. To run these tasks remotely add the "-Server:&amp;lt;server name&amp;gt;" parameter.&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Times New Roman; font-size: 12pt;"&gt;&lt;br /&gt;
&amp;nbsp;&lt;/span&gt;&lt;span style="font-family: Times New Roman; font-size: 12pt;"&gt;This will return all the queues on the server ordered descending by message count so the largest queue will come first in the results (change –MessageCount to +MessageCount to order ascending by the same field).&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Times New Roman; font-size: 12pt;"&gt;&lt;br /&gt;
&amp;nbsp;&lt;/span&gt;&lt;span style="font-family: Times New Roman; font-size: 12pt;"&gt;The first queue returned will likely be the queue that creates the problem (let's assume it's a delivery queue, that is, its DeliveryType member is not Submission or Unreachable). To figure out if this is the case let's get all the data about the queue with the largest number of messages. The "-Results:&amp;lt;desired result count&amp;gt;" argument can be passed to the task to limit the number of queues returned.&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Times New Roman; font-size: 12pt;"&gt;&lt;strong&gt;get-queue –SortOrder:-MessageCount –Results:1 | fl&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Times New Roman; font-size: 12pt;"&gt;&lt;strong&gt;&lt;br /&gt;
&amp;nbsp;&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-family: Times New Roman; font-size: 12pt;"&gt;The Status and LastError queue fields will help diagnose the problem. Usually, if the queue cannot establish a connection with the destination, its Status will be Retry and the LastError will be an error message in the form of an SMTP response. Healthy, active queues should be delivering messages, so the message count should be dropping with time or at least fluctuating up and down. (In the event it is increasing rapidly, check to make sure that you do not have a runaway mail merge, spambot, or other mass-mailing process gone awry using the &lt;strong&gt;get-message&lt;/strong&gt; command as shown later in the article.) &lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: Times New Roman; font-size: 12pt;"&gt;Assuming one does not have a runaway mailer, make sure the queue status is not suspended. It is entirely possible that it may have been suspended by somebody else and left in this state accidentally. (If you work in an organization with more than one mail administrator, check to make sure that the queue is not intentionally in this state) A suspended queue will not even attempt to establish connections to attempt delivery. If the queue is suspended and shouldn't be, simply resume it by running the following command, which will automatically attempt to connect to the destination: &lt;/span&gt;&lt;span style="font-family: Times New Roman; font-size: 12pt;"&gt;&lt;strong&gt;resume-queue &amp;lt;QueueIdentity&amp;gt; &lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: Times New Roman; font-size: 12pt;"&gt;From the status and LastError fields, you may be able to determine whether the remote machine actively rejects connections (e.g. it has reached some maximum number of incoming connections) or a connection cannot be made because the remote IP address/port combination is not listening, or because the store driver cannot connect to a mailbox server. DNS lookup failures are also reflected in this field. &lt;/span&gt;&lt;span style="font-family: Times New Roman; font-size: 12pt;"&gt;What can be done to fix these problems? The LastError queue field should be descriptive enough to make it obvious that the problem lies with the server being diagnosed or the remote server or somewhere in between (MX records). The actions are different according to whether the destination belongs to the same org (AD site, routing group) or not (some remote domain on the internet) &lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: Times New Roman; font-size: 12pt;"&gt;If the destination is internal, besides the obvious checks that it is up and working it is also useful to check the routing information. If some send connectors are left enabled pointing to a smarthost that doesn't exist anymore or to an AD site which doesn't have any Hub servers, messages may be routed to a queue that acts like a dead-end. It is important that this scenario be detected early so that the messages don't stay in that queue forgotten until they expire. &lt;/span&gt;&lt;span style="font-family: Times New Roman; font-size: 12pt;"&gt;&lt;strong&gt;Note:&lt;/strong&gt; In most cases, the NextHopDomain property of a queue is the name of either another SMTP server or of a mailbox machine. In these situations the destination can be promptly identified and actions can be taken. But In the case of the delivery to another AD site, the next hop domain is the name of the AD site and the actual machine our server is trying to connect to will be dynamically chosen by DNS.&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Times New Roman; font-size: 12pt;"&gt;&amp;nbsp;The next step would be to bring the connectivity log and the protocol log or message tracking log in the picture and identify the IP of the bridgehead that responded with an error. &lt;/span&gt;&lt;span style="font-family: Times New Roman; font-size: 12pt;"&gt;In the case that the destination is rejecting connections because of certain limitations, a wealth of information is available in the protocol log, which offers the advantage of showing the history of our attempts to connect and deliver as opposed to the queue viewer which only exposes the current situation and the last error. This situation may also uncover other problems – if the destination machine that rejects messages is under your control, it may be useful to inspect the event log on destination which can give additional information about why the messages or connections were rejected – connection rate or message rate exceeded, etc. &lt;/span&gt;&lt;br /&gt;
&lt;h2&gt;Messages stuck in a delivery queue but destination seems OK&lt;/h2&gt;&lt;span style="font-family: Times New Roman; font-size: 12pt;"&gt;Sometimes after, trying to diagnose the state of a queue the admin realizes that the destination is ok, i.e. – it can be contacted via TCP/IP on port 25 (see &lt;a href="http://smartit4smb.blogspot.com/2010/09/whose-fault-is-it-anyway.html"&gt;Whose Fault is it Anyway&lt;/a&gt;), or if the queue is local delivery, the mailbox store is up and running. The queue status may be &lt;em&gt;Ready&lt;/em&gt; or even &lt;em&gt;Active&lt;/em&gt;, but the message count won't go down. In this situation we want to look more in depth at the messages. We could have a situation where the queue simply has a large backlog and the system is only slow. In this case you have to determine whether or not some messages are being delivered. &lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Times New Roman; font-size: 12pt;"&gt;The first thing to do is call: &lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Times New Roman; font-size: 12pt;"&gt;&lt;strong&gt;get-queue &amp;lt;QueueIdentity&amp;gt; &lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: Times New Roman; font-size: 12pt;"&gt;As in the previous situation described, first make sure first the queue status is not Suspended. Next, check if the queue status is Retry. After the "glitch retry" time (4 times at 15 second intervals) the queue will not attempt a connection for the next hour (local delivery queues however have a flat 5-minute retry time). The time of the next connection attempt is given by the NextRetryTime queue field. If the destination is known to have had a problem that was fixed in the meanwhile, run:&lt;/span&gt;&lt;span style="font-family: Times New Roman; font-size: 12pt;"&gt;&lt;strong&gt;retry-queue &amp;lt;QueueIdentity&amp;gt;&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Times New Roman; font-size: 12pt;"&gt;This will attempt to establish a connection immediately. &lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: Times New Roman; font-size: 12pt;"&gt;If the queue is Active and the message count fluctuates up and down then the queue is working as expected: messages are being delivered but they can also be rejected – in both cases they disappear from the queue. If the queue message count seems to be increasing constantly, it's time to take a look at the messages: &lt;/span&gt;&lt;span style="font-family: Times New Roman; font-size: 12pt;"&gt;&lt;strong&gt;get-message -Queue &amp;lt;QueueIdentity&amp;gt;&amp;nbsp;&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Times New Roman; font-size: 12pt;"&gt;This will return all messages from the queue identified by &amp;lt;&lt;em&gt;QueueIdentity&lt;/em&gt;&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
If there are too many messages this can be slow and spew too much information, so limiting the number of results may help. Here's how to get the first 10 results:&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Times New Roman; font-size: 12pt;"&gt;&lt;strong&gt;get-message –Queue &amp;lt;QueueIdentity&amp;gt; -Results:10&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: Times New Roman; font-size: 12pt;"&gt;To diagnose the problem further we must check the status of the messages. However we must keep in mind that the order in which the messages are returned by get-message is not related to the order in which the messages are delivered.&lt;/span&gt;&lt;span style="font-family: Times New Roman; font-size: 12pt;"&gt;If the status of some messages is Active it means the queue is doing its job delivering messages. To get the active messages run the following command a few times and see if any results are returned:&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Times New Roman; font-size: 12pt;"&gt;&lt;strong&gt;get-message –Filter:{Queue –eq '&amp;lt;QueueIdentity&amp;gt;' –and Status –eq 'Active'}&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Times New Roman; font-size: 12pt;"&gt;(Run this a few times since messages in deliver may quickly disappear, so you may as well get no messages back sometimes.)&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: Times New Roman; font-size: 12pt;"&gt;If many or all messages are &lt;em&gt;Suspended&lt;/em&gt;, as in the case of the queues, no delivery will be attempted. Messages may have been suspended by somebody else and forgotten in this state.&lt;/span&gt;&lt;span style="font-family: Times New Roman; font-size: 12pt;"&gt;If the status of many messages is &lt;em&gt;Retry&lt;/em&gt; (you can obtain them using a query filter like the one for Active messages) check their LastError. This should explain why they were put in &lt;em&gt;Retry&lt;/em&gt;. Retry messages are usually accompanied by a SMTP error. This error is typically enough to diagnose the error.&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: Times New Roman; font-size: 12pt;"&gt;Well, I have rambled on for long enough for one day; more to come tomorrow.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4377279713904753127-320629268689617215?l=smartit4smb.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/SmartItForSmb/~4/6PBE6WjxDW4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://smartit4smb.blogspot.com/feeds/320629268689617215/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://smartit4smb.blogspot.com/2010/09/diagnosing-mail-queuing-problems-part-i.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4377279713904753127/posts/default/320629268689617215?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4377279713904753127/posts/default/320629268689617215?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/SmartItForSmb/~3/6PBE6WjxDW4/diagnosing-mail-queuing-problems-part-i.html" title="Diagnosing Mail Queuing Problems – Part I" /><author><name>IT Guy</name><uri>http://www.blogger.com/profile/06077702289675708030</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="22" src="http://3.bp.blogspot.com/__3Fv9I-dKhM/THCBA7MpYkI/AAAAAAAAAAQ/i0ELDMJBiuQ/S220/glasses.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/__3Fv9I-dKhM/TJvtr6f3_-I/AAAAAAAAACc/ykUtF2fwBEg/s72-c/sherlock.jpg" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://smartit4smb.blogspot.com/2010/09/diagnosing-mail-queuing-problems-part-i.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0EERH04fSp7ImA9Wx5WEk4.&quot;"><id>tag:blogger.com,1999:blog-4377279713904753127.post-5885594621707909689</id><published>2010-09-23T07:00:00.001-04:00</published><updated>2010-09-23T07:00:05.335-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-09-23T07:00:05.335-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Queue" /><category scheme="http://www.blogger.com/atom/ns#" term="Exchange" /><title>Playing Traffic Cop – Commands for Working with the Exchange Mail Queues</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/KaHY94aJdFktOCUKegz0vsn_0Pg/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/KaHY94aJdFktOCUKegz0vsn_0Pg/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/KaHY94aJdFktOCUKegz0vsn_0Pg/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/KaHY94aJdFktOCUKegz0vsn_0Pg/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;span xmlns=""&gt;&lt;/span&gt;&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/__3Fv9I-dKhM/TJqm6cDUa6I/AAAAAAAAACU/ycaGe8WIG3k/s1600/images.jpg" imageanchor="1" style="clear: right; cssfloat: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" px="true" src="http://2.bp.blogspot.com/__3Fv9I-dKhM/TJqm6cDUa6I/AAAAAAAAACU/ycaGe8WIG3k/s320/images.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;span style="font-family: Times New Roman; font-size: 12pt;"&gt;So far this week, we have talked about how to react when Exchange has given up on a message and returned an NDR. Starting today and continuing the rest of the week, we will be discussing how to step in and be the traffic cop to help direct traffic around congestion, "road construction", and other obstacles before the dreaded NDR event happens. There are a number of tools available in the Exchange environment to help diagnose the problem and restore normal traffic flow. These tools include the queue viewer, protocol logging, connectivity logging, message tracking, etc. This article is going to focus on how to use the queue viewer commands to diagnose mail flow interruptions. &lt;/span&gt;&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;
&lt;span style="font-family: Times New Roman; font-size: 12pt;"&gt;This article is the first in a 3 part series on working directly with the Exchange Mail Queues. In this first part, we will tackle the basic commands. In the second and third parts, we will look at common message delivery scenarios and how these commands can be used to solve the most common mail delivery problems.&lt;/span&gt;&lt;br /&gt;
&lt;h2&gt;Basic Concepts&lt;/h2&gt;&lt;span style="font-family: Times New Roman; font-size: 12pt;"&gt;Here are a few notions that should be understood before diving head first into your Exchange server's console session.&lt;/span&gt;&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;span style="font-family: Times New Roman; font-size: 12pt;"&gt;The queue viewer is referred to here as a set of distinct commands. These tasks are also available through the Exchange management UI, but the UI will not be our primary focus as it typically does not provide the same level of control and/or filtering capabilities.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-family: Times New Roman; font-size: 12pt;"&gt;A routing solution is a subset of the recipients of a message which are all routed to a single destination (or next hop). These solutions are built during routing and the recipients are partitioned into solutions based on their target domain (the address part after the "@" sign), the routing configuration (connectors, weights, AD sites) and other restrictions.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-family: Times New Roman; font-size: 12pt;"&gt;Destinations (next hops) are basically of two kinds: Exchange mailbox servers and any SMTP servers. Consequently, delivery queues are of two kinds: "local" – to a mailbox server (note: "local" doesn't have to mean the same machine) and "remote" – to an SMTP server. A distinction between the two categories will be made, when relevant. If not specified, it should be assumed that local and remote delivery queues share a common behavior.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-family: Times New Roman; font-size: 12pt;"&gt;In the following examples, all strings containing names delimited by "&amp;lt;" and "&amp;gt;" must be replaced with actual values (e.g.: &amp;lt;QueueIdentity&amp;gt;, &amp;lt;server name&amp;gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-family: Times New Roman; font-size: 12pt;"&gt;This is not intended to be a primer on the exhaustive uses of these commands.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;h2&gt;Queue Manipulation Commands&lt;/h2&gt;&lt;span style="font-family: Times New Roman; font-size: 12pt;"&gt;The queue viewer is a simple set of powershell commands which can be used to manipulate queues and messages on a server.&amp;nbsp;The two main "status" commands one needs to master are the &lt;strong&gt;get-queue&lt;/strong&gt; and &lt;strong&gt;get-message&lt;/strong&gt; commands. The &lt;strong&gt;get-queue&lt;/strong&gt; command returns information about existing transport queues and the &lt;strong&gt;get-message&lt;/strong&gt; command provides info about the messages queued by the server. These objects have properties that can help us identify them, such as &lt;em&gt;Identity&lt;/em&gt; and &lt;em&gt;Subject&lt;/em&gt; for messages and &lt;em&gt;Identity&lt;/em&gt; and &lt;em&gt;NextHopDomain&lt;/em&gt; for queues. There are also other properties which can help diagnose the state of the object, such as &lt;em&gt;Status&lt;/em&gt;, &lt;em&gt;LastError&lt;/em&gt; and &lt;em&gt;RetryCount&lt;/em&gt;.&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Times New Roman; font-size: 12pt;"&gt;There are also other "action" commands that will assist in your task by actually performing work on the various queues. The &lt;strong&gt;resume-queue&lt;/strong&gt; command allows one to resume a suspended queue, while conversely &lt;strong&gt;suspend-queue&lt;/strong&gt; allows for the suspending of a problem queue. The &lt;strong&gt;retry-queue&lt;/strong&gt; command forces the queue to immediately attempt to deliver messages again rather than waiting for the next retry interval.&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Times New Roman; font-size: 12pt;"&gt;Lastly, there are "action" commands that will assist you by performing actions on individual messages within a queue rather than the entire queue. The &lt;strong&gt;suspend-message&lt;/strong&gt; command allows one to suspend processing of an individual message within a queue, while allowing processing to continue for all other messages. The &lt;strong&gt;resume-message&lt;/strong&gt; command allows one to resume the processing of a suspended message. The &lt;strong&gt;export-message&lt;/strong&gt; command allows for the saving of an individual message to a file external from the mail queue, which can prove useful in addressing issues where mail content may be triggering problems such as prohibited attachment types, excessive size, etc. Lastly, there is the &lt;strong&gt;remove-message&lt;/strong&gt; command which may be used to delete an individual message.&lt;/span&gt;&lt;br /&gt;
&lt;h2&gt;Common Command Examples&lt;/h2&gt;&lt;span style="font-family: Times New Roman; font-size: 12pt;"&gt;The table below illustrates some common uses of some of the various commands. Beginning tomorrow, we will put these together for more productive work.&lt;/span&gt;&lt;br /&gt;
&lt;div&gt;&lt;table border="0" style="border-collapse: collapse;"&gt;&lt;colgroup&gt;&lt;col style="width: 213px;"&gt;&lt;col style="width: 213px;"&gt;&lt;col style="width: 213px;"&gt;&lt;/colgroup&gt;&lt;tbody valign="top"&gt;
&lt;tr&gt;&lt;td style="border-bottom: 0.5pt solid; border-left: 0.5pt solid; border-right: 0.5pt solid; border-top: 0.5pt solid; padding-left: 7px; padding-right: 7px;"&gt;&lt;span style="font-family: Times New Roman; font-size: 12pt;"&gt;Command&lt;/span&gt;&lt;/td&gt;&lt;td style="border-bottom: 0.5pt solid; border-left: medium none; border-right: 0.5pt solid; border-top: 0.5pt solid; padding-left: 7px; padding-right: 7px;"&gt;&lt;span style="font-family: Times New Roman; font-size: 12pt;"&gt;Usage&lt;/span&gt;&lt;/td&gt;&lt;td style="border-bottom: 0.5pt solid; border-left: medium none; border-right: 0.5pt solid; border-top: 0.5pt solid; padding-left: 7px; padding-right: 7px;"&gt;&lt;span style="font-family: Times New Roman; font-size: 12pt;"&gt;Description&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="border-bottom: 0.5pt solid; border-left: 0.5pt solid; border-right: 0.5pt solid; border-top: medium none; padding-left: 7px; padding-right: 7px;"&gt;&lt;span style="font-family: Times New Roman; font-size: 12pt;"&gt;Get-Queue&lt;/span&gt;&lt;/td&gt;&lt;td style="border-bottom: 0.5pt solid; border-left: medium none; border-right: 0.5pt solid; border-top: medium none; padding-left: 7px; padding-right: 7px;"&gt;&lt;span style="font-family: Times New Roman; font-size: 12pt;"&gt;get-queue –SortOrder:-MessageCount &lt;/span&gt;&lt;/td&gt;&lt;td style="border-bottom: 0.5pt solid; border-left: medium none; border-right: 0.5pt solid; border-top: medium none; padding-left: 7px; padding-right: 7px;"&gt;&lt;span style="font-family: Times New Roman; font-size: 12pt;"&gt;Return all of the active queues on the server in reverse order of message counts starting with the largest queue&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="border-bottom: 0.5pt solid; border-left: 0.5pt solid; border-right: 0.5pt solid; border-top: medium none; padding-left: 7px; padding-right: 7px;"&gt;&lt;/td&gt;&lt;td style="border-bottom: 0.5pt solid; border-left: medium none; border-right: 0.5pt solid; border-top: medium none; padding-left: 7px; padding-right: 7px;"&gt;&lt;span style="font-family: Times New Roman; font-size: 12pt;"&gt;get-queue –SortOrder:-MessageCount –Results:1 | fl&lt;/span&gt;&lt;/td&gt;&lt;td style="border-bottom: 0.5pt solid; border-left: medium none; border-right: 0.5pt solid; border-top: medium none; padding-left: 7px; padding-right: 7px;"&gt;&lt;span style="font-family: Times New Roman; font-size: 12pt;"&gt;Get the full details of the longest queue&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="border-bottom: 0.5pt solid; border-left: 0.5pt solid; border-right: 0.5pt solid; border-top: medium none; padding-left: 7px; padding-right: 7px;"&gt;&lt;span style="font-family: Times New Roman; font-size: 12pt;"&gt;Get-message&lt;/span&gt;&lt;/td&gt;&lt;td style="border-bottom: 0.5pt solid; border-left: medium none; border-right: 0.5pt solid; border-top: medium none; padding-left: 7px; padding-right: 7px;"&gt;&lt;span style="font-family: Times New Roman; font-size: 12pt;"&gt;get-message -Queue &amp;lt;QueueIdentity&amp;gt;&amp;nbsp;&lt;/span&gt;&lt;/td&gt;&lt;td style="border-bottom: 0.5pt solid; border-left: medium none; border-right: 0.5pt solid; border-top: medium none; padding-left: 7px; padding-right: 7px;"&gt;&lt;span style="font-family: Times New Roman; font-size: 12pt;"&gt;Get general message details from a specific queue&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="border-bottom: 0.5pt solid; border-left: 0.5pt solid; border-right: 0.5pt solid; border-top: medium none; padding-left: 7px; padding-right: 7px;"&gt;&lt;/td&gt;&lt;td style="border-bottom: 0.5pt solid; border-left: medium none; border-right: 0.5pt solid; border-top: medium none; padding-left: 7px; padding-right: 7px;"&gt;&lt;span style="font-family: Times New Roman; font-size: 12pt;"&gt;get-message –Queue &amp;lt;QueueIdentity&amp;gt; -Results:10&lt;/span&gt;&lt;/td&gt;&lt;td style="border-bottom: 0.5pt solid; border-left: medium none; border-right: 0.5pt solid; border-top: medium none; padding-left: 7px; padding-right: 7px;"&gt;&lt;span style="font-family: Times New Roman; font-size: 12pt;"&gt;Only return the top 10 messages from the specified queue&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="border-bottom: 0.5pt solid; border-left: 0.5pt solid; border-right: 0.5pt solid; border-top: medium none; padding-left: 7px; padding-right: 7px;"&gt;&lt;/td&gt;&lt;td style="border-bottom: 0.5pt solid; border-left: medium none; border-right: 0.5pt solid; border-top: medium none; padding-left: 7px; padding-right: 7px;"&gt;&lt;span style="font-family: Times New Roman; font-size: 12pt;"&gt;get-message –Filter:{Queue –eq '&amp;lt;QueueIdentity&amp;gt;' –and Status –eq 'Suspended'}&lt;/span&gt;&lt;/td&gt;&lt;td style="border-bottom: 0.5pt solid; border-left: medium none; border-right: 0.5pt solid; border-top: medium none; padding-left: 7px; padding-right: 7px;"&gt;&lt;span style="font-family: Times New Roman; font-size: 12pt;"&gt;Returns message details for suspended messages in the specified queue&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="border-bottom: 0.5pt solid; border-left: 0.5pt solid; border-right: 0.5pt solid; border-top: medium none; padding-left: 7px; padding-right: 7px;"&gt;&lt;span style="font-family: Times New Roman; font-size: 12pt;"&gt;Retry-Queue&lt;/span&gt;&lt;/td&gt;&lt;td style="border-bottom: 0.5pt solid; border-left: medium none; border-right: 0.5pt solid; border-top: medium none; padding-left: 7px; padding-right: 7px;"&gt;&lt;span style="font-family: Times New Roman; font-size: 12pt;"&gt;retry-queue &amp;lt;QueueIdentity&amp;gt;&lt;/span&gt;&lt;/td&gt;&lt;td style="border-bottom: 0.5pt solid; border-left: medium none; border-right: 0.5pt solid; border-top: medium none; padding-left: 7px; padding-right: 7px;"&gt;&lt;span style="font-family: Times New Roman; font-size: 12pt;"&gt;Force an immediate delivery attempt for the specified queue&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="border-bottom: 0.5pt solid; border-left: 0.5pt solid; border-right: 0.5pt solid; border-top: medium none; padding-left: 7px; padding-right: 7px;"&gt;&lt;span style="font-family: Times New Roman; font-size: 12pt;"&gt;Suspend-Queue&lt;/span&gt;&lt;/td&gt;&lt;td style="border-bottom: 0.5pt solid; border-left: medium none; border-right: 0.5pt solid; border-top: medium none; padding-left: 7px; padding-right: 7px;"&gt;&lt;span style="font-family: Times New Roman; font-size: 12pt;"&gt;suspend-queue &amp;lt;QueueIdentity&amp;gt;&lt;/span&gt;&lt;/td&gt;&lt;td style="border-bottom: 0.5pt solid; border-left: medium none; border-right: 0.5pt solid; border-top: medium none; padding-left: 7px; padding-right: 7px;"&gt;&lt;span style="font-family: Times New Roman; font-size: 12pt;"&gt;Suspend processing of the specified queue&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="border-bottom: 0.5pt solid; border-left: 0.5pt solid; border-right: 0.5pt solid; border-top: medium none; padding-left: 7px; padding-right: 7px;"&gt;&lt;span style="font-family: Times New Roman; font-size: 12pt;"&gt;Resume-Queue&lt;/span&gt;&lt;/td&gt;&lt;td style="border-bottom: 0.5pt solid; border-left: medium none; border-right: 0.5pt solid; border-top: medium none; padding-left: 7px; padding-right: 7px;"&gt;&lt;span style="font-family: Times New Roman; font-size: 12pt;"&gt;resume-queue &amp;lt;QueueIdentity&amp;gt;&lt;/span&gt;&lt;/td&gt;&lt;td style="border-bottom: 0.5pt solid; border-left: medium none; border-right: 0.5pt solid; border-top: medium none; padding-left: 7px; padding-right: 7px;"&gt;&lt;span style="font-family: Times New Roman; font-size: 12pt;"&gt;Resume processing of the specified queue&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;span style="font-family: Times New Roman; font-size: 12pt;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4377279713904753127-5885594621707909689?l=smartit4smb.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/SmartItForSmb/~4/hoohEh5BWK0" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://smartit4smb.blogspot.com/feeds/5885594621707909689/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://smartit4smb.blogspot.com/2010/09/playing-traffic-cop-commands-for.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4377279713904753127/posts/default/5885594621707909689?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4377279713904753127/posts/default/5885594621707909689?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/SmartItForSmb/~3/hoohEh5BWK0/playing-traffic-cop-commands-for.html" title="Playing Traffic Cop – Commands for Working with the Exchange Mail Queues" /><author><name>IT Guy</name><uri>http://www.blogger.com/profile/06077702289675708030</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="22" src="http://3.bp.blogspot.com/__3Fv9I-dKhM/THCBA7MpYkI/AAAAAAAAAAQ/i0ELDMJBiuQ/S220/glasses.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/__3Fv9I-dKhM/TJqm6cDUa6I/AAAAAAAAACU/ycaGe8WIG3k/s72-c/images.jpg" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://smartit4smb.blogspot.com/2010/09/playing-traffic-cop-commands-for.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUUER3Y8fip7ImA9Wx5WEUg.&quot;"><id>tag:blogger.com,1999:blog-4377279713904753127.post-8218406533563323018</id><published>2010-09-22T07:00:00.001-04:00</published><updated>2010-09-22T07:00:06.876-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-09-22T07:00:06.876-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="TLS" /><category scheme="http://www.blogger.com/atom/ns#" term="Exchange" /><title>Deciphering TLS Issues within Exchange</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/b9cuCPAoMR4LUpqcQx5NoJZAB60/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/b9cuCPAoMR4LUpqcQx5NoJZAB60/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/b9cuCPAoMR4LUpqcQx5NoJZAB60/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/b9cuCPAoMR4LUpqcQx5NoJZAB60/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;span xmlns=""&gt;&lt;/span&gt;&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/__3Fv9I-dKhM/TJj23qn0cqI/AAAAAAAAACM/88NlL53tzFM/s1600/Crypto.bmp" imageanchor="1" style="clear: left; cssfloat: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" qx="true" src="http://1.bp.blogspot.com/__3Fv9I-dKhM/TJj23qn0cqI/AAAAAAAAACM/88NlL53tzFM/s320/Crypto.bmp" /&gt;&lt;/a&gt;&lt;/div&gt;What do you do when you suspect that there is an encryption problem preventing mail delivery? Identifying these types of issues is usually pretty easy. You add the domain to your TLS exempted send connector's scope and the mail delivers; remove it and it fails. Unfortunately, getting the details as to why it fails is many times far more difficult than it should be.&lt;br /&gt;
Circumstantial evidence is often your friend in these situations. Think about it, if you are able to send messages via TLS to one organization and not to another, the chances are that you are not the organization with the problem.&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;
&lt;h2&gt;Certificate Expired&lt;/h2&gt;An expired certificate on one side or the other is far and away the number one reason TLS suddenly stops working. Checking servers in your charge is relatively simple using the certificate manager MMC plug-in or the Get-Exchangecertificate powershell command. You should also see an Event ID 12016 at connector startup indicating the certificate has expired. (And a period of time where you were getting Events of ID 12018 telling you the certificate is about to expire) If you do end up renewing the certificates for your exchange transports, make sure to run the enable-exchangecertificate powershell command again to instruct exchange to begin using the new certificate as it will not do it automatically.&lt;br /&gt;
Finding and proving that a 3&lt;sup&gt;rd&lt;/sup&gt; party's servers have expired TLS certificates is a little trickier. If the 3&lt;sup&gt;rd&lt;/sup&gt; party domain lands in your "opportunistic TLS" connector, mail will still flow; it will simply be sent via normal SMTP without any encryption. If you look in the SMTP logs for messages to that domain, you will see an error similar to the following: &lt;br /&gt;
&lt;div&gt;&lt;table border="0" style="border-collapse: collapse;"&gt;&lt;colgroup&gt;&lt;col style="width: 638px;"&gt;&lt;/colgroup&gt;&lt;tbody valign="top"&gt;
&lt;tr&gt;&lt;td style="border-bottom: 0.5pt solid; border-left: 0.5pt solid; border-right: 0.5pt solid; border-top: 0.5pt solid; padding-left: 7px; padding-right: 7px;"&gt;&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;A secure connection to domain-secured domain 'example.com' on connector 'Default external mail' could not be established because the validation of the Transport Layer Security (TLS) certificate for Example.com failed with status 'Expired. Contact the administrator of ourclient.com to resolve the problem, or remove the domain from the domain-secured list.&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
If the 3&lt;sup&gt;rd&lt;/sup&gt; party domain lands in your "TLS required" connector, mail will not flow any longer and again you will see errors in the SMTP logs&lt;br /&gt;
Now if you are like most and the notion of digging through mounds and mounds of SMTP logs sends shivers up your spine, you can use &lt;a href="http://www.openssl.org/"&gt;OpenSSL&lt;/a&gt; to assist in the process (Windows binaries available &lt;a href="http://www.slproweb.com/products/Win32OpenSSL.html"&gt;here&lt;/a&gt;). Simply run &lt;strong&gt;openssl s_client -connect mail.example.com:25 -starttls smtp&lt;/strong&gt;&lt;br /&gt;
Any irregularities in the client's certificate will be reported in the results.&lt;br /&gt;
Unfortunately, using the Windows binaries your client will fail the verification portion of the tests as it cannot look into the local certificate store to pull your certificate. &lt;br /&gt;
&lt;h2&gt;Wrong Certificate in Use&lt;/h2&gt;With Exchange's use of self-signed certificates for internal communications, it is a simple matter for an organization to inadvertently use the wrong certificate for its public TLS encryption. Checking your own servers is simply a matter of using the Get-Exchangecertificate powershell command to verify that the proper certificate is selected for use on your public send and receive connectors. Pay special attention to the thumbprints as many organizations have failed to run the enable-exchangecertificate powershell command again after renewing their TLS certificates resulting in the legacy certificate still being used even though a newer (and valid) certificate is available.&lt;br /&gt;
For checking 3&lt;sup&gt;rd&lt;/sup&gt; party servers, I know of no better tool than the method using the OpenSSL tool described above.&lt;br /&gt;
&lt;h2&gt;Getting Mail Delivered&lt;/h2&gt;If it is your servers with the issues, taking the steps above should help you correct any certificate issues quickly. (at least as quickly as your CA can provide) You obviously can't change the message security policy for your partners, but you can lessen the attention on your domain by simply changing the routing rules within your organization so that all domains leave your "No TLS" send connector and come in a receive connector that does not respond to TLS. This will help for all organizations except those that actively require TLS.&lt;br /&gt;
For situations where it is the 3&lt;sup&gt;rd&lt;/sup&gt; party server with the problem, simply move that domain to connectors that don't require TLS, assuming you don't have a policy prohibiting it, and notify their administrators.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4377279713904753127-8218406533563323018?l=smartit4smb.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/SmartItForSmb/~4/sqJ_thVnb_4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://smartit4smb.blogspot.com/feeds/8218406533563323018/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://smartit4smb.blogspot.com/2010/09/deciphering-tls-issues-within-exchange.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4377279713904753127/posts/default/8218406533563323018?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4377279713904753127/posts/default/8218406533563323018?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/SmartItForSmb/~3/sqJ_thVnb_4/deciphering-tls-issues-within-exchange.html" title="Deciphering TLS Issues within Exchange" /><author><name>IT Guy</name><uri>http://www.blogger.com/profile/06077702289675708030</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="22" src="http://3.bp.blogspot.com/__3Fv9I-dKhM/THCBA7MpYkI/AAAAAAAAAAQ/i0ELDMJBiuQ/S220/glasses.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/__3Fv9I-dKhM/TJj23qn0cqI/AAAAAAAAACM/88NlL53tzFM/s72-c/Crypto.bmp" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://smartit4smb.blogspot.com/2010/09/deciphering-tls-issues-within-exchange.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DE8ERXc9eCp7ImA9Wx5WEEs.&quot;"><id>tag:blogger.com,1999:blog-4377279713904753127.post-5980125080909439378</id><published>2010-09-21T07:00:00.001-04:00</published><updated>2010-09-21T07:00:04.960-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-09-21T07:00:04.960-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="NDR" /><category scheme="http://www.blogger.com/atom/ns#" term="Exchange" /><title>Whose Fault is It Anyway?</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/IR_dx0fiwVExZeIWHafz6k8vqfQ/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/IR_dx0fiwVExZeIWHafz6k8vqfQ/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/IR_dx0fiwVExZeIWHafz6k8vqfQ/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/IR_dx0fiwVExZeIWHafz6k8vqfQ/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;span xmlns=""&gt;&lt;/span&gt;&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/__3Fv9I-dKhM/TJZkY-iOIMI/AAAAAAAAAB8/li8XyeVBe8A/s1600/blame.bmp" imageanchor="1" style="clear: right; cssfloat: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" qx="true" src="http://2.bp.blogspot.com/__3Fv9I-dKhM/TJZkY-iOIMI/AAAAAAAAAB8/li8XyeVBe8A/s320/blame.bmp" /&gt;&lt;/a&gt;&lt;/div&gt;Unfortunately, even with the NDR codes to help and detailed SMTP logging turned on, there are a number of situations where it is still not obvious if the problem lies within your mail system or the destination domain's mail servers. That's where it helps to be able to be the mail server itself.&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;
While to some extent that sounds crazy, it isn't actually that hard to pretend to be a mail server yourself because SMTP is a completely clear text protocol.&lt;br /&gt;
This should not be the first step in debugging an NDR. Other steps should be done first such as:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Looking at the NDR code to determine the likely cause&lt;/li&gt;
&lt;li&gt;Verifying your mail servers are not on any black-lists (See below for instructions if you are not sure)&lt;/li&gt;
&lt;li&gt;Reviewing the SMTP logs&lt;/li&gt;
&lt;li&gt;Sending a small, unencrypted mail message&lt;/li&gt;
&lt;/ul&gt;The basic process of simulating a SMTP session is laid out in &lt;a href="http://support.microsoft.com/kb/153119"&gt;MS KB153119&lt;/a&gt;, but it goes something like this:&lt;br /&gt;
&lt;h2&gt;Step 1: Lookup the mail server to use&lt;/h2&gt;At a command prompt, type &lt;strong&gt;NSLOOKUP&lt;/strong&gt;. When nslookup returns with its prompt, type &lt;strong&gt;SET TYPE=MX&lt;/strong&gt;. This will instruct NSLOOKUP to look for mail server records. At the prompt, type the domain name you wish to "send" the message to. This will be what appears after the "@" in the mail address (yahoo.com, gmail.com, etc) NSLOOKUP should return with a listing of all of the incoming mail servers for that domain and their preferences. In SMTP parlance, a lower preference number equates to a higher priority. i.e. messages should always be sent to the server with the lowest preference number that is available. In the example below, mail should be sent to the &lt;em&gt;gmail-smtp-in.google.com&lt;/em&gt; host first.&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/__3Fv9I-dKhM/TJZkkCMBbsI/AAAAAAAAACE/vDM_b9QuCHQ/s1600/nslookup.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="380" qx="true" src="http://2.bp.blogspot.com/__3Fv9I-dKhM/TJZkkCMBbsI/AAAAAAAAACE/vDM_b9QuCHQ/s640/nslookup.PNG" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;h2&gt;Step 2: Connect to the host on port 25&lt;/h2&gt;At a command prompt, type &lt;strong&gt;telnet &lt;em&gt;host&lt;/em&gt; 25&lt;/strong&gt;, where host is the hostname determined in Step 1. &lt;strong&gt;Note:&lt;/strong&gt; if using Windows 7 or Server 2008, there is not a telnet client installed by default, so you may need to substitute a different command such as &lt;a href="http://www.chiark.greenend.org.uk/~sgtatham/putty/"&gt;Putty&lt;/a&gt;.&lt;br /&gt;
&lt;h2&gt;Step 3: Say HELLO&lt;/h2&gt;Upon successfully connecting, type &lt;strong&gt;EHLO domain&lt;/strong&gt;, where domain is your domain name.&lt;br /&gt;
&lt;h2&gt;Step 4: Who is the mail message from&lt;/h2&gt;Upon accepting the domain name, one needs to explain who the message is from. This is done by typing the command &lt;strong&gt;MAIL FROM: address&lt;/strong&gt;, where address is the &lt;em&gt;from&lt;/em&gt; address. &lt;strong&gt;Note:&lt;/strong&gt; some mail servers want the address enclosed in brackets. These servers usually give a clear text response indicating as such.&lt;br /&gt;
&lt;h2&gt;Step 5: Who is the message going to&lt;/h2&gt;Upon accepting the from address, one needs to explain who the message is going to. This is done by typing the command &lt;strong&gt;RCPT TO: address&lt;/strong&gt;, where address is the &lt;em&gt;to&lt;/em&gt; address. &lt;strong&gt;Note:&lt;/strong&gt; some mail servers want the address enclosed in brackets. These servers usually give a clear text response indicating as such.&lt;br /&gt;
At this point if you haven't gotten any error responses from the remote server, the problem is likely within your own mail system. The only other explanation is there is something within the contents of the original messages that was blocking the message, which should have been flagged by sending the small, text only, test message. Ideally, you should have also put their mail domain in the connector properties of your TLS exempted send connector, so you can rule out mail encryption problems as well.&lt;br /&gt;
If you do get errors from the remote server (they should be very similar to those returned in the NDR messages), you don't have to just throw your arms up and say there is nothing you can do. Many organizations post a "Contact Us" form or phone number on their websites that can be used to explain the situation and help you get in contact with appropriate staff.&lt;br /&gt;
&lt;br /&gt;
&lt;span style="color: black; font-family: Arial; font-size: 10pt;"&gt;&lt;strong&gt;Note:&lt;/strong&gt; To see if your mail server is on any of the common blacklists, simply navigate to mxtoolbox.com and use their &lt;a href="http://www.mxtoolbox.com/blacklists.aspx"&gt;Blacklist&lt;/a&gt; tool. Just enter the public IP address of your mail server, click on the &lt;em&gt;Blacklist Check&lt;/em&gt; button, and in a few moments you will see whether that address is listed on any of roughly 100 public blacklists. If you find that your mail server address is blacklisted, don't panic. Simply browse to the main website of the blacklist your server is listed on and read for instructions on how to request to be removed. Many times, they will provide you with greater detail on why you were blacklisted in the first place, such as an open relay, unsolicited bulk email, etc. Simply correct that issue, request the delisting, and unfortunately wait. It often takes roughly 1 business day to get delisted.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4377279713904753127-5980125080909439378?l=smartit4smb.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/SmartItForSmb/~4/XlnVecuCibc" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://smartit4smb.blogspot.com/feeds/5980125080909439378/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://smartit4smb.blogspot.com/2010/09/whose-fault-is-it-anyway.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4377279713904753127/posts/default/5980125080909439378?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4377279713904753127/posts/default/5980125080909439378?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/SmartItForSmb/~3/XlnVecuCibc/whose-fault-is-it-anyway.html" title="Whose Fault is It Anyway?" /><author><name>IT Guy</name><uri>http://www.blogger.com/profile/06077702289675708030</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="22" src="http://3.bp.blogspot.com/__3Fv9I-dKhM/THCBA7MpYkI/AAAAAAAAAAQ/i0ELDMJBiuQ/S220/glasses.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/__3Fv9I-dKhM/TJZkY-iOIMI/AAAAAAAAAB8/li8XyeVBe8A/s72-c/blame.bmp" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://smartit4smb.blogspot.com/2010/09/whose-fault-is-it-anyway.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkMERnY4eyp7ImA9Wx5XGUU.&quot;"><id>tag:blogger.com,1999:blog-4377279713904753127.post-6326393722145201754</id><published>2010-09-20T07:00:00.003-04:00</published><updated>2010-09-20T07:00:07.833-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-09-20T07:00:07.833-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="NDR" /><category scheme="http://www.blogger.com/atom/ns#" term="Exchange" /><title>What to do When the Postman Doesn’t Knock</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/EpqzO5yH7ms-5NmQefltcaGRoDs/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/EpqzO5yH7ms-5NmQefltcaGRoDs/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/EpqzO5yH7ms-5NmQefltcaGRoDs/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/EpqzO5yH7ms-5NmQefltcaGRoDs/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;span xmlns=""&gt;&lt;/span&gt;&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/__3Fv9I-dKhM/TJZW3SGzMaI/AAAAAAAAABs/J5TyabZD74Q/s1600/delivery.bmp" imageanchor="1" style="clear: left; cssfloat: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="131" qx="true" src="http://1.bp.blogspot.com/__3Fv9I-dKhM/TJZW3SGzMaI/AAAAAAAAABs/J5TyabZD74Q/s200/delivery.bmp" width="200" /&gt;&lt;/a&gt;&lt;/div&gt;No matter how much we try, there will inevitably be messages that the system gives up on and are unable to be delivered. Luckily Microsoft Exchange, as our postman, does a pretty good job of giving us the clues as to why the message was not delivered.&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;
Exchange does this in the form of a Non-Deliverable Report or NDR similar to the one below that is sent to the originator of the message.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/__3Fv9I-dKhM/TJZXIupVivI/AAAAAAAAAB0/SXIiIuzZHBM/s1600/NDR.bmp" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="190" qx="true" src="http://4.bp.blogspot.com/__3Fv9I-dKhM/TJZXIupVivI/AAAAAAAAAB0/SXIiIuzZHBM/s400/NDR.bmp" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
All NDRs that originate within Exchange include a NDR code that is in X.X.X format, where X is in numeric format. The table below lists the Exchange 2007 NDR codes and their typical meaning.&lt;br /&gt;
&lt;br /&gt;
&lt;div&gt;&lt;table border="0" style="border-collapse: collapse;"&gt;&lt;colgroup&gt;&lt;col style="width: 82px;"&gt;&lt;col style="width: 507px;"&gt;&lt;/colgroup&gt;&lt;tbody valign="top"&gt;
&lt;tr&gt;&lt;td style="border-bottom: 0.75pt solid; border-left: 0.75pt solid; border-right: 0.75pt solid; border-top: 0.75pt solid; padding-bottom: 10px; padding-left: 5px; padding-right: 5px; padding-top: 10px;" valign="middle"&gt;&lt;span style="color: black; font-family: Verdana; font-size: 10pt;"&gt;&lt;strong&gt;NDR &lt;br /&gt;
Code&lt;/strong&gt;&lt;/span&gt;&lt;/td&gt;&lt;td style="border-bottom: 0.75pt solid; border-left: medium none; border-right: 0.75pt solid; border-top: 0.75pt solid; padding-bottom: 10px; padding-left: 10px; padding-right: 25px; padding-top: 10px;" valign="middle"&gt;&lt;span style="color: black; font-family: Verdana; font-size: 10pt;"&gt;&lt;strong&gt;Explanation of Enhanced Status Codes in Exchange 2007 NDRs&lt;/strong&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="border-bottom: 0.75pt solid; border-left: 0.75pt solid; border-right: 0.75pt solid; border-top: medium none; padding-bottom: 10px; padding-left: 10px; padding-right: 25px; padding-top: 10px;" valign="middle"&gt;&lt;span style="color: black; font-family: Verdana; font-size: 10pt;"&gt;4.2.2&lt;/span&gt;&lt;/td&gt;&lt;td style="border-bottom: 0.75pt solid; border-left: medium none; border-right: 0.75pt solid; border-top: medium none; padding-bottom: 10px; padding-left: 10px; padding-right: 25px; padding-top: 10px;" valign="middle"&gt;&lt;span style="color: black; font-family: Verdana; font-size: 10pt;"&gt;The recipient has exceeded their mailbox limit.&amp;nbsp; &lt;br /&gt;
It could also be that the delivery directory on the Virtual server has exceeded its limit. &lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="border-bottom: 0.75pt solid; border-left: 0.75pt solid; border-right: 0.75pt solid; border-top: medium none; padding-bottom: 10px; padding-left: 10px; padding-right: 25px; padding-top: 10px;" valign="middle"&gt;&lt;span style="color: black; font-family: Verdana; font-size: 10pt;"&gt;4.3.1&lt;/span&gt;&lt;/td&gt;&lt;td style="border-bottom: 0.75pt solid; border-left: medium none; border-right: 0.75pt solid; border-top: medium none; padding-bottom: 10px; padding-left: 10px; padding-right: 25px; padding-top: 10px;" valign="middle"&gt;&lt;span style="color: black; font-family: Verdana; font-size: 10pt;"&gt;Insufficient system resources.&amp;nbsp; This normally means not enough disk space on the delivery server.&amp;nbsp; &lt;br /&gt;
Microsoft says this Exchange NDR may be reported as out-of-memory error.&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="border-bottom: 0.75pt solid; border-left: 0.75pt solid; border-right: 0.75pt solid; border-top: medium none; padding-bottom: 10px; padding-left: 10px; padding-right: 25px; padding-top: 10px;" valign="middle"&gt;&lt;span style="color: black; font-family: Verdana; font-size: 10pt;"&gt;4.3.2&lt;/span&gt;&lt;/td&gt;&lt;td style="border-bottom: 0.75pt solid; border-left: medium none; border-right: 0.75pt solid; border-top: medium none; padding-bottom: 10px; padding-left: 10px; padding-right: 25px; padding-top: 10px;" valign="middle"&gt;&lt;span style="color: black; font-family: Verdana; font-size: 10pt;"&gt;A classic temporary problem.&amp;nbsp; Most likely, the Administrator has frozen the queue.&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="border-bottom: 0.75pt solid; border-left: 0.75pt solid; border-right: 0.75pt solid; border-top: medium none; padding-bottom: 10px; padding-left: 10px; padding-right: 25px; padding-top: 10px;" valign="middle"&gt;&lt;span style="color: black; font-family: Verdana; font-size: 10pt;"&gt;4.4.1&lt;/span&gt;&lt;/td&gt;&lt;td style="border-bottom: 0.75pt solid; border-left: medium none; border-right: 0.75pt solid; border-top: medium none; padding-bottom: 10px; padding-left: 10px; padding-right: 25px; padding-top: 10px;" valign="middle"&gt;&lt;span style="color: black; font-family: Verdana; font-size: 10pt;"&gt;Intermittent network connection.&amp;nbsp; The server has not yet responded.&amp;nbsp; Classic time-out problem.&amp;nbsp; If it persists, you will also get a 5.4.x status code error.&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="border-bottom: 0.75pt solid; border-left: 0.75pt solid; border-right: 0.75pt solid; border-top: medium none; padding-bottom: 10px; padding-left: 10px; padding-right: 25px; padding-top: 10px;" valign="middle"&gt;&lt;span style="color: black; font-family: Verdana; font-size: 10pt;"&gt;4.4.2&lt;/span&gt;&lt;/td&gt;&lt;td style="border-bottom: 0.75pt solid; border-left: medium none; border-right: 0.75pt solid; border-top: medium none; padding-bottom: 10px; padding-left: 10px; padding-right: 25px; padding-top: 10px;" valign="middle"&gt;&lt;span style="color: black; font-family: Verdana; font-size: 10pt;"&gt;The server started to deliver the message but then the connection was dropped.&amp;nbsp; The sending server is configured to retry automatically.&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="border-bottom: 0.75pt solid; border-left: 0.75pt solid; border-right: 0.75pt solid; border-top: medium none; padding-bottom: 10px; padding-left: 10px; padding-right: 25px; padding-top: 10px;" valign="middle"&gt;&lt;span style="color: black; font-family: Verdana; font-size: 10pt;"&gt;4.4.6&lt;/span&gt;&lt;/td&gt;&lt;td style="border-bottom: 0.75pt solid; border-left: medium none; border-right: 0.75pt solid; border-top: medium none; padding-bottom: 10px; padding-left: 10px; padding-right: 25px; padding-top: 10px;" valign="middle"&gt;&lt;span style="color: black; font-family: Verdana; font-size: 10pt;"&gt;Too many hops.&amp;nbsp; Most likely, the message is looping.&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="border-bottom: 0.75pt solid; border-left: 0.75pt solid; border-right: 0.75pt solid; border-top: medium none; padding-bottom: 10px; padding-left: 10px; padding-right: 25px; padding-top: 10px;" valign="middle"&gt;&lt;span style="color: black; font-family: Verdana; font-size: 10pt;"&gt;4.4.7&lt;/span&gt;&lt;/td&gt;&lt;td style="border-bottom: 0.75pt solid; border-left: medium none; border-right: 0.75pt solid; border-top: medium none; padding-bottom: 10px; padding-left: 10px; padding-right: 25px; padding-top: 10px;" valign="middle"&gt;&lt;span style="color: black; font-family: Verdana; font-size: 10pt;"&gt;Problem with a protocol timeout, for example a message header limit.&amp;nbsp; Check receiving server connectors.&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="border-bottom: 0.75pt solid; border-left: 0.75pt solid; border-right: 0.75pt solid; border-top: medium none; padding-bottom: 10px; padding-left: 10px; padding-right: 25px; padding-top: 10px;" valign="middle"&gt;&lt;span style="color: black; font-family: Verdana; font-size: 10pt;"&gt;4.4.9&lt;/span&gt;&lt;/td&gt;&lt;td style="border-bottom: 0.75pt solid; border-left: medium none; border-right: 0.75pt solid; border-top: medium none; padding-bottom: 10px; padding-left: 10px; padding-right: 25px; padding-top: 10px;" valign="middle"&gt;&lt;span style="color: black; font-family: Verdana; font-size: 10pt;"&gt;A DNS problem.&amp;nbsp; Check your smart host setting on the SMTP connector.&amp;nbsp; For example, check correct SMTP format. Also, use square brackets in the IP address [197.89.1.4]&amp;nbsp; &lt;/span&gt;&lt;br /&gt;
&lt;span style="color: black; font-family: Verdana; font-size: 10pt;"&gt;You can get this same NDR error if you have been deleting routing groups.&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="border-bottom: 0.75pt solid; border-left: 0.75pt solid; border-right: 0.75pt solid; border-top: medium none; padding-bottom: 10px; padding-left: 10px; padding-right: 25px; padding-top: 10px;" valign="middle"&gt;&lt;span style="color: black; font-family: Verdana; font-size: 10pt;"&gt;4.6.5&lt;/span&gt;&lt;/td&gt;&lt;td style="border-bottom: 0.75pt solid; border-left: medium none; border-right: 0.75pt solid; border-top: medium none; padding-bottom: 10px; padding-left: 10px; padding-right: 25px; padding-top: 10px;" valign="middle"&gt;&lt;span style="color: black; font-family: Verdana; font-size: 10pt;"&gt;Multi-language situation.&amp;nbsp; Your server does not have the correct language code page installed.&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="border-bottom: 0.75pt solid; border-left: 0.75pt solid; border-right: 0.75pt solid; border-top: medium none; padding-bottom: 10px; padding-left: 10px; padding-right: 25px; padding-top: 10px;" valign="middle"&gt;&lt;span style="color: black; font-family: Verdana; font-size: 10pt;"&gt;5.0.0&lt;/span&gt;&lt;/td&gt;&lt;td style="border-bottom: 0.75pt solid; border-left: medium none; border-right: 0.75pt solid; border-top: medium none; padding-bottom: 10px; padding-left: 10px; padding-right: 25px; padding-top: 10px;" valign="middle"&gt;&lt;span style="color: black; font-family: Verdana; font-size: 10pt;"&gt;SMTP 500 reply code means an unrecognized address.&amp;nbsp; You get this NDR when you make a typing mistake when you manually try to send email via telnet. &lt;br /&gt;
The most likely cause is a routing error.&amp;nbsp; One solution maybe to add an * in the address space.&lt;br /&gt;
A separate cause for NDR 5.0.0 is a DNS problem.&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="border-bottom: 0.75pt solid; border-left: 0.75pt solid; border-right: 0.75pt solid; border-top: medium none; padding-bottom: 10px; padding-left: 10px; padding-right: 25px; padding-top: 10px;" valign="middle"&gt;&lt;span style="color: black; font-family: Verdana; font-size: 10pt;"&gt;5.1.0&lt;/span&gt;&lt;/td&gt;&lt;td style="border-bottom: 0.75pt solid; border-left: medium none; border-right: 0.75pt solid; border-top: medium none; padding-bottom: 10px; padding-left: 10px; padding-right: 25px; padding-top: 10px;" valign="middle"&gt;&lt;span style="color: black; font-family: Verdana; font-size: 10pt;"&gt;Sender denied.&amp;nbsp; Often seen with contacts. Verify the recipient address.&lt;br /&gt;
Mismatched Network Card duplex setting.&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="border-bottom: 0.75pt solid; border-left: 0.75pt solid; border-right: 0.75pt solid; border-top: medium none; padding-bottom: 10px; padding-left: 10px; padding-right: 25px; padding-top: 10px;" valign="middle"&gt;&lt;span style="color: black; font-family: Verdana; font-size: 10pt;"&gt;5.1.1&lt;/span&gt;&lt;/td&gt;&lt;td style="border-bottom: 0.75pt solid; border-left: medium none; border-right: 0.75pt solid; border-top: medium none; padding-bottom: 10px; padding-left: 10px; padding-right: 25px; padding-top: 10px;" valign="middle"&gt;&lt;span style="color: black; font-family: Verdana; font-size: 10pt;"&gt;Bad destination mailbox address.&amp;nbsp; 5.1.1 is the most common Exchange 2007 NDR; there is a problem with the recipient address.&amp;nbsp; &lt;br /&gt;
Maybe the recipient does not exist.&amp;nbsp; &lt;br /&gt;
Possibly the user was moved to another server in Active Directory.&amp;nbsp; &lt;br /&gt;
Check mailbox delegation. &lt;br /&gt;
Maybe an Outlook client replied to a message while offline.&lt;br /&gt;
Check connector configuration.&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="border-bottom: 0.75pt solid; border-left: 0.75pt solid; border-right: 0.75pt solid; border-top: medium none; padding-bottom: 10px; padding-left: 10px; padding-right: 25px; padding-top: 10px;" valign="middle"&gt;&lt;span style="color: black; font-family: Verdana; font-size: 10pt;"&gt;5.1.2&lt;/span&gt;&lt;/td&gt;&lt;td style="border-bottom: 0.75pt solid; border-left: medium none; border-right: 0.75pt solid; border-top: medium none; padding-bottom: 10px; padding-left: 10px; padding-right: 25px; padding-top: 10px;" valign="middle"&gt;&lt;span style="color: black; font-family: Verdana; font-size: 10pt;"&gt;SMTP; 550 Host unknown.&amp;nbsp; An error is triggered when the host name can't be found.&amp;nbsp; For example, when trying to send an email to user@nonexistantdomain.com. &lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="border-bottom: 0.75pt solid; border-left: 0.75pt solid; border-right: 0.75pt solid; border-top: medium none; padding-bottom: 10px; padding-left: 10px; padding-right: 25px; padding-top: 10px;" valign="middle"&gt;&lt;span style="color: black; font-family: Verdana; font-size: 10pt;"&gt;5.1.3&lt;/span&gt;&lt;/td&gt;&lt;td style="border-bottom: 0.75pt solid; border-left: medium none; border-right: 0.75pt solid; border-top: medium none; padding-bottom: 10px; padding-left: 10px; padding-right: 25px; padding-top: 10px;" valign="middle"&gt;&lt;span style="color: black; font-family: Verdana; font-size: 10pt;"&gt;Invalid recipient address.&amp;nbsp; Another problem often seen with contacts or cached address entries.&amp;nbsp; Address field maybe empty.&amp;nbsp; Check the address information.&amp;nbsp; Or there could be a syntax error.&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="border-bottom: 0.75pt solid; border-left: 0.75pt solid; border-right: 0.75pt solid; border-top: medium none; padding-bottom: 10px; padding-left: 10px; padding-right: 25px; padding-top: 10px;" valign="middle"&gt;&lt;span style="color: black; font-family: Verdana; font-size: 10pt;"&gt;5.1.4&lt;/span&gt;&lt;/td&gt;&lt;td style="border-bottom: 0.75pt solid; border-left: medium none; border-right: 0.75pt solid; border-top: medium none; padding-bottom: 10px; padding-left: 10px; padding-right: 25px; padding-top: 10px;" valign="middle"&gt;&lt;span style="color: black; font-family: Verdana; font-size: 10pt;"&gt;Destination mailbox address ambiguous.&amp;nbsp; Two objects have the same address, which confuses the Exchange 2007 Categorizer (Not to mention the mail administrator).&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="border-bottom: 0.75pt solid; border-left: 0.75pt solid; border-right: 0.75pt solid; border-top: medium none; padding-bottom: 10px; padding-left: 10px; padding-right: 25px; padding-top: 10px;" valign="middle"&gt;&lt;span style="color: black; font-family: Verdana; font-size: 10pt;"&gt;5.1.5&lt;/span&gt;&lt;/td&gt;&lt;td style="border-bottom: 0.75pt solid; border-left: medium none; border-right: 0.75pt solid; border-top: medium none; padding-bottom: 10px; padding-left: 10px; padding-right: 25px; padding-top: 10px;" valign="middle"&gt;&lt;span style="color: black; font-family: Verdana; font-size: 10pt;"&gt;Destination mailbox address invalid.&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="border-bottom: 0.75pt solid; border-left: 0.75pt solid; border-right: 0.75pt solid; border-top: medium none; padding-bottom: 10px; padding-left: 10px; padding-right: 25px; padding-top: 10px;" valign="middle"&gt;&lt;span style="color: black; font-family: Verdana; font-size: 10pt;"&gt;5.1.6&lt;/span&gt;&lt;/td&gt;&lt;td style="border-bottom: 0.75pt solid; border-left: medium none; border-right: 0.75pt solid; border-top: medium none; padding-bottom: 10px; padding-left: 10px; padding-right: 25px; padding-top: 10px;" valign="middle"&gt;&lt;span style="color: black; font-family: Verdana; font-size: 10pt;"&gt;Problem with homeMDB or msExchHomeServerName - check how many users are affected.&amp;nbsp; Sometimes running RUS (Recipient Update Service) cures this problem.&amp;nbsp; Mailbox may have moved.&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="border-bottom: 0.75pt solid; border-left: 0.75pt solid; border-right: 0.75pt solid; border-top: medium none; padding-bottom: 10px; padding-left: 10px; padding-right: 25px; padding-top: 10px;" valign="middle"&gt;&lt;span style="color: black; font-family: Verdana; font-size: 10pt;"&gt;5.1.7&lt;/span&gt;&lt;/td&gt;&lt;td style="border-bottom: 0.75pt solid; border-left: medium none; border-right: 0.75pt solid; border-top: medium none; padding-bottom: 10px; padding-left: 10px; padding-right: 25px; padding-top: 10px;" valign="middle"&gt;&lt;span style="color: black; font-family: Verdana; font-size: 10pt;"&gt;Invalid address.&amp;nbsp; Problem with senders mail attribute, check properties sheet in AD Users and Computers.&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="border-bottom: 0.75pt solid; border-left: 0.75pt solid; border-right: 0.75pt solid; border-top: medium none; padding-bottom: 10px; padding-left: 10px; padding-right: 25px; padding-top: 10px;" valign="middle"&gt;&lt;span style="color: black; font-family: Verdana; font-size: 10pt;"&gt;5.1.8&lt;/span&gt;&lt;/td&gt;&lt;td style="border-bottom: 0.75pt solid; border-left: medium none; border-right: 0.75pt solid; border-top: medium none; padding-bottom: 10px; padding-left: 10px; padding-right: 25px; padding-top: 10px;" valign="middle"&gt;&lt;span style="color: black; font-family: Verdana; font-size: 10pt;"&gt;Something wrong with sender's address&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="border-bottom: 0.75pt solid; border-left: 0.75pt solid; border-right: 0.75pt solid; border-top: medium none; padding-bottom: 10px; padding-left: 10px; padding-right: 25px; padding-top: 10px;" valign="middle"&gt;&lt;span style="color: black; font-family: Verdana; font-size: 10pt;"&gt;5.2.1&lt;/span&gt;&lt;/td&gt;&lt;td style="border-bottom: 0.75pt solid; border-left: medium none; border-right: 0.75pt solid; border-top: medium none; padding-bottom: 10px; padding-left: 10px; padding-right: 25px; padding-top: 10px;" valign="middle"&gt;&lt;span style="color: black; font-family: Verdana; font-size: 10pt;"&gt;Mailbox cannot be accessed.&amp;nbsp; Perhaps the message is too large.&amp;nbsp; Alternatively, the mailbox has been disabled, or is offline. Check the recipient's mailbox. &lt;br /&gt;
Else it could be a permissions problem, particularly on a Public Folder.&amp;nbsp; If so, try this PowerShell Command:&lt;br /&gt;
get-PublicFolderClientPermission "\ProblemFolder" &lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="border-bottom: 0.75pt solid; border-left: 0.75pt solid; border-right: 0.75pt solid; border-top: medium none; padding-bottom: 10px; padding-left: 10px; padding-right: 25px; padding-top: 10px;" valign="middle"&gt;&lt;span style="color: black; font-family: Verdana; font-size: 10pt;"&gt;5.2.2&lt;/span&gt;&lt;/td&gt;&lt;td style="border-bottom: 0.75pt solid; border-left: medium none; border-right: 0.75pt solid; border-top: medium none; padding-bottom: 10px; padding-left: 10px; padding-right: 25px; padding-top: 10px;" valign="middle"&gt;&lt;span style="color: black; font-family: Verdana; font-size: 10pt;"&gt;Sadly, the recipient has exceeded their mailbox storage quota.&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="border-bottom: 0.75pt solid; border-left: 0.75pt solid; border-right: 0.75pt solid; border-top: medium none; padding-bottom: 10px; padding-left: 10px; padding-right: 25px; padding-top: 10px;" valign="middle"&gt;&lt;span style="color: black; font-family: Verdana; font-size: 10pt;"&gt;5.2.3&lt;/span&gt;&lt;/td&gt;&lt;td style="border-bottom: 0.75pt solid; border-left: medium none; border-right: 0.75pt solid; border-top: medium none; padding-bottom: 10px; padding-left: 10px; padding-right: 25px; padding-top: 10px;" valign="middle"&gt;&lt;span style="color: black; font-family: Verdana; font-size: 10pt;"&gt;Recipient cannot receive messages this big.&amp;nbsp; The server or connector limit exceeded.&amp;nbsp; Try resending the message without the attachment.&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="border-bottom: 0.75pt solid; border-left: 0.75pt solid; border-right: 0.75pt solid; border-top: medium none; padding-bottom: 10px; padding-left: 10px; padding-right: 25px; padding-top: 10px;" valign="middle"&gt;&lt;span style="color: black; font-family: Verdana; font-size: 10pt;"&gt;5.2.4&lt;/span&gt;&lt;/td&gt;&lt;td style="border-bottom: 0.75pt solid; border-left: medium none; border-right: 0.75pt solid; border-top: medium none; padding-bottom: 10px; padding-left: 10px; padding-right: 25px; padding-top: 10px;" valign="middle"&gt;&lt;span style="color: black; font-family: Verdana; font-size: 10pt;"&gt;Most likely, a distribution list or group is trying to send an email.&amp;nbsp; Check where the expansion server is situated.&amp;nbsp; The application event log may have an Event ID 6025 or 6026, which has more detailed information.&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="border-bottom: 0.75pt solid; border-left: 0.75pt solid; border-right: 0.75pt solid; border-top: medium none; padding-bottom: 10px; padding-left: 10px; padding-right: 25px; padding-top: 10px;" valign="middle"&gt;&lt;span style="color: black; font-family: Verdana; font-size: 10pt;"&gt;5.3.0&lt;/span&gt;&lt;/td&gt;&lt;td style="border-bottom: 0.75pt solid; border-left: medium none; border-right: 0.75pt solid; border-top: medium none; padding-bottom: 10px; padding-left: 10px; padding-right: 25px; padding-top: 10px;" valign="middle"&gt;&lt;span style="color: black; font-family: Verdana; font-size: 10pt;"&gt;Problem with MTA, maybe someone has been editing the registry to disable the MTA / Store driver.&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="border-bottom: 0.75pt solid; border-left: 0.75pt solid; border-right: 0.75pt solid; border-top: medium none; padding-bottom: 10px; padding-left: 10px; padding-right: 25px; padding-top: 10px;" valign="middle"&gt;&lt;span style="color: black; font-family: Verdana; font-size: 10pt;"&gt;5.3.1&lt;/span&gt;&lt;/td&gt;&lt;td style="border-bottom: 0.75pt solid; border-left: medium none; border-right: 0.75pt solid; border-top: medium none; padding-bottom: 10px; padding-left: 10px; padding-right: 25px; padding-top: 10px;" valign="middle"&gt;&lt;span style="color: black; font-family: Verdana; font-size: 10pt;"&gt;Mail system full.&amp;nbsp; Disk full problem on the mailbox server?&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="border-bottom: 0.75pt solid; border-left: 0.75pt solid; border-right: 0.75pt solid; border-top: medium none; padding-bottom: 10px; padding-left: 10px; padding-right: 25px; padding-top: 10px;" valign="middle"&gt;&lt;span style="color: black; font-family: Verdana; font-size: 10pt;"&gt;5.3.2&lt;/span&gt;&lt;/td&gt;&lt;td style="border-bottom: 0.75pt solid; border-left: medium none; border-right: 0.75pt solid; border-top: medium none; padding-bottom: 10px; padding-left: 10px; padding-right: 25px; padding-top: 10px;" valign="middle"&gt;&lt;span style="color: black; font-family: Verdana; font-size: 10pt;"&gt;System not accepting network messages.&amp;nbsp; Look outside Exchange for a connectivity problem.&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="border-bottom: 0.75pt solid; border-left: 0.75pt solid; border-right: 0.75pt solid; border-top: medium none; padding-bottom: 10px; padding-left: 10px; padding-right: 25px; padding-top: 10px;" valign="middle"&gt;&lt;span style="color: black; font-family: Verdana; font-size: 10pt;"&gt;5.3.3&lt;/span&gt;&lt;/td&gt;&lt;td style="border-bottom: 0.75pt solid; border-left: medium none; border-right: 0.75pt solid; border-top: medium none; padding-bottom: 10px; padding-left: 10px; padding-right: 25px; padding-top: 10px;" valign="middle"&gt;&lt;span style="color: black; font-family: Verdana; font-size: 10pt;"&gt;Remote server has insufficient disk space to hold email.&amp;nbsp; Check SMTP log.&amp;nbsp; This error often happens when the sending server is using an ESMTP BDAT command. &lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="border-bottom: 0.75pt solid; border-left: 0.75pt solid; border-right: 0.75pt solid; border-top: medium none; padding-bottom: 10px; padding-left: 10px; padding-right: 25px; padding-top: 10px;" valign="middle"&gt;&lt;span style="color: black; font-family: Verdana; font-size: 10pt;"&gt;5.3.4&lt;/span&gt;&lt;/td&gt;&lt;td style="border-bottom: 0.75pt solid; border-left: medium none; border-right: 0.75pt solid; border-top: medium none; padding-bottom: 10px; padding-left: 10px; padding-right: 25px; padding-top: 10px;" valign="middle"&gt;&lt;span style="color: black; font-family: Verdana; font-size: 10pt;"&gt;Message too big.&amp;nbsp; Check the limits on both the sender and receiver side.&amp;nbsp; There maybe a policy in operation. &lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="border-bottom: 0.75pt solid; border-left: 0.75pt solid; border-right: 0.75pt solid; border-top: medium none; padding-bottom: 10px; padding-left: 10px; padding-right: 25px; padding-top: 10px;" valign="middle"&gt;&lt;span style="color: black; font-family: Verdana; font-size: 10pt;"&gt;5.3.5&lt;/span&gt;&lt;/td&gt;&lt;td style="border-bottom: 0.75pt solid; border-left: medium none; border-right: 0.75pt solid; border-top: medium none; padding-bottom: 10px; padding-left: 10px; padding-right: 25px; padding-top: 10px;" valign="middle"&gt;&lt;span style="color: black; font-family: Verdana; font-size: 10pt;"&gt;System incorrectly configured.&amp;nbsp; Multiple Virtual Servers are using the same IP address and port. See Microsoft TechNet article: 321721 Sharing SMTP.&amp;nbsp; Email probably looping.&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="border-bottom: 0.75pt solid; border-left: 0.75pt solid; border-right: 0.75pt solid; border-top: medium none; padding-bottom: 10px; padding-left: 10px; padding-right: 25px; padding-top: 10px;" valign="middle"&gt;&lt;span style="color: black; font-family: Verdana; font-size: 10pt;"&gt;5.4.0&lt;/span&gt;&lt;/td&gt;&lt;td style="border-bottom: 0.75pt solid; border-left: medium none; border-right: 0.75pt solid; border-top: medium none; padding-bottom: 10px; padding-left: 10px; padding-right: 25px; padding-top: 10px;" valign="middle"&gt;&lt;span style="color: black; font-family: Verdana; font-size: 10pt;"&gt;DNS Problem.&amp;nbsp; Check the Smart host, or check your DNS.&amp;nbsp;It means that there is no DNS server that can resolve this email address.&amp;nbsp; Could be Virtual Server SMTP address.&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="border-bottom: 0.75pt solid; border-left: 0.75pt solid; border-right: 0.75pt solid; border-top: medium none; padding-bottom: 10px; padding-left: 10px; padding-right: 25px; padding-top: 10px;" valign="middle"&gt;&lt;span style="color: black; font-family: Verdana; font-size: 10pt;"&gt;5.4.1&lt;/span&gt;&lt;/td&gt;&lt;td style="border-bottom: 0.75pt solid; border-left: medium none; border-right: 0.75pt solid; border-top: medium none; padding-bottom: 10px; padding-left: 10px; padding-right: 25px; padding-top: 10px;" valign="middle"&gt;&lt;span style="color: black; font-family: Verdana; font-size: 10pt;"&gt;No answer from host.&amp;nbsp; Not Exchange's fault, check connections.&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="border-bottom: 0.75pt solid; border-left: 0.75pt solid; border-right: 0.75pt solid; border-top: medium none; padding-bottom: 10px; padding-left: 10px; padding-right: 25px; padding-top: 10px;" valign="middle"&gt;&lt;span style="color: black; font-family: Verdana; font-size: 10pt;"&gt;5.4.2&lt;/span&gt;&lt;/td&gt;&lt;td style="border-bottom: 0.75pt solid; border-left: medium none; border-right: 0.75pt solid; border-top: medium none; padding-bottom: 10px; padding-left: 10px; padding-right: 25px; padding-top: 10px;" valign="middle"&gt;&lt;span style="color: black; font-family: Verdana; font-size: 10pt;"&gt;Bad connection.&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="border-bottom: 0.75pt solid; border-left: 0.75pt solid; border-right: 0.75pt solid; border-top: medium none; padding-bottom: 10px; padding-left: 10px; padding-right: 25px; padding-top: 10px;" valign="middle"&gt;&lt;span style="color: black; font-family: Verdana; font-size: 10pt;"&gt;5.4.3&lt;/span&gt;&lt;/td&gt;&lt;td style="border-bottom: 0.75pt solid; border-left: medium none; border-right: 0.75pt solid; border-top: medium none; padding-bottom: 10px; padding-left: 10px; padding-right: 25px; padding-top: 10px;" valign="middle"&gt;&lt;span style="color: black; font-family: Verdana; font-size: 10pt;"&gt;Routing server failure.&amp;nbsp; No available route.&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="border-bottom: 0.75pt solid; border-left: 0.75pt solid; border-right: 0.75pt solid; border-top: medium none; padding-bottom: 10px; padding-left: 10px; padding-right: 25px; padding-top: 10px;" valign="middle"&gt;&lt;span style="color: black; font-family: Verdana; font-size: 10pt;"&gt;5.4.4&lt;/span&gt;&lt;/td&gt;&lt;td style="border-bottom: 0.75pt solid; border-left: medium none; border-right: 0.75pt solid; border-top: medium none; padding-bottom: 10px; padding-left: 10px; padding-right: 25px; padding-top: 10px;" valign="middle"&gt;&lt;span style="color: black; font-family: Verdana; font-size: 10pt;"&gt;Cannot find the next hop, check the Routing Group Connector.&amp;nbsp; Perhaps you have Exchange servers in different Routing Groups, but no connector.&amp;nbsp; Configuring an MX record may help.&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="border-bottom: 0.75pt solid; border-left: 0.75pt solid; border-right: 0.75pt solid; border-top: medium none; padding-bottom: 10px; padding-left: 10px; padding-right: 25px; padding-top: 10px;" valign="middle"&gt;&lt;span style="color: black; font-family: Verdana; font-size: 10pt;"&gt;5.4.6&lt;/span&gt;&lt;/td&gt;&lt;td style="border-bottom: 0.75pt solid; border-left: medium none; border-right: 0.75pt solid; border-top: medium none; padding-bottom: 10px; padding-left: 10px; padding-right: 25px; padding-top: 10px;" valign="middle"&gt;&lt;span style="color: black; font-family: Verdana; font-size: 10pt;"&gt;Tricky looping problem, a contact has the same email address as an Active Directory user.&amp;nbsp; &lt;br /&gt;
One user is probably using an Alternate Recipient with the same email address as a contact.&lt;br /&gt;
Check recipient policy.&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="border-bottom: 0.75pt solid; border-left: 0.75pt solid; border-right: 0.75pt solid; border-top: medium none; padding-bottom: 10px; padding-left: 10px; padding-right: 25px; padding-top: 10px;" valign="middle"&gt;&lt;span style="color: black; font-family: Verdana; font-size: 10pt;"&gt;5.4.7&lt;/span&gt;&lt;/td&gt;&lt;td style="border-bottom: 0.75pt solid; border-left: medium none; border-right: 0.75pt solid; border-top: medium none; padding-bottom: 10px; padding-left: 10px; padding-right: 25px; padding-top: 10px;" valign="middle"&gt;&lt;span style="color: black; font-family: Verdana; font-size: 10pt;"&gt;Delivery time-out.&amp;nbsp; Message is taking too long to be delivered.&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="border-bottom: 0.75pt solid; border-left: 0.75pt solid; border-right: 0.75pt solid; border-top: medium none; padding-bottom: 10px; padding-left: 10px; padding-right: 25px; padding-top: 10px;" valign="middle"&gt;&lt;span style="color: black; font-family: Verdana; font-size: 10pt;"&gt;5.4.8&lt;/span&gt;&lt;/td&gt;&lt;td style="border-bottom: 0.75pt solid; border-left: medium none; border-right: 0.75pt solid; border-top: medium none; padding-bottom: 10px; padding-left: 10px; padding-right: 25px; padding-top: 10px;" valign="middle"&gt;&lt;span style="color: black; font-family: Verdana; font-size: 10pt;"&gt;Microsoft advises checking your recipient policy when receiving this error.&amp;nbsp;SMTP address should be yourdom.com.&amp;nbsp; &lt;br /&gt;
NOT server.yourdom.com.&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="border-bottom: 0.75pt solid; border-left: 0.75pt solid; border-right: 0.75pt solid; border-top: medium none; padding-bottom: 10px; padding-left: 10px; padding-right: 25px; padding-top: 10px;" valign="middle"&gt;&lt;span style="color: black; font-family: Verdana; font-size: 10pt;"&gt;5.5.0&lt;/span&gt;&lt;/td&gt;&lt;td style="border-bottom: 0.75pt solid; border-left: medium none; border-right: 0.75pt solid; border-top: medium none; padding-bottom: 10px; padding-left: 10px; padding-right: 25px; padding-top: 10px;" valign="middle"&gt;&lt;span style="color: black; font-family: Verdana; font-size: 10pt;"&gt;Underlying SMTP 500 error.&amp;nbsp; Our server tried ehlo, the recipient's server did not understand and returned a 550 or 500 error.&amp;nbsp; Set up SMTP logging. You will likely end up setting up a separate send connector to send mail to this domain to use HELO rather than EHLO formatted SMTP mail.&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="border-bottom: 0.75pt solid; border-left: 0.75pt solid; border-right: 0.75pt solid; border-top: medium none; padding-bottom: 10px; padding-left: 10px; padding-right: 25px; padding-top: 10px;" valign="middle"&gt;&lt;span style="color: black; font-family: Verdana; font-size: 10pt;"&gt;5.5.1&lt;/span&gt;&lt;/td&gt;&lt;td style="border-bottom: 0.75pt solid; border-left: medium none; border-right: 0.75pt solid; border-top: medium none; padding-bottom: 10px; padding-left: 10px; padding-right: 25px; padding-top: 10px;" valign="middle"&gt;&lt;span style="color: black; font-family: Verdana; font-size: 10pt;"&gt;Invalid command.&amp;nbsp; (Rare Exchange NDR)&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="border-bottom: 0.75pt solid; border-left: 0.75pt solid; border-right: 0.75pt solid; border-top: medium none; padding-bottom: 10px; padding-left: 10px; padding-right: 25px; padding-top: 10px;" valign="middle"&gt;&lt;span style="color: black; font-family: Verdana; font-size: 10pt;"&gt;5.5.2&lt;/span&gt;&lt;/td&gt;&lt;td style="border-bottom: 0.75pt solid; border-left: medium none; border-right: 0.75pt solid; border-top: medium none; padding-bottom: 10px; padding-left: 10px; padding-right: 25px; padding-top: 10px;" valign="middle"&gt;&lt;span style="color: black; font-family: Verdana; font-size: 10pt;"&gt;Possibly the disk holding the operating system is full.&amp;nbsp; Alternatively, it could be a syntax error if you are executing SMTP from telnet.&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="border-bottom: 0.75pt solid; border-left: 0.75pt solid; border-right: 0.75pt solid; border-top: medium none; padding-bottom: 10px; padding-left: 10px; padding-right: 25px; padding-top: 10px;" valign="middle"&gt;&lt;span style="color: black; font-family: Verdana; font-size: 10pt;"&gt;5.5.3&lt;/span&gt;&lt;/td&gt;&lt;td style="border-bottom: 0.75pt solid; border-left: medium none; border-right: 0.75pt solid; border-top: medium none; padding-bottom: 10px; padding-left: 10px; padding-right: 25px; padding-top: 10px;" valign="middle"&gt;&lt;span style="color: black; font-family: Verdana; font-size: 10pt;"&gt;Too many recipients.&amp;nbsp; More than 5,000 recipients.&amp;nbsp; Check the Global Settings, Message Delivery properties.&amp;nbsp; Try resending the same message to fewer recipients.&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="border-bottom: 0.75pt solid; border-left: 0.75pt solid; border-right: 0.75pt solid; border-top: medium none; padding-bottom: 10px; padding-left: 10px; padding-right: 25px; padding-top: 10px;" valign="middle"&gt;&lt;span style="color: black; font-family: Verdana; font-size: 10pt;"&gt;5.5.4&lt;/span&gt;&lt;/td&gt;&lt;td style="border-bottom: 0.75pt solid; border-left: medium none; border-right: 0.75pt solid; border-top: medium none; padding-bottom: 10px; padding-left: 10px; padding-right: 25px; padding-top: 10px;" valign="middle"&gt;&lt;span style="color: black; font-family: Verdana; font-size: 10pt;"&gt;Invalid domain name.&amp;nbsp; The true cause maybe an invalid character.&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="border-bottom: 0.75pt solid; border-left: 0.75pt solid; border-right: 0.75pt solid; border-top: medium none; padding-bottom: 10px; padding-left: 10px; padding-right: 25px; padding-top: 10px;" valign="middle"&gt;&lt;span style="color: black; font-family: Verdana; font-size: 10pt;"&gt;5.5.5&lt;/span&gt;&lt;/td&gt;&lt;td style="border-bottom: 0.75pt solid; border-left: medium none; border-right: 0.75pt solid; border-top: medium none; padding-bottom: 10px; padding-left: 10px; padding-right: 25px; padding-top: 10px;" valign="middle"&gt;&lt;span style="color: black; font-family: Verdana; font-size: 10pt;"&gt;Wrong protocol version.&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="border-bottom: 0.75pt solid; border-left: 0.75pt solid; border-right: 0.75pt solid; border-top: medium none; padding-bottom: 10px; padding-left: 10px; padding-right: 25px; padding-top: 10px;" valign="middle"&gt;&lt;span style="color: black; font-family: Verdana; font-size: 10pt;"&gt;5.5.6&lt;/span&gt;&lt;/td&gt;&lt;td style="border-bottom: 0.75pt solid; border-left: medium none; border-right: 0.75pt solid; border-top: medium none; padding-bottom: 10px; padding-left: 10px; padding-right: 25px; padding-top: 10px;" valign="middle"&gt;&lt;span style="color: black; font-family: Verdana; font-size: 10pt;"&gt;Invalid message content.&amp;nbsp; This is a protocol error, thus you should get more information by looking in the application log. &lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="border-bottom: 0.75pt solid; border-left: 0.75pt solid; border-right: 0.75pt solid; border-top: medium none; padding-bottom: 10px; padding-left: 10px; padding-right: 25px; padding-top: 10px;" valign="middle"&gt;&lt;span style="color: black; font-family: Verdana; font-size: 10pt;"&gt;5.6.0&lt;/span&gt;&lt;/td&gt;&lt;td style="border-bottom: 0.75pt solid; border-left: medium none; border-right: 0.75pt solid; border-top: medium none; padding-bottom: 10px; padding-left: 10px; padding-right: 25px; padding-top: 10px;" valign="middle"&gt;&lt;span style="color: black; font-family: Verdana; font-size: 10pt;"&gt;Corrupt message content.&amp;nbsp; Try sending without attachment.&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="border-bottom: 0.75pt solid; border-left: 0.75pt solid; border-right: 0.75pt solid; border-top: medium none; padding-bottom: 10px; padding-left: 10px; padding-right: 25px; padding-top: 10px;" valign="middle"&gt;&lt;span style="color: black; font-family: Verdana; font-size: 10pt;"&gt;5.6.1&lt;/span&gt;&lt;/td&gt;&lt;td style="border-bottom: 0.75pt solid; border-left: medium none; border-right: 0.75pt solid; border-top: medium none; padding-bottom: 10px; padding-left: 10px; padding-right: 25px; padding-top: 10px;" valign="middle"&gt;&lt;span style="color: black; font-family: Verdana; font-size: 10pt;"&gt;Media not supported.&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="border-bottom: 0.75pt solid; border-left: 0.75pt solid; border-right: 0.75pt solid; border-top: medium none; padding-bottom: 10px; padding-left: 10px; padding-right: 25px; padding-top: 10px;" valign="middle"&gt;&lt;span style="color: black; font-family: Verdana; font-size: 10pt;"&gt;5.6.3&lt;/span&gt;&lt;/td&gt;&lt;td style="border-bottom: 0.75pt solid; border-left: medium none; border-right: 0.75pt solid; border-top: medium none; padding-bottom: 10px; padding-left: 10px; padding-right: 25px; padding-top: 10px;" valign="middle"&gt;&lt;span style="color: black; font-family: Verdana; font-size: 10pt;"&gt;More than 250 attachments. &lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="border-bottom: 0.75pt solid; border-left: 0.75pt solid; border-right: 0.75pt solid; border-top: medium none; padding-bottom: 10px; padding-left: 10px; padding-right: 25px; padding-top: 10px;" valign="middle"&gt;&lt;span style="color: black; font-family: Verdana; font-size: 10pt;"&gt;5.7.1&lt;/span&gt;&lt;/td&gt;&lt;td style="border-bottom: 0.75pt solid; border-left: medium none; border-right: 0.75pt solid; border-top: medium none; padding-bottom: 10px; padding-left: 10px; padding-right: 25px; padding-top: 10px;" valign="middle"&gt;&lt;span style="color: black; font-family: Verdana; font-size: 10pt;"&gt;A very common Exchange 2007 NDR, the cause is a permissions problem.&amp;nbsp; For some reason the sender is not allowed to email this account.&amp;nbsp; &lt;br /&gt;
Perhaps an anonymous user is trying to send mail to a distribution list.&amp;nbsp; &lt;br /&gt;
Alternatively, a user may have a manually created email address that does not match a System Policy.&lt;br /&gt;
Check SMTP Virtual Server Access Tab.&amp;nbsp; Try checking this box: Allow computers which successfully authenticate to relay.&amp;nbsp; &lt;br /&gt;
Check the outgoing SMTP logs.&lt;br /&gt;
Check: Mailbox - &amp;lt;Mailboxname&amp;gt; - Properties - Mail Flow Settings - Message delivery restrictions.&lt;br /&gt;
Try disabling Windows-Integrated-Security.&amp;nbsp; Instead allow only standard authorization on the SMTP receiver on the Exchange 2007 server. &lt;br /&gt;
Check Attachment filtering on the Edge server.&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="border-bottom: 0.75pt solid; border-left: 0.75pt solid; border-right: 0.75pt solid; border-top: medium none; padding-bottom: 10px; padding-left: 10px; padding-right: 25px; padding-top: 10px;" valign="middle"&gt;&lt;span style="color: black; font-family: Verdana; font-size: 10pt;"&gt;5.7.2&lt;/span&gt;&lt;/td&gt;&lt;td style="border-bottom: 0.75pt solid; border-left: medium none; border-right: 0.75pt solid; border-top: medium none; padding-bottom: 10px; padding-left: 10px; padding-right: 25px; padding-top: 10px;" valign="middle"&gt;&lt;span style="color: black; font-family: Verdana; font-size: 10pt;"&gt;Distribution list cannot be expanded and so is unable to deliver its messages. May be a Global Catalog problem or a DL that has been deleted.&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="border-bottom: 0.75pt solid; border-left: 0.75pt solid; border-right: 0.75pt solid; border-top: medium none; padding-bottom: 10px; padding-left: 10px; padding-right: 25px; padding-top: 10px;" valign="middle"&gt;&lt;span style="color: black; font-family: Verdana; font-size: 10pt;"&gt;5.7.3&lt;/span&gt;&lt;/td&gt;&lt;td style="border-bottom: 0.75pt solid; border-left: medium none; border-right: 0.75pt solid; border-top: medium none; padding-bottom: 10px; padding-left: 10px; padding-right: 25px; padding-top: 10px;" valign="middle"&gt;&lt;span style="color: black; font-family: Verdana; font-size: 10pt;"&gt;Not Authorized, security problem.&amp;nbsp; It could be that the sender cannot send to the alternative address.&amp;nbsp;&amp;nbsp; &lt;br /&gt;
On another tack, check external IP address of ISA server. Make sure it matches the SMTP publishing rule.&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="border-bottom: 0.75pt solid; border-left: 0.75pt solid; border-right: 0.75pt solid; border-top: medium none; padding-bottom: 10px; padding-left: 10px; padding-right: 25px; padding-top: 10px;" valign="middle"&gt;&lt;span style="color: black; font-family: Verdana; font-size: 10pt;"&gt;5.7.4&lt;/span&gt;&lt;/td&gt;&lt;td style="border-bottom: 0.75pt solid; border-left: medium none; border-right: 0.75pt solid; border-top: medium none; padding-bottom: 10px; padding-left: 10px; padding-right: 25px; padding-top: 10px;" valign="middle"&gt;&lt;span style="color: black; font-family: Verdana; font-size: 10pt;"&gt;Extra security features not supported.&amp;nbsp; Check delivery server settings&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="border-bottom: 0.75pt solid; border-left: 0.75pt solid; border-right: 0.75pt solid; border-top: medium none; padding-bottom: 10px; padding-left: 10px; padding-right: 25px; padding-top: 10px;" valign="middle"&gt;&lt;span style="color: black; font-family: Verdana; font-size: 10pt;"&gt;5.7.5&lt;/span&gt;&lt;/td&gt;&lt;td style="border-bottom: 0.75pt solid; border-left: medium none; border-right: 0.75pt solid; border-top: medium none; padding-bottom: 10px; padding-left: 10px; padding-right: 25px; padding-top: 10px;" valign="middle"&gt;&lt;span style="color: black; font-family: Verdana; font-size: 10pt;"&gt;Cryptographic failure.&amp;nbsp; Try a plain message without encryption.&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="border-bottom: 0.75pt solid; border-left: 0.75pt solid; border-right: 0.75pt solid; border-top: medium none; padding-bottom: 10px; padding-left: 10px; padding-right: 25px; padding-top: 10px;" valign="middle"&gt;&lt;span style="color: black; font-family: Verdana; font-size: 10pt;"&gt;5.7.6&lt;/span&gt;&lt;/td&gt;&lt;td style="border-bottom: 0.75pt solid; border-left: medium none; border-right: 0.75pt solid; border-top: medium none; padding-bottom: 10px; padding-left: 10px; padding-right: 25px; padding-top: 10px;" valign="middle"&gt;&lt;span style="color: black; font-family: Verdana; font-size: 10pt;"&gt;Certificate problem, encryption level maybe too high.&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="border-bottom: 0.75pt solid; border-left: 0.75pt solid; border-right: 0.75pt solid; border-top: medium none; padding-bottom: 10px; padding-left: 10px; padding-right: 25px; padding-top: 10px;" valign="middle"&gt;&lt;span style="color: black; font-family: Verdana; font-size: 10pt;"&gt;5.7.7&lt;/span&gt;&lt;/td&gt;&lt;td style="border-bottom: 0.75pt solid; border-left: medium none; border-right: 0.75pt solid; border-top: medium none; padding-bottom: 10px; padding-left: 10px; padding-right: 25px; padding-top: 10px;" valign="middle"&gt;&lt;span style="color: black; font-family: Verdana; font-size: 10pt;"&gt;Message integrity problem.&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
If your NDR code is not in X.X.X format, it did not originate within Exchange and likely originated with the client. This is especially true if it is either in hex format like 0x800CCC09 or a long numeric code that includes dashes.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4377279713904753127-6326393722145201754?l=smartit4smb.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/SmartItForSmb/~4/0c96xbTFIrY" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://smartit4smb.blogspot.com/feeds/6326393722145201754/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://smartit4smb.blogspot.com/2010/09/what-to-do-when-postman-doesnt-knock.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4377279713904753127/posts/default/6326393722145201754?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4377279713904753127/posts/default/6326393722145201754?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/SmartItForSmb/~3/0c96xbTFIrY/what-to-do-when-postman-doesnt-knock.html" title="What to do When the Postman Doesn’t Knock" /><author><name>IT Guy</name><uri>http://www.blogger.com/profile/06077702289675708030</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="22" src="http://3.bp.blogspot.com/__3Fv9I-dKhM/THCBA7MpYkI/AAAAAAAAAAQ/i0ELDMJBiuQ/S220/glasses.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/__3Fv9I-dKhM/TJZW3SGzMaI/AAAAAAAAABs/J5TyabZD74Q/s72-c/delivery.bmp" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://smartit4smb.blogspot.com/2010/09/what-to-do-when-postman-doesnt-knock.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0UERns5cCp7ImA9Wx5XF08.&quot;"><id>tag:blogger.com,1999:blog-4377279713904753127.post-2892396658615750285</id><published>2010-09-17T07:00:00.002-04:00</published><updated>2010-09-17T07:00:07.528-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-09-17T07:00:07.528-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="file" /><category scheme="http://www.blogger.com/atom/ns#" term="cleanup" /><title>File System Cleanup</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/AOIOcyVzOF4X7wMifMI6uccmCN4/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/AOIOcyVzOF4X7wMifMI6uccmCN4/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/AOIOcyVzOF4X7wMifMI6uccmCN4/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/AOIOcyVzOF4X7wMifMI6uccmCN4/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;span xmlns=""&gt;&lt;/span&gt;&lt;br /&gt;
Let's face it both applications and people are terrible at cleaning up after themselves. As a result, cleaning up file systems has to be one of the most common requests I have had to help organizations through in my career and it's not always the servers needing the cleanup. Workstations often need the cleanup far more than the servers do. Organizations often target the network share locations for cleanup because that is where they see direct costs associated with this unnecessary collection of files in the form of additional backup media and premature system replacement costs. Workstations though also have file system cleanup needs as well. &lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;We covered &lt;a href="http://smartit4smb.blogspot.com/2010/09/cleanup-unused-user-profiles.html"&gt;removing aged user profiles&lt;/a&gt; yesterday. There is also a need though to clean up the profiles and other folders that are still in use. Items such as old Temp Files and System Mini Dumps can easily consume an entire hard drive. &lt;br /&gt;
Luckily, a good start on addressing both the server and workstation cleanup tasks can be done in the same script. This is because both have similar needs. Both tasks need a way of reporting and/or deleting files that match a specified file name pattern. They also both need a way of reporting and/or deleting files over a certain age that match a specified name pattern. Today's included script can actually address one or both problems in a single pass through the file system.&lt;br /&gt;
This script, filecleanup.vbs, was put together from a bunch of different sources over the years to address the various cleanup requests I had received.&lt;br /&gt;
Using the script is simple assuming you have a good grasp of VBScript's regular expressions. See &lt;a href="http://msdn.microsoft.com/en-us/library/ms974570.aspx"&gt;http://msdn.microsoft.com/en-us/library/ms974570.aspx&lt;/a&gt; for a quick refresher if you need help constructing regular expressions. &lt;br /&gt;
Since most file cleanup searches tend to be focused on the extension of the file in question, the one operator you will use continually is the $ operator as it means the expression needs to appear at the end. For example, the expression ".tmp$" will only match files with an extension of .tmp; it would not match "name.tmp.txt" The script does allow for multiple expressions to be provided in the same operation. Simply delimit the different strings with a semicolon (;). For example, ".tmp$;.err$;.log$" would match any file with a .tmp, .err, or .log extension.&lt;br /&gt;
Command line syntax:&lt;br /&gt;
Cscript filecleanup.vbs -FOLDER &amp;lt;folder&amp;gt; [-PATTERN &amp;lt;regexpr&amp;gt;] [-DATEPATTERN &amp;lt;regexpr&amp;gt; -NUMDAYS &amp;lt;n&amp;gt;] [-DELETE]&lt;br /&gt;
If you have file types that you want removed regardless of age, simply construct a regular expression that matches their name and include it in the –PATTERN argument to the script. For example, if you had a folder named c:\files that you wanted to remove every .dmp and .tmp file from, the command line would be:&lt;br /&gt;
&lt;strong&gt;Cscript filecleanup.vbs -FOLDER c:\files -PATTERN .dmp$;.tmp$ -delete&lt;/strong&gt;&lt;br /&gt;
If you have file types that you want removed only after they reach a certain age, simply construct a regular expression that matches their name and include it in the –DATEPATTERN argument to the script along with the number of days old at which you wish to remove them. For example, if you wish to remove all .log and .err files from the c:\files folder after 3 days the command line would be:&lt;br /&gt;
&lt;strong&gt;Cscript filecleanup.vbs -FOLDER c:\files -DATEPATTERN .log$;.err$ -NUMDAYS 3 -delete&lt;/strong&gt;&lt;br /&gt;
The two previous examples can even be combined into a single action. If that were the case the command line would be:&lt;br /&gt;
&lt;strong&gt;Cscript filecleanup.vbs -FOLDER c:\files -PATTERN .dmp$;.tmp$ -DATEPATTERN .log$;.err$ -NUMDAYS 3 -delete&lt;/strong&gt;&lt;br /&gt;
If you simply want a list of files that meet the criteria, but don't want to delete them, simply leave off the –delete argument and the script will simply report the names and their location.&lt;br /&gt;
What the script does not do is cleanup empty folders.&lt;br /&gt;
As one can imagine, this script can still be used for a number of very useful things such as:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Cleaning up end user profiles of TMP files over a certain age&lt;/li&gt;
&lt;li&gt;Cleaning up transient network locations such as scan destinations&lt;/li&gt;
&lt;li&gt;Removing unwanted file types from network shares such as potentially .MP3, .WMA, WMV, etc.&lt;/li&gt;
&lt;li&gt;Removing unwanted application log, dump, or detail files from systems&lt;/li&gt;
&lt;/ul&gt;Script Contents below:&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;on error resume next&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;Sub Usage()&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;WScript.Echo UCase(WScript.ScriptName) &amp;amp;_&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;" - Reports/Deletes files based on name and age" &amp;amp; vbNewLine &amp;amp; vbNewLine &amp;amp;_&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;"Enumerates files starting at a specified folder and evaluates there name and age against" &amp;amp; vbNewLine &amp;amp;_&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;"provided patterns and either reports them or optionally deletes them." &amp;amp; vbNewLine &amp;amp; vbNewLine &amp;amp;_&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;WScript.ScriptName &amp;amp; " -FOLDER &amp;lt;folder&amp;gt; [-PATTERN &amp;lt;regexpr&amp;gt;] [-DATEPATTERN &amp;lt;regexpr&amp;gt; -NUMDAYS &amp;lt;n&amp;gt;] [-DELETE]" &amp;amp; vbNewLine &amp;amp;_&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;"-FOLDER &amp;lt;folder&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Start the search at the specified folder" &amp;amp; vbNewLine &amp;amp;_&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;"-PATTERN &amp;lt;regexpr&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Semicolon delimited regular expressions denoting files that should be flagged regardless of age." &amp;amp; vbNewLine &amp;amp;_&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;"-DATEPATTERN &amp;lt;regexpr&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Semicolon delimited regular expressions denoting files that should be flagged based on age." &amp;amp; vbNewLine &amp;amp;_&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;"-NUMDAYS &amp;lt;n&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Number of days that should be used as the threshold for the date flagged files, default is 3650" &amp;amp; vbNewLine &amp;amp;_&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;"-DELETE&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Flagged files should be deleted as well as reported" &amp;amp; vbNewLine &amp;amp;_&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;"-?, -H &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Displays this help" &amp;amp; vbNewLine &amp;amp; vbNewLine&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;WScript.Quit&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;End Sub&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;sPattern = ""&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;sTmPattern=""&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;iNumDays = 3650&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;boolDelete = false&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;While i &amp;lt; WScript.Arguments.Count&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;Select Case Replace(UCase(WScript.Arguments.Item(i)),"/","-")&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;Case "-FOLDER":&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;i=i+1&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;objStartFolder=WScript.Arguments.Item(i)&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Case "-PATTERN":&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;i=i+1&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sPattern=WScript.Arguments.Item(i) &lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Case "-DATEPATTERN":&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;i=i+1&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sTmPattern=WScript.Arguments.Item(i)&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Case "-NUMDAYS":&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;i=i+1&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;iNumDays=clng(WScript.Arguments.Item(i))&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;case "-DELETE":&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;boolDelete = true&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;Case "-?":&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;usage()&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;Case else:&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;usage()&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;End Select&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;i = i + 1&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;wend&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;if len(objStartFolder) = 0 then&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;wscript.echo "Starting Folder not specified."&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;wscript.quit -1&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;end if&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;Set objFSO = CreateObject("Scripting.FileSystemObject")&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;Set objFolder = objFSO.GetFolder(objStartFolder)&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;if err.number &amp;lt;&amp;gt; 0 then&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;wscript.echo "Starting Folder: " &amp;amp; objStartFolder &amp;amp; " is not accessible or does not exist."&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;wscript.quit -1&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;end if&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;' Wscript.Echo objFolder.Path&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;Set colFiles = objFolder.Files&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;For Each objFile in colFiles&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;boolMatch = false&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if NameMatch(objFile.Name, sPattern) then&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;boolMatch = true&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;end if&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if not boolMatch then&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if NameMatch(objFile.Name, sTmPattern) then&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;DaysOldMod = Int(Now() - objFile.DateLastModified)&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;DaysOldCreate = Int(Now() - objFile.DateCreated)&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (DaysOldCreate &amp;gt; iNumDays) and (DaysOldMod &amp;gt; iNumDays) then&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;boolMatch = true&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;end if&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;end if&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;end if&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if boolMatch then&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Wscript.Echo objStartFolder &amp;amp; "\" &amp;amp; objFile.Name&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if boolDelete then&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;objFSO.DeleteFile objStartFolder &amp;amp; "\" &amp;amp; objFile.Name, true&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if err.number &amp;lt;&amp;gt; 0 then&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;wscript.echo "Unable to delete file: " &amp;amp; objStartFolder &amp;amp; "\" &amp;amp; objFile.Name&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;err.clear&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;end if&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;end if&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;end if&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;Next&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;' Wscript.Echo&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;ShowSubfolders objFSO.GetFolder(objStartFolder)&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;Sub ShowSubFolders(Folder)&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;For Each Subfolder in Folder.SubFolders&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;' Wscript.Echo Subfolder.Path&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;Set objFolder = objFSO.GetFolder(Subfolder.Path)&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;Set colFiles = objFolder.Files&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;For Each objFile in colFiles&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;boolMatch = false&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if NameMatch(objFile.Name, sPattern) then&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;boolMatch = true&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;end if&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if not boolMatch then&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if NameMatch(objFile.Name, sTmPattern) then&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;DaysOldMod = Int(Now() - objFile.DateLastModified)&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;DaysOldCreate = Int(Now() - objFile.DateCreated)&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (DaysOldCreate &amp;gt; iNumDays) and (DaysOldMod &amp;gt; iNumDays) then&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;boolMatch = true&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;end if&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;end if&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;end if&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if boolMatch then&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Wscript.Echo Subfolder.Path &amp;amp; "\" &amp;amp; objFile.Name&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if boolDelete then&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;objFSO.DeleteFile Subfolder.Path &amp;amp; "\" &amp;amp; objFile.Name, true&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if err.number &amp;lt;&amp;gt; 0 then&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;wscript.echo "Unable to delete file: " &amp;amp; Subfolder.Path &amp;amp; "\" &amp;amp; objFile.Name&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;err.clear&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;end if&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;end if&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;end if&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;Next&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;' Wscript.Echo&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;ShowSubFolders Subfolder&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;Next&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;End Sub&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;function NameMatch(sName, sPattern)&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;NameMatch=false&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if len(sPattern) = 0 then&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;exit function&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;end if&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;set re = new regexp&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;re.ignorecase=true&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;arrPattern = split(sPattern, ";")&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;for each pattern in arrPattern&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;re.pattern = pattern&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if re.test(sName) then&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;NameMatch=true&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;exit function&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;end if&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;next&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Courier New; font-size: 8pt;"&gt;end function&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4377279713904753127-2892396658615750285?l=smartit4smb.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/SmartItForSmb/~4/6gxEL2vS4Js" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://smartit4smb.blogspot.com/feeds/2892396658615750285/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://smartit4smb.blogspot.com/2010/09/file-system-cleanup.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4377279713904753127/posts/default/2892396658615750285?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4377279713904753127/posts/default/2892396658615750285?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/SmartItForSmb/~3/6gxEL2vS4Js/file-system-cleanup.html" title="File System Cleanup" /><author><name>IT Guy</name><uri>http://www.blogger.com/profile/06077702289675708030</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="22" src="http://3.bp.blogspot.com/__3Fv9I-dKhM/THCBA7MpYkI/AAAAAAAAAAQ/i0ELDMJBiuQ/S220/glasses.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://smartit4smb.blogspot.com/2010/09/file-system-cleanup.html</feedburner:origLink></entry></feed>

