<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
  version="2.0">
  <channel>
    <title>Bill Long's Exchange Blog</title>
    <atom:link
      href="https://docs.microsoft.com/archive/blogs/bill_long/feed.xml"
      rel="self"
      type="application/rss+xml" />
    <link>https://docs.microsoft.com/archive/blogs/bill_long/feed.xml</link>
    <description>Exchange Server stuff, focusing on Public Folders, PFDAVAdmin, ExFolders, and Powershell scripting.</description>
    <lastBuildDate>Tue, 16 Apr 2019 05:58:20 GMT</lastBuildDate>
    <language>en-US</language>
    <sy:updatePeriod>hourly</sy:updatePeriod>
    <sy:updateFrequency>1</sy:updateFrequency>
    <item>
      <title>From Jekyll to Hexo</title>
      <link>https://docs.microsoft.com/archive/blogs/bill_long/from-jekyll-to-hexo</link>
      <pubDate>Sat, 09 Jan 2016 07:24:58 GMT</pubDate>
      <dc:creator><![CDATA[Anonymous]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.technet.microsoft.com/bill_long/2016/01/09/from-jekyll-to-hexo/</guid>
      <description><![CDATA[Two years ago, I dove into the wonderful world of static blog generators when I
left my TechNet...]]></description>
      <content:encoded><![CDATA[<img src="/2016/01/09/From-Jekyll-to-Hexo/ruby.jpg" alt="Image" title="Image" />
<p>Two years ago, I dove into the wonderful world of static blog generators when I
left my TechNet blog behind and started using <a href="http://jekyllrb.com/" target="_blank" rel="external">Jekyll</a>
to generate an Azure web site. With my newfound freedom from complex content
management systems, I raved about Jekyll in a blog post. But once the honeymoon
was over, some cracks started to appear in the relationship.</p>
<p>Jekyll does not officially support Windows, so you have to jump through some
hoops to get it up and running. This didn’t seem so bad at first, but I’m one
of those people who is constantly tinkering with my PC, buying new hardware,
and upgrading things, so I end up doing a clean install of my OS several times 
a year.</p>
<p>Back in the day, a clean install of Windows might sound daunting, but these days,
it only takes minutes. The Windows install itself is pretty fast, and I 
have several <a href="http://boxstarter.org/" target="_blank" rel="external">Boxstarter</a> scripts that use 
<a href="https://chocolatey.org/" target="_blank" rel="external">Chocolatey</a> to install all the software I use. This
means getting back up and running is fairly painless - except for Jekyll.</p>
<p>It seemed like every time I got a clean install, that fresh new clean OS feeling
was soon soured by errors from Jekyll. The hoops I had to jump through to get it
up and running would change slightly each time due to changes in 
<a href="https://www.ruby-lang.org" target="_blank" rel="external">Ruby</a> or problems
with gems. For a while, I dealt with this issue by blogging from one of my Ubuntu
VMs.</p>
<p>Finally, I started shopping around for something not based on Jekyll and preferably
with no Ruby dependency at all. There are <a href="https://www.staticgen.com/" target="_blank" rel="external">a lot of options</a>,
but for now, I’ve settled on <a href="https://hexo.io" target="_blank" rel="external">Hexo</a>.</p>
<p>Hexo is powered by <a href="https://nodejs.org/" target="_blank" rel="external">Node.js</a>, and since I’m a big fan of
JavaScript and a big fan of npm, this seems like a natural fit. Maybe this will
be enough motivation to continue the series I left off with, or at least to write
a new technical post of some kind.</p>
]]></content:encoded>
    </item>
    <item>
      <title>A History of Cached Restrictions in Exchange</title>
      <link>https://docs.microsoft.com/archive/blogs/bill_long/a-history-of-cached-restrictions-in-exchange</link>
      <pubDate>Sun, 30 Aug 2015 22:00:00 GMT</pubDate>
      <dc:creator><![CDATA[Anonymous]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.technet.microsoft.com/bill_long/2015/08/30/a-history-of-cached-restrictions-in-exchange/</guid>
      <description><![CDATA[In this series of posts, I’m going to discuss three basic approaches to searching
 the content of...]]></description>
      <content:encoded><![CDATA[<p>In this series of posts, I’m going to discuss three basic approaches to searching
 the content of Exchange mailboxes, and the tradeoffs that come with them. This series 
 is for developers who are writing applications that talk to Exchange, or scripters 
 who are using EWS Managed API from Powershell. I’m not going to be talking about
 New-MailboxSearch or searching from within Outlook, because in that case, the client 
 code that executes the search is already written. This series is for people writing 
 their own Exchange clients.</p>

<p>There are three basic ways to search a mailbox in Exchange Server:</p>

<ol>
  <li>Sort a table and seek to the items you’re interested in. This approach is called a <strong>sort-and-seek</strong>.</li>
  <li>Hand the server a set of criteria and tell it to only return items that match. This is
 the <strong>Restrict</strong> method in MAPI and <strong>FindItems</strong> in EWS.</li>
  <li>Create a search folder with a set of criteria, and retrieve the contents of that folder 
 to see the matching items.</li>
</ol>

<p>For most of Exchange Server’s history, approaches 2 and 3 were implemented basically the same way.
 Using either approach caused a table to be created in the database. These tables contained a
 small amount of information for each item that matched the search, and the tables would hang around
 in the database for some amount of time. These tables were called <strong>cached restrictions</strong> or 
 <strong>cached views</strong>. I’m going to call them <strong>cached restrictions</strong>, because that was the popular
 terminology when I started supporting Exchange.</p>

<p>Recorded history basically starts with Exchange 5.5, so let’s start there. Exchange 5.5
saved every single restriction for a certain amount of time. This meant that the first time
you performed an <a href="https://msdn.microsoft.com/en-us/library/office/cc815682.aspx"><strong>IMAPITable::Restrict()</strong></a>
on a certain folder, you would observe a delay while
Exchange built the table. The second time you performed a <strong>IMAPITable::Restrict()</strong> on the
same folder with the same restriction criteria, it was fast, because the restriction had been
cached - that is, we now had a table for that restriction in the database, ready to be reused.</p>

<p>Exchange 5.5 continued keeping the cached restriction up to date as the content of the mailbox 
changed, just in case the client asked for that same search again. Every time a new item came into
the Inbox, Exchange would update every cached restriction which was scoped to that folder.
Unfortunately, this created a problem. If you had a lot of users sharing a mailbox, or you had 
an application that performed searches for lots of different criteria, you ended up with lots 
of different cached restrictions - possibly hundreds. Updating hundreds of cached restrictions
every time a new email arrived got expensive and caused significant performance issues. 
As Exchange matured, changes were introduced to deal with this issue.</p>

<p>In Exchange 2003, a limit was put in place so Exchange would only cache 11 restrictions for a given folder 
(adjustable with <strong>msExchMaxCachedViews</strong> or <strong>PR_MAX_CACHED_VIEWS</strong>). This prevented hundreds of
cached restrictions from accumulating for a folder, and neatly avoided that perf hit.
 However, this meant that if 
you had a user or application creating a bunch of one-off restrictions, the cache would keep 
cycling and no search would ever get satisfied from a cached restriction unless you adjusted these values. 
If you set the limit too high, then you reintroduced the performance problems that the limit had fixed.</p>

<p>In Exchange 2010, cached restrictions were changed to use dynamic updates instead of updating every time 
the mailbox changed. This made it less expensive to cache lots of restrictions, since they didn’t all have 
to be kept up to date all the time. However, you could still run into situations where an 
application performed a bunch of one-off searches which were only used once but were then cached. 
When it came time to clean up those cached restrictions, the cleanup task could impact performance. We
saw a few cases where Exchange 2010 mailboxes would be locked out for hours while the Information Store tried
to clean up restrictions that were created across hundreds of folders.</p>

<p>In Exchange 2013 and 2016, the Information Store is selective about which restrictions it caches. 
As a developer of a client, you can’t really predict whether your restriction is going to 
get cached, because this is a moving target. As Exchange 2013 and 2016 continue to evolve, they may cache 
something tomorrow that they don’t cache today. If you’re going to use the same search repeatedly
in modern versions of Exchange, the only way to be sure the restriction is cached is to create a search
folder. This is the behavior change described in <a href="https://support.microsoft.com/en-us/kb/3077710">KB 3077710</a>.</p>

<p>In all versions of Exchange, it was always important to think about how you were searching and try 
to use restrictions responsibly. Exchange 2013 and 2016 are unique in that they basically
insist that you create a search folder if you want your restriction to be cached.</p>

<p>The next post in this series will explore some sample code that illustrates differences between
Exchange 2013 and Exchange 2010 restriction behavior.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Use MAPIFolders for the TNEF issue</title>
      <link>https://docs.microsoft.com/archive/blogs/bill_long/use-mapifolders-for-the-tnef-issue</link>
      <pubDate>Mon, 08 Jun 2015 22:00:00 GMT</pubDate>
      <dc:creator><![CDATA[Anonymous]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.technet.microsoft.com/bill_long/2015/06/08/use-mapifolders-for-the-tnef-issue/</guid>
      <description><![CDATA[I’ve written a couple of previous posts on the corrupt TNEF issue that causes this...]]></description>
      <content:encoded><![CDATA[<p>I’ve written a couple of previous posts on the corrupt TNEF issue that causes this error:</p>

<p><code>
Microsoft.Exchange.Data.Storage.ConversionFailedException: The message content has become corrupted. ---&gt; Microsoft.Exchange.Data.Storage.ConversionFailedException: Content conversion: Failed due to corrupt TNEF (violation status: 0x00008000)
</code></p>

<p>For the history, see <a href="/2014/01/16/public-folder-replication-fails-with-tnef-violation-status-0x00008000">this post</a> and <a href="/2014/06/02/TNEF-property-problem-update">this post</a>.</p>

<p>Previously, the solution was the <a href="https://gist.githubusercontent.com/bill-long/8573790">Delete-TNEFProps.ps1</a> script. Unfortunately, that script has some limitations. Most notably, it cannot not fix attachments. This is a big problem for some environments where we have a lot of items with these properties on them.</p>

<p>I attempted to find a way to make the script remove the problem properties from attachments, but I could not figure out how to do it. Either this is impossible with <strong>EWS</strong>, or I’m missing an obscure trick. I finally gave up and went a different route.</p>

<p>For some time, I’ve been (slowly) working on a new tool called <strong>MAPIFolders</strong>. It is intended as a successor to <strong>PFDAVAdmin</strong> and <strong>ExFolders</strong>, though it is still fairly limited compared to those tools. It is also a command-line tool, unlike the older tools. However, it does have some advantages, such as the fact that it uses <strong>MAPI</strong>. This means it is not tied to deprecated APIs and frameworks like PFDAVAdmin was, and it doesn’t rely on directly loading the Exchange DLLs like ExFolders does. It can be run from any client machine against virtually any version of Exchange, just like any other MAPI client.</p>

<p>Also, because it’s MAPI, I can make it do almost anything, such as blowing away the properties on nested attachments and saving those changes.</p>

<p>Thanks to a customer who opened a case on the TNEF problem, I was able to test MAPIFolders in a significantly large public folder environment with a lot of corrupted TNEF items. After a bit of debugging and fixing things, MAPIFolders is now a far better solution to the TNEF issue than the Delete-TNEFProps script. It can remove the properties from attachments and even nested attachments.</p>

<p>The logging is very noisy and needs work, but that will have to wait. Writing C++ is just too painful. If you are running into the corrupt TNEF issue, you can grab MAPIFolders from GitHub: <a href="https://github.com/bill-long/mapifolders/releases">https://github.com/bill-long/mapifolders/releases</a>. The syntax for fixing the TNEF problem is described here: <a href="https://github.com/bill-long/mapifolders/wiki/Check-Fix-Items-Operations">https://github.com/bill-long/mapifolders/wiki/Check-Fix-Items-Operations</a>.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Database bloat in Exchange 2010</title>
      <link>https://docs.microsoft.com/archive/blogs/bill_long/database-bloat-in-exchange-2010</link>
      <pubDate>Tue, 02 Jun 2015 22:00:00 GMT</pubDate>
      <dc:creator><![CDATA[Anonymous]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.technet.microsoft.com/bill_long/2015/06/02/database-bloat-in-exchange-2010/</guid>
      <description><![CDATA[I keep deciding not to write this post, because Exchange 2010 is out of mainstream support. And yet,...]]></description>
      <content:encoded><![CDATA[<p>I keep deciding not to write this post, because Exchange 2010 is out of mainstream support. And yet, we are still getting these cases from time to time, so I suppose I will finally write it, and hopefully it helps someone.</p>

<p>In Exchange 2010, we had several bugs that led to the database leaking space. These bugs had to do with the cleanup of deleted items. When a client deletes items, those items go into a cleanup queue. A background process is supposed to come through and process the items out of the cleanup queue to free up that space. Unfortunately, that didn’t consistently work, and sometimes the space would be leaked.</p>

<p>There was an initial attempt to fix this, which did resolve many of the open cases I had at the time, but not all of them. Later, another fix went in, and this resolved the issue for all my remaining cases at the time. Both of those fixes were included in Exchange 2010 SP3 RU1.</p>

<p>After that, we occasionally still see a case where space is leaking even with these fixes in place. But every time we try to trace it so we can fix the problem, the act of turning on tracing fixes the behavior. I’ve been back and forth through that code, and there’s no apparent reason that the tracing should affect the way cleanup actually behaves. Nonetheless, in these rare cases where the fixes didn’t totally fix the problem, tracing fixes it every time. I wish I knew why.</p>

<p>The tracing workaround has its limitations, though. The cleanup queue is not persisted in the database, so tracing only works for an active leak where the database has not yet been dismounted. After the database is dismounted, any leaked space is effectively permanent at that point, and your best bet is to move the mailboxes off. When the entire mailbox is moved, that leaked space will be freed, since it was still associated with the mailbox.</p>

<p>So, how can you tell if you’re being affected by this problem? One option is to just turn on tracing:</p>

<ol>
  <li>Launch <strong>ExTRA</strong>.</li>
  <li>Choose <strong>Trace Control</strong>. You’ll get a standard warning. Click OK.</li>
  <li>Choose a location for the ETL file and choose the option for <strong>circular logging</strong>. You can make the file as large or as small as you want. It doesn’t really matter, since our goal here isn’t to look at the trace output.</li>
  <li>Click the <strong>Set manual trace tags</strong> button.</li>
  <li>At the top, check all eight <strong>Trace Type</strong> boxes.</li>
  <li>Under <strong>Components to Trace</strong>, highlight the <strong>Store</strong> component (but don’t check it).</li>
  <li>In the <strong>Trace Tags</strong> for store on the right, check the box next to <strong>tagCleanupMsg</strong>. We only need this one tag.</li>
  <li>Click <strong>Start Tracing</strong> at the bottom.</li>
</ol>

<p>Let the trace run for a day or two and observe the effect on database whitespace. If you see significant amounts of space being freed with tracing on, then you’re hitting this problem. Again, this only works if the database has not been dismounted since the space leaked.</p>

<p>Another option is to analyze the database space to see if you’re hitting this problem. Here’s how you do that.</p>

<ol>
  <li>Dismount the database and run
<code>eseutil /ms /v &quot;C:\databases\somedatabase.edb&quot; &gt; C:\spacereport.txt</code></li>
  <li>For the same database, launch <strong>Exchange Management Shell</strong> and run
<code>Get-MailboxStatistics -Database SomeDatabase | Export-Csv C:\mailboxstatistics.csv</code></li>
  <li>Use my Analyze-SpaceDump.ps1 script to parse the spacereport.txt: 
<code>.\Analyze-SpaceDump.ps1 C:\spacereport.txt</code></li>
  <li>Look for the “Largest body tables” at the bottom of the report. These are the largest mailboxes in terms of the actual space they use in the database. These numbers are in megabytes, so if it reports that a body table owns 7000, that means that mailbox owns 7 GB of space in the database.</li>
  <li>Grab the ID from the body table. For example, if the table is Body-1-ABCD, then the ID is 1-ABCD. This will correspond to the MailboxTableIdentifier in the mailboxstatistics.csv.</li>
  <li>Find that mailbox in the statistics output and add up the TotalItemSize and TotalDeletedItemSize. By comparing that against how much space the body table is using in the database, you know how much space has leaked.</li>
</ol>

<p>It’s often normal to have small differences, but when you see that a mailbox has leaked gigabytes, then you’re hitting this problem.</p>

<p>You can also compare the overall leaked size with some quick Powershell scripting. When I get these files from a customer, I run the following to add up the mailbox size from the mailbox statistics csv:</p>

<div class="highlight"><pre><code class="language-powershell"><span class="nv">$stats</span> <span class="p">=</span> <span class="nb">Import-Csv</span> <span class="n">C</span><span class="err">:</span><span class="p">\</span><span class="n">mailboxstatistics</span><span class="p">.</span><span class="n">csv</span>
<span class="nv">$deletedItemBytes</span> <span class="p">=</span> <span class="p">(</span><span class="nv">$stats</span> <span class="p">|</span> <span class="k">foreach</span> <span class="p">{</span> <span class="nv">$bytesStart</span> <span class="p">=</span> <span class="nv">$_</span><span class="p">.</span><span class="n">TotalDeletedItemSize</span><span class="p">.</span><span class="n">IndexOf</span><span class="p">(</span><span class="s2">&quot;(&quot;</span><span class="p">)</span> <span class="p">;</span> <span class="nv">$bytes</span> <span class="p">=</span> <span class="nv">$_</span><span class="p">.</span><span class="n">TotalDeletedItemSize</span><span class="p">.</span><span class="n">Substring</span><span class="p">(</span><span class="nv">$bytesStart</span> <span class="p">+</span> <span class="n">1</span><span class="p">)</span> <span class="p">;</span> <span class="nv">$bytesEnd</span> <span class="p">=</span> <span class="nv">$bytes</span><span class="p">.</span><span class="n">IndexOf</span><span class="p">(</span><span class="s2">&quot; &quot;</span><span class="p">)</span> <span class="p">;</span> <span class="nv">$bytes</span> <span class="p">=</span> <span class="nv">$bytes</span><span class="p">.</span><span class="n">Substring</span><span class="p">(</span><span class="n">0</span><span class="p">,</span> <span class="nv">$bytesEnd</span><span class="p">)</span> <span class="p">;</span> <span class="nv">$bytes</span> <span class="p">}</span> <span class="p">|</span> <span class="nb">Measure-Object</span> <span class="err">–</span><span class="n">Sum</span><span class="p">).</span><span class="n">Sum</span>
<span class="nv">$totalItemBytes</span> <span class="p">=</span> <span class="p">(</span><span class="nv">$stats</span> <span class="p">|</span> <span class="k">foreach</span> <span class="p">{</span> <span class="nv">$bytesStart</span> <span class="p">=</span> <span class="nv">$_</span><span class="p">.</span><span class="n">TotalItemSize</span><span class="p">.</span><span class="n">IndexOf</span><span class="p">(</span><span class="s2">&quot;(&quot;</span><span class="p">)</span> <span class="p">;</span> <span class="nv">$bytes</span> <span class="p">=</span> <span class="nv">$_</span><span class="p">.</span><span class="n">TotalItemSize</span><span class="p">.</span><span class="n">Substring</span><span class="p">(</span><span class="nv">$bytesStart</span> <span class="p">+</span> <span class="n">1</span><span class="p">)</span> <span class="p">;</span> <span class="nv">$bytesEnd</span> <span class="p">=</span> <span class="nv">$bytes</span><span class="p">.</span><span class="n">IndexOf</span><span class="p">(</span><span class="s2">&quot; &quot;</span><span class="p">)</span> <span class="p">;</span> <span class="nv">$bytes</span> <span class="p">=</span> <span class="nv">$bytes</span><span class="p">.</span><span class="n">Substring</span><span class="p">(</span><span class="n">0</span><span class="p">,</span> <span class="nv">$bytesEnd</span><span class="p">)</span> <span class="p">;</span> <span class="nv">$bytes</span> <span class="p">}</span> <span class="p">|</span> <span class="nb">Measure-Object</span> <span class="err">–</span><span class="n">Sum</span><span class="p">).</span><span class="n">Sum</span>
<span class="p">(</span><span class="nv">$deletedItemBytes</span> <span class="p">+</span> <span class="nv">$totalItemBytes</span><span class="p">)</span> <span class="p">/</span> <span class="n">1024</span> <span class="p">/</span> <span class="n">1024</span></code></pre></div>

<p>This gives you the size in megabytes as reported by Get-MailboxStatistics. Then, you can go look at the Analyze-SpaceDump.ps1 output and compare this to the “Spaced owned by body tables”, which is also in megabytes. The difference between the two gives you an idea of how much total space has leaked across all mailboxes.</p>

<p>Ultimately, the resolution is usually to move the mailboxes. If the database has not been dismounted, you can turn on tagCleanupMsg tracing to recover the space.</p>

<p>The SP3 RU1 fixes made this problem extremely rare in Exchange 2010, and the store redesign in Exchange 2013 seems to have eliminated it completely. As of this writing, I haven’t seen a single case of this on Exchange 2013.</p>
]]></content:encoded>
    </item>
    <item>
      <title>DsQuerySitesByCost and public folder referrals</title>
      <link>https://docs.microsoft.com/archive/blogs/bill_long/dsquerysitesbycost-and-public-folder-referrals</link>
      <pubDate>Tue, 24 Mar 2015 22:00:00 GMT</pubDate>
      <dc:creator><![CDATA[Anonymous]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.technet.microsoft.com/bill_long/2015/03/24/dsquerysitesbycost-and-public-folder-referrals/</guid>
      <description><![CDATA[In Exchange 2010 and older, when you mount a public folder database, the Information Store service...]]></description>
      <content:encoded><![CDATA[<p>In Exchange 2010 and older, when you mount a public folder database, the Information Store service asks Active Directory for the costs from this site to every other site that contains a public folder database. This is repeated about every hour in order to pick up changes. If a client tries to access a public folder which has no replica in the local site, Exchange uses the site cost information to decide where to send the client. This means that, as with so many other features, public folder referrals will not work properly if something is wrong with AD.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Automating data collection with Powershell</title>
      <link>https://docs.microsoft.com/archive/blogs/bill_long/automating-data-collection-with-powershell</link>
      <pubDate>Fri, 05 Dec 2014 22:00:00 GMT</pubDate>
      <dc:creator><![CDATA[Bill Long [Exchange]]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.technet.microsoft.com/bill_long/2014/12/05/automating-data-collection-with-powershell/</guid>
      <description><![CDATA[One of the challenges with analyzing complex Exchange issues is data collection. Once the server...]]></description>
      <content:encoded><![CDATA[<p>One of the challenges with analyzing complex Exchange issues is data collection. Once the server goes into the failed state, any data collection at that point only shows us what the failed state looks like. It doesn&#39;t show us how it went from working to failing, and sometimes, that&#39;s what we need to see in order to solve the problem.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Directory Name Must Be Less Than 248 Characters</title>
      <link>https://docs.microsoft.com/archive/blogs/bill_long/directory-name-must-be-less-than-248-characters</link>
      <pubDate>Tue, 08 Jul 2014 22:00:00 GMT</pubDate>
      <dc:creator><![CDATA[Bill Long [Exchange]]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.technet.microsoft.com/bill_long/2014/07/08/directory-name-must-be-less-than-248-characters/</guid>
      <description><![CDATA[Over the holiday weekend, I was deleting some old projects out of my coding projects folder when...]]></description>
      <content:encoded><![CDATA[<p>Over the holiday weekend, I was deleting some old projects out of my coding projects folder when Powershell returned an error stating, &quot;The specified path, file name, or both are too long. The fully qualified file name must be less than 260 characters, and the directory name must be less than 248 characters.&quot; I found that attempting to delete the folder from <strong>explorer</strong> or a <strong>DOS</strong> prompt also failed.</p>
]]></content:encoded>
    </item>
    <item>
      <title>TNEF property problem update</title>
      <link>https://docs.microsoft.com/archive/blogs/bill_long/tnef-property-problem-update</link>
      <pubDate>Sun, 01 Jun 2014 22:00:00 GMT</pubDate>
      <dc:creator><![CDATA[Bill Long [Exchange]]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.technet.microsoft.com/bill_long/2014/06/01/tnef-property-problem-update/</guid>
      <description><![CDATA[Back in January, I wrote a blog post about PF replication failing due to corrupt TNEF. The problem...]]></description>
      <content:encoded><![CDATA[<p>Back in January, I wrote a <a>blog post about PF replication failing due to corrupt TNEF</a>. The problem is caused by the presence of a couple of properties that have been deprecated and shouldn&#39;t be present on items anymore. At the time I wrote that post, we thought you could run the cleanup script to remove the properties and live happily ever after. So much for that idea.</p>
]]></content:encoded>
    </item>
    <item>
      <title>MfcMapi error when opening public folders</title>
      <link>https://docs.microsoft.com/archive/blogs/bill_long/mfcmapi-error-when-opening-public-folders</link>
      <pubDate>Tue, 13 May 2014 22:00:00 GMT</pubDate>
      <dc:creator><![CDATA[Bill Long [Exchange]]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.technet.microsoft.com/bill_long/2014/05/13/mfcmapi-error-when-opening-public-folders/</guid>
      <description><![CDATA[There are a lot of little problems I run across that I never investigate, simply because there&#39;s...]]></description>
      <content:encoded><![CDATA[<p>There are a lot of little problems I run across that I never investigate, simply because there&#39;s no impact and no one seems to care. I have my hands full investigating issues that people actually care about, so investing time to chase down something else is usually not a good use of my time.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Working around findstr's regexp limitations</title>
      <link>https://docs.microsoft.com/archive/blogs/bill_long/working-around-findstrs-regexp-limitations</link>
      <pubDate>Sat, 12 Apr 2014 22:00:00 GMT</pubDate>
      <dc:creator><![CDATA[Bill Long [Exchange]]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.technet.microsoft.com/bill_long/2014/04/12/working-around-findstrs-regexp-limitations/</guid>
      <description><![CDATA[It&#39;s my job to solve difficult problems involving Exchange Server, and this often involves a lot...]]></description>
      <content:encoded><![CDATA[<p>It&#39;s my job to solve difficult problems involving Exchange Server, and this often involves a lot of various types of tracing. Almost daily, I find myself needing to parse through huge amounts of text to find the relevant information. For one issue alone, I currently have over 20 GB of traces in the form of text files.</p>
]]></content:encoded>
    </item>
  </channel>
</rss>