<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:blogger="http://schemas.google.com/blogger/2008" 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" version="2.0"><channel><atom:id>tag:blogger.com,1999:blog-2432296471619761237</atom:id><lastBuildDate>Thu, 26 Jul 2012 04:02:38 +0000</lastBuildDate><category>Recipient Update Policy</category><category>SendAs/SendOnBehalf</category><category>WebForms</category><category>VMWare</category><category>Entourage</category><category>Information Store</category><category>tsql</category><category>web</category><category>Asp.Net</category><category>security</category><category>Exchange 2007</category><category>Codeplex</category><category>Concurrency</category><category>Recipient Administration</category><category>Testing</category><category>Administration</category><category>Best Practice</category><category>Setup</category><category>Development</category><category>sqlserver</category><category>Permission</category><category>Free/Busy</category><category>PowerShell</category><category>Active Directory</category><category>Journaling</category><category>UnitTesting</category><category>Exchange 2003</category><category>Humor</category><category>IIS7</category><category>Wmi</category><category>Exchange Management</category><title>A Developer Perspective</title><description>Discussing everything about Development, IT, PowerShell, and .Net.</description><link>http://romanroz.blogspot.com/</link><managingEditor>noreply@blogger.com (Roman Rozinov)</managingEditor><generator>Blogger</generator><openSearch:totalResults>35</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/rss+xml" href="http://feeds.feedburner.com/AnExchangeDeveloperPerspective" /><feedburner:info uri="anexchangedeveloperperspective" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item><guid isPermaLink="false">tag:blogger.com,1999:blog-2432296471619761237.post-1504199757030657824</guid><pubDate>Fri, 27 Apr 2012 15:30:00 +0000</pubDate><atom:updated>2012-04-27T08:30:33.095-07:00</atom:updated><title>The Journey continues</title><description>&lt;p&gt;It feels that every few seasons, I get the itch to blog again.&amp;nbsp; With the new job that I started at Sogeti USA, I think this is a great time to restart.&amp;nbsp; It did not take the company long to throw me into a rather complex development project.&amp;nbsp; In fact, that complexity is mostly due to SharePoint 2010 platform on which we have to deliver our product.&amp;nbsp; Therefore, I will ultimately have to rant or provide various workarounds over the next few months as I encounter.&amp;nbsp; &lt;/p&gt; &lt;p&gt;So, the journey does continue …&lt;/p&gt;</description><link>http://feedproxy.google.com/~r/AnExchangeDeveloperPerspective/~3/qT-J6nnzsmE/journey-continues.html</link><author>noreply@blogger.com (Roman Rozinov)</author><thr:total>0</thr:total><feedburner:origLink>http://romanroz.blogspot.com/2012/04/journey-continues.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-2432296471619761237.post-2359430901420450622</guid><pubDate>Thu, 11 Nov 2010 02:04:00 +0000</pubDate><atom:updated>2010-11-10T19:04:17.463-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">tsql</category><category domain="http://www.blogger.com/atom/ns#">sqlserver</category><title>Inserting Records with Identity column table</title><description>&lt;p&gt;So, recently, I needed to insert some static data manually within the staging environment.&amp;nbsp; I wanted to align the identity column values to be in ascending order but if there are any typos causing my inserts to be rolled back, then the identity values will have gaps because rollback operation does not preserve the next value for identity.&amp;nbsp; Therefore, using DBCC CHECKIDENT ('&amp;lt;schema&amp;gt;.&amp;lt;tbl_name&amp;gt;', NORESEED), I can find the current value of the seed, while using DBCC CHECKIDENT ('&amp;lt;schema&amp;gt;.&amp;lt;tbl_name&amp;gt;', RESEED,&amp;lt;last_used_value&amp;gt;) sets the identity to the last value.&amp;nbsp; &lt;/p&gt;</description><link>http://feedproxy.google.com/~r/AnExchangeDeveloperPerspective/~3/Eaag1Vy8hXs/inserting-records-with-identity-column.html</link><author>noreply@blogger.com (Roman Rozinov)</author><thr:total>0</thr:total><feedburner:origLink>http://romanroz.blogspot.com/2010/11/inserting-records-with-identity-column.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-2432296471619761237.post-4517356095092098283</guid><pubDate>Sun, 07 Mar 2010 23:20:00 +0000</pubDate><atom:updated>2010-11-04T18:55:38.329-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Administration</category><category domain="http://www.blogger.com/atom/ns#">VMWare</category><category domain="http://www.blogger.com/atom/ns#">PowerShell</category><title /><description>I like to configure my VMWare Guests to manual startup/shutdown because I use the host for both as a management platform and a developer workstation.  &lt;p&gt;To assist me with managing such environment, i use VI Tookit.  Only 1.0 is compatible with VMWare Server 2.0, &lt;a href="http://www.vmware.com/downloads/eula.do" target="_blank"&gt;here&lt;/a&gt;.  Install it on either x86 or amd64 box.  Then, add a few lines of configuration to initialize the &lt;a href="http://technet.microsoft.com/en-us/library/dd315338.aspx" target="_blank"&gt;PSSnapin&lt;/a&gt; into your user’s PowerShell profile location:&lt;/p&gt;Add-PSSnapin Vmware.VimAutomation.core&lt;br /&gt;
. "C:\Program Files (x86)\VMware\Infrastructure\VIToolkitForWindows\Scripts\Initialize-VIToolkitEnvironment.ps1"&lt;br /&gt;
&lt;br /&gt;
&lt;p&gt;Fire up PowerShell and you can do the following now&lt;/p&gt;&lt;pre class="csharpcode"&gt;Connect-VIServer -Server &lt;span class="str"&gt;"vmware_host"&lt;/span&gt; -Port 8333
get-vm sqldev2k8 | shutdown-vmguest&lt;/pre&gt;</description><link>http://feedproxy.google.com/~r/AnExchangeDeveloperPerspective/~3/PXkbXi6ak0k/i-like-to-configure-my-vmware-guests-to.html</link><author>noreply@blogger.com (Roman Rozinov)</author><thr:total>0</thr:total><feedburner:origLink>http://romanroz.blogspot.com/2010/03/i-like-to-configure-my-vmware-guests-to.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-2432296471619761237.post-4590667012298263127</guid><pubDate>Wed, 10 Feb 2010 00:29:00 +0000</pubDate><atom:updated>2010-02-09T17:30:06.423-07:00</atom:updated><title>Keeping up with Microsoft</title><description>&lt;p&gt;It seems that Microsoft releases new tools at an alarming rate.  It feels like .Net 3.5 and Silverlight were just recently came to market, now Microsoft is at it again.  Behold that .Net 4.0 and Visual Studio 2010 are just around the corner.  Here is Scott Guthrie’s entry to confirm that, &lt;a href="http://weblogs.asp.net/scottgu/archive/2010/02/08/vs-2010-net-4-release-candidate.aspx" target="_blank"&gt;here&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;From playing with Beta2 of VS 2010, I am highly looking forward to this release. They’ve made great strides at giving state of the art debugging, and visual design capabilities to developers.  &lt;/p&gt;  &lt;p&gt;The Beta2 and RC can both be installed side-by-side, so it’s time to play more with new stuff!!!&lt;/p&gt;</description><link>http://feedproxy.google.com/~r/AnExchangeDeveloperPerspective/~3/m7KXLIqXa1w/keeping-up-with-microsoft.html</link><author>noreply@blogger.com (Roman Rozinov)</author><thr:total>0</thr:total><feedburner:origLink>http://romanroz.blogspot.com/2010/02/keeping-up-with-microsoft.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-2432296471619761237.post-3835991589668239569</guid><pubDate>Thu, 04 Feb 2010 07:35:00 +0000</pubDate><atom:updated>2010-02-04T00:40:13.487-07:00</atom:updated><title>Submitting Xml correctly into SOAP envelope</title><description>&lt;p&gt;Over time, I became a bit comfortable for web services frameworks to take care of the serialization details.  A few days ago, I had to deal with consuming the web service manually and quickly realized that i have not been below trenches in awhile.&lt;/p&gt;  &lt;p&gt;The SOAP service has a string parameter  which is in fact and xml fragment. Initially, I wrote the soap request in the following format:&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;div   style="border: 1px solid silver; margin: 20px 0px 10px; padding: 4px; overflow: auto; text-align: left; line-height: 12pt; background-color: rgb(244, 244, 244); width: 97.5%; direction: ltr; max-height: 200px; cursor: text;font-family:'Courier New',courier,monospace;font-size:8pt;" id="codeSnippetWrapper"&gt;   &lt;div    style="border-style: none; padding: 0px; overflow: visible; text-align: left; line-height: 12pt; background-color: rgb(244, 244, 244); width: 100%; direction: ltr;font-family:'Courier New',courier,monospace;font-size:8pt;color:black;" id="codeSnippet"&gt;     &lt;pre    style="border-style: none; margin: 0em; padding: 0px; overflow: visible; text-align: left; line-height: 12pt; background-color: white; width: 100%; direction: ltr;font-family:'Courier New',courier,monospace;font-size:8pt;color:black;"&gt;&amp;lt;?xml version=&lt;span style="color: rgb(0, 96, 128);"&gt;"1.0"&lt;/span&gt; encoding=&lt;span style="color: rgb(0, 96, 128);"&gt;"utf-8"&lt;/span&gt;?&amp;gt;&lt;/pre&gt;    &lt;pre    style="border-style: none; margin: 0em; padding: 0px; overflow: visible; text-align: left; line-height: 12pt; background-color: rgb(244, 244, 244); width: 100%; direction: ltr;font-family:'Courier New',courier,monospace;font-size:8pt;color:black;"&gt;&amp;lt;soap:Envelope xmlns:xsi=&lt;span style="color: rgb(0, 96, 128);"&gt;"http://www.w3.org/2001/XMLSchema-instance"&lt;/span&gt; xmlns:xsd=&lt;span style="color: rgb(0, 96, 128);"&gt;"http://www.w3.org/2001/XMLSchema"&lt;/span&gt; xmlns:soap=&lt;span style="color: rgb(0, 96, 128);"&gt;"http://schemas.xmlsoap.org/soap/envelope/"&lt;/span&gt;&amp;gt;&lt;/pre&gt;    &lt;pre face="'Courier New',courier,monospace" size="8pt" color="black" style="border-style: none; margin: 0em; padding: 0px; overflow: visible; text-align: left; line-height: 12pt; background-color: white; width: 100%; direction: ltr;"&gt;  &amp;lt;soap:Body&amp;gt;&lt;/pre&gt;    &lt;pre    style="border-style: none; margin: 0em; padding: 0px; overflow: visible; text-align: left; line-height: 12pt; background-color: rgb(244, 244, 244); width: 100%; direction: ltr;font-family:'Courier New',courier,monospace;font-size:8pt;color:black;"&gt;    &amp;lt;PersonalizedHelloWorld xmlns=&lt;span style="color: rgb(0, 96, 128);"&gt;"http://tempuri.org/"&lt;/span&gt;&amp;gt;&lt;/pre&gt;    &lt;pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; text-align: left; line-height: 12pt; background-color: white; width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt;"&gt;      &amp;lt;nameParameter&amp;gt;&amp;lt;name&amp;gt;Roman&amp;lt;/name&amp;gt;&amp;lt;/nameParameter&amp;gt;&lt;/pre&gt;    &lt;pre face="'Courier New',courier,monospace" size="8pt" color="black" style="border-style: none; margin: 0em; padding: 0px; overflow: visible; text-align: left; line-height: 12pt; background-color: rgb(244, 244, 244); width: 100%; direction: ltr;"&gt;    &amp;lt;/PersonalizedHelloWorld&amp;gt;&lt;/pre&gt;    &lt;pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; text-align: left; line-height: 12pt; background-color: white; width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt;"&gt;  &amp;lt;/soap:Body&amp;gt;&lt;/pre&gt;    &lt;pre face="'Courier New',courier,monospace" size="8pt" color="black" style="border-style: none; margin: 0em; padding: 0px; overflow: visible; text-align: left; line-height: 12pt; background-color: rgb(244, 244, 244); width: 100%; direction: ltr;"&gt;&amp;lt;/soap:Envelope&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;/div&gt;&lt;/div&gt;Obviously, there is an issue with doing that. Can you spot it?&lt;br /&gt;&lt;p&gt;Well, you must use &amp;lt;![CDATA[]]&amp;gt; escaping syntax in the nameParameter element text.  So the it should look like this:&lt;/p&gt;&lt;div   style="border: 1px solid silver; margin: 20px 0px 10px; padding: 4px; overflow: auto; text-align: left; line-height: 12pt; background-color: rgb(244, 244, 244); width: 97.5%; direction: ltr; max-height: 200px; cursor: text;font-family:'Courier New',courier,monospace;font-size:8pt;" id="codeSnippetWrapper"&gt;&lt;div    style="border-style: none; padding: 0px; overflow: visible; text-align: left; line-height: 12pt; background-color: rgb(244, 244, 244); width: 100%; direction: ltr;font-family:'Courier New',courier,monospace;font-size:8pt;color:black;" id="codeSnippet"&gt;&lt;pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; text-align: left; line-height: 12pt; background-color: white; width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt;"&gt;&amp;lt;?xml version=&lt;span style="color: rgb(0, 96, 128);"&gt;"1.0"&lt;/span&gt; encoding=&lt;span style="color: rgb(0, 96, 128);"&gt;"utf-8"&lt;/span&gt;?&amp;gt;&lt;/pre&gt;    &lt;pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; text-align: left; line-height: 12pt; background-color: rgb(244, 244, 244); width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt;"&gt;&amp;lt;soap:Envelope xmlns:xsi=&lt;span style="color: rgb(0, 96, 128);"&gt;"http://www.w3.org/2001/XMLSchema-instance"&lt;/span&gt; xmlns:xsd=&lt;span style="color: rgb(0, 96, 128);"&gt;"http://www.w3.org/2001/XMLSchema"&lt;/span&gt; xmlns:soap=&lt;span style="color: rgb(0, 96, 128);"&gt;"http://schemas.xmlsoap.org/soap/envelope/"&lt;/span&gt;&amp;gt;&lt;/pre&gt;    &lt;pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; text-align: left; line-height: 12pt; background-color: white; width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt;"&gt;  &amp;lt;soap:Body&amp;gt;&lt;/pre&gt;    &lt;pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; text-align: left; line-height: 12pt; background-color: rgb(244, 244, 244); width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt;"&gt;    &amp;lt;PersonalizedHelloWorld xmlns=&lt;span style="color: rgb(0, 96, 128);"&gt;"http://tempuri.org/"&lt;/span&gt;&amp;gt;&lt;/pre&gt;    &lt;pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; text-align: left; line-height: 12pt; background-color: white; width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt;"&gt;      &amp;lt;nameParameter&amp;gt;&amp;lt;![CDATA[&amp;lt;name&amp;gt;Roman&amp;lt;/name&amp;gt;]]&amp;gt;&amp;lt;/nameParameter&amp;gt;&lt;/pre&gt;    &lt;pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; text-align: left; line-height: 12pt; background-color: rgb(244, 244, 244); width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt;"&gt;    &amp;lt;/PersonalizedHelloWorld&amp;gt;&lt;/pre&gt;    &lt;pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; text-align: left; line-height: 12pt; background-color: white; width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt;"&gt;  &amp;lt;/soap:Body&amp;gt;&lt;/pre&gt;    &lt;pre style="border-style: none; margin: 0em; padding: 0px; overflow: visible; text-align: left; line-height: 12pt; background-color: rgb(244, 244, 244); width: 100%; font-family: 'Courier New',courier,monospace; direction: ltr; color: black; font-size: 8pt;"&gt;&amp;lt;/soap:Envelope&lt;/pre&gt;&lt;!--CRLF--&gt;&lt;/div&gt;&lt;/div&gt;</description><link>http://feedproxy.google.com/~r/AnExchangeDeveloperPerspective/~3/mJ10xbbn2-U/submitting-xml-correctly-into-soap.html</link><author>noreply@blogger.com (Roman Rozinov)</author><thr:total>0</thr:total><feedburner:origLink>http://romanroz.blogspot.com/2010/02/submitting-xml-correctly-into-soap.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-2432296471619761237.post-1447124667784876875</guid><pubDate>Wed, 13 Jan 2010 03:00:00 +0000</pubDate><atom:updated>2010-01-12T20:00:00.123-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Development</category><category domain="http://www.blogger.com/atom/ns#">Asp.Net</category><category domain="http://www.blogger.com/atom/ns#">WebForms</category><title>Asp.Net Intrinsic properties</title><description>&lt;p&gt;By default the &lt;a href="http://social.msdn.microsoft.com/Search/en-US?query=System.Web.UI.Page&amp;amp;ac=3" target="_blank"&gt;System.Web.UI.Page&lt;/a&gt; exposes Session, Request, and Response properties.&amp;#160; However often you may want to access these properties outside of the Page context. The easiest way to do it is to use HttpContext.Current static property to obtain the current request’s HttpContext.&amp;#160; Thus, you can obtain a session variable like this:&lt;/p&gt;  &lt;div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper"&gt;   &lt;div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;     &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;HttpContext.Current.Session[“userid”].&lt;/pre&gt;&lt;br /&gt;&lt;!--CRLF--&gt;&lt;/div&gt;&lt;br /&gt;&lt;/div&gt;  </description><link>http://feedproxy.google.com/~r/AnExchangeDeveloperPerspective/~3/-xJMU4AoG3A/aspnet-intrinsic-properties.html</link><author>noreply@blogger.com (Roman Rozinov)</author><thr:total>0</thr:total><feedburner:origLink>http://romanroz.blogspot.com/2010/01/aspnet-intrinsic-properties.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-2432296471619761237.post-952641593905656511</guid><pubDate>Tue, 12 Jan 2010 07:56:00 +0000</pubDate><atom:updated>2010-01-12T00:58:52.378-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Codeplex</category><title>Vote for two important CodePlex features</title><description>&lt;p&gt;Eric Hexter, from MvcContrib project, has just asked the community to go and vote for a few issues with CodePlex.  Here is his blog for reference, &lt;a title="http://www.lostechies.com/blogs/hex/archive/2010/01/11/a-call-for-help-vote-for-my-codeplex-issues.aspx" href="http://www.lostechies.com/blogs/hex/archive/2010/01/11/a-call-for-help-vote-for-my-codeplex-issues.aspx"&gt;http://www.lostechies.com/blogs/hex/archive/2010/01/11/a-call-for-help-vote-for-my-codeplex-issues.aspx&lt;/a&gt;.   Go Vote!&lt;/p&gt;</description><link>http://feedproxy.google.com/~r/AnExchangeDeveloperPerspective/~3/VeXknSK2DpU/vote-for-two-important-codeplex.html</link><author>noreply@blogger.com (Roman Rozinov)</author><thr:total>0</thr:total><feedburner:origLink>http://romanroz.blogspot.com/2010/01/vote-for-two-important-codeplex.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-2432296471619761237.post-5737785314696232593</guid><pubDate>Tue, 17 Nov 2009 06:53:00 +0000</pubDate><atom:updated>2009-11-16T23:53:08.365-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Administration</category><category domain="http://www.blogger.com/atom/ns#">PowerShell</category><title>Windows Management Framework was released!</title><description>&lt;p&gt;I always like playing with management tools for windows since dos days.&amp;#160; I think the release of &lt;a href="http://support.microsoft.com/kb/968929"&gt;Windows Management Framework&lt;/a&gt; at the end of October is truly the next step in Microsoft console/command-line tooling revolution.&amp;#160; Thank you, &lt;a href="http://www.microsoft.com/presspass/exec/de/snover/default.mspx"&gt;Jeffrey Snover&lt;/a&gt;.&lt;/p&gt;  </description><link>http://feedproxy.google.com/~r/AnExchangeDeveloperPerspective/~3/siLSAWFuFoo/windows-management-framework-was.html</link><author>noreply@blogger.com (Roman Rozinov)</author><thr:total>0</thr:total><feedburner:origLink>http://romanroz.blogspot.com/2009/11/windows-management-framework-was.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-2432296471619761237.post-2237831115697015473</guid><pubDate>Fri, 30 Oct 2009 05:03:00 +0000</pubDate><atom:updated>2009-10-29T22:07:30.169-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">security</category><category domain="http://www.blogger.com/atom/ns#">web</category><title>Web Goat – Interesting way to learn security on the Web.</title><description>&lt;p&gt;As I deal more and more with web in my daily life, I realized that web security is a very intricate subject and tough to learn as well. The next iteration of &lt;a href="http://www.desertcodecamp.com/default.aspx"&gt;CodeCamp&lt;/a&gt; is in town in a week, so I will have a chance to check out &lt;a href="http://www.owasp.org/index.php/Category:OWASP_WebGoat_Project"&gt;Web Goat&lt;/a&gt;. Due to time constraints, I wont be able to research beforehand, so it’s exciting to learn about something completely new.&lt;/p&gt;</description><link>http://feedproxy.google.com/~r/AnExchangeDeveloperPerspective/~3/a2GpiH6Otdc/web-goat-interesting-way-to-learn.html</link><author>noreply@blogger.com (Roman Rozinov)</author><thr:total>0</thr:total><feedburner:origLink>http://romanroz.blogspot.com/2009/10/web-goat-interesting-way-to-learn.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-2432296471619761237.post-5211735015566977219</guid><pubDate>Tue, 26 May 2009 03:19:00 +0000</pubDate><atom:updated>2009-05-25T20:20:41.144-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Development</category><category domain="http://www.blogger.com/atom/ns#">tsql</category><title>Viewing temp table structure</title><description>&lt;p&gt;For some reason I can never remember to properly retrieve connection specific temporary table’s structure, i.e. #tempCustomers. Due to the fact that the table resides in tempdb, this is the format required: &lt;/p&gt;&lt;pre style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; DIRECTION: ltr; BORDER-TOP-STYLE: none; BORDER-LEFT-STYLE: none; OVERFLOW: visiblefont-size:8pt;color:black;" id="codeSnippet"  &gt;&lt;span style="color:#0000ff;"&gt;use&lt;/span&gt; tempdb&lt;br /&gt;&lt;span style="color:#0000ff;"&gt;exec&lt;/span&gt; sp_help #tempCustomers&lt;/pre&gt;Highlight these two lines in Management studio and press F5!</description><link>http://feedproxy.google.com/~r/AnExchangeDeveloperPerspective/~3/_c7-vrKyOI0/viewing-temp-table-structure.html</link><author>noreply@blogger.com (Roman Rozinov)</author><thr:total>0</thr:total><feedburner:origLink>http://romanroz.blogspot.com/2009/05/viewing-temp-table-structure.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-2432296471619761237.post-8855168921942964156</guid><pubDate>Fri, 08 May 2009 07:52:00 +0000</pubDate><atom:updated>2009-05-08T00:56:46.561-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Development</category><category domain="http://www.blogger.com/atom/ns#">Best Practice</category><title>Virtual Function Calls from Constructors/Finalizers …  Bad Idea!</title><description>&lt;p&gt;So I am skimming over this book, &lt;strong&gt;&lt;a href="http://www.amazon.com/Framework-Design-Guidelines-Conventions-Development/dp/0321246756"&gt;Framework Design Guidelines&lt;/a&gt; &lt;/strong&gt;by Krzysztof Cwalina and Brad Abrams&lt;strong&gt;,&lt;/strong&gt; when authors note to “avoid calling virtual members on an object inside its constructor”. At first a developer might not think about the danger but it does make sense with a quick example that authors provide.&lt;/p&gt;&lt;p&gt;Here is another one i cooked up:&lt;/p&gt;&lt;pre style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; DIRECTION: ltr; BORDER-TOP-STYLE: none; BORDER-LEFT-STYLE: none; OVERFLOW: visiblefont-size:8pt;color:black;" id="codeSnippet"  &gt;&lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;class&lt;/span&gt; Trans {&lt;br /&gt;    &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;abstract&lt;/span&gt; Log();&lt;br /&gt;    &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; Trans() {&lt;br /&gt;        Log(...);&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;class&lt;/span&gt; SomeTrans:Trans {&lt;br /&gt;    &lt;span style="color:#0000ff;"&gt;private&lt;/span&gt; Logger logger;&lt;br /&gt;    &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; SomeTrans() {&lt;br /&gt;        logger = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; Logger();&lt;br /&gt;    }&lt;br /&gt;    &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;override&lt;/span&gt; Log(...) {&lt;br /&gt;        &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt; (logger == &lt;span style="color:#0000ff;"&gt;null&lt;/span&gt;)&lt;br /&gt;            Console.Write(&lt;span style="color:#006080;"&gt;"Oops!"&lt;/span&gt;);&lt;br /&gt;        &lt;span style="color:#0000ff;"&gt;else&lt;/span&gt;&lt;br /&gt;            logger.write(...);&lt;br /&gt;    }&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;Using the base class to execute common code that all derived classes will might seem like a good idea but here the Trans constructor calls the derived type’s Log method before SomeTrans constructor is called. Compiler is unable to detect this danger because binding happens at run-time so be very aware.&lt;br /&gt;&lt;br /&gt;The rule of thumb is to never do that!&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Also note, C++ behaves differently as it does not allow a virtual traversal because at base construction time the object type is Trans.&lt;/p&gt;</description><link>http://feedproxy.google.com/~r/AnExchangeDeveloperPerspective/~3/pNw1RL4AUOo/virtual-function-calls-from.html</link><author>noreply@blogger.com (Roman Rozinov)</author><thr:total>0</thr:total><feedburner:origLink>http://romanroz.blogspot.com/2009/05/virtual-function-calls-from.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-2432296471619761237.post-7629469073641939380</guid><pubDate>Wed, 01 Apr 2009 07:33:00 +0000</pubDate><atom:updated>2009-04-01T00:37:08.506-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Administration</category><category domain="http://www.blogger.com/atom/ns#">IIS7</category><title>Managing IIS7 SSL settings without SSL binding</title><description>&lt;p&gt;&amp;#160;&amp;#160;&amp;#160; I was messing around with IIS7 site settings and ran into the error when I tried to disable SSL requirement for access.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_8VjGVbkLmkk/SdMYzKSPyfI/AAAAAAAAAD0/qXkU9_MVTxY/s1600-h/InvalidSSLSettings%5B3%5D.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="InvalidSSLSettings" border="0" alt="InvalidSSLSettings" src="http://lh3.ggpht.com/_8VjGVbkLmkk/SdMYzwX8QuI/AAAAAAAAAD4/VAHFX-0xQdg/InvalidSSLSettings_thumb%5B1%5D.png?imgmax=800" width="285" height="130" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;It appears IIS does not allow you SSL settings modifications if&amp;#160; HTTPS binding was already removed.&lt;/p&gt;  &lt;p&gt;Make sure you have &lt;strong&gt;Binding&lt;/strong&gt; like this:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/_8VjGVbkLmkk/SdMY0c1tBMI/AAAAAAAAAD8/cRiyrZUlmrQ/s1600-h/IIS7_https_binding%5B2%5D.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="IIS7_https_binding" border="0" alt="IIS7_https_binding" src="http://lh6.ggpht.com/_8VjGVbkLmkk/SdMY01Ezt6I/AAAAAAAAAEA/mZzxEDZrXU4/IIS7_https_binding_thumb.png?imgmax=800" width="244" height="103" /&gt;&lt;/a&gt;&lt;/p&gt;  </description><link>http://feedproxy.google.com/~r/AnExchangeDeveloperPerspective/~3/IyUmqlTi8VM/managing-iis7-ssl-settings-without-ssl.html</link><author>noreply@blogger.com (Roman Rozinov)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh3.ggpht.com/_8VjGVbkLmkk/SdMYzwX8QuI/AAAAAAAAAD4/VAHFX-0xQdg/s72-c/InvalidSSLSettings_thumb%5B1%5D.png?imgmax=800" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://romanroz.blogspot.com/2009/04/managing-iis7-ssl-settings-without-ssl.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-2432296471619761237.post-3269834654779629852</guid><pubDate>Wed, 14 Jan 2009 01:38:00 +0000</pubDate><atom:updated>2009-01-13T18:39:55.055-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">UnitTesting</category><category domain="http://www.blogger.com/atom/ns#">Development</category><category domain="http://www.blogger.com/atom/ns#">Testing</category><title>TypeMock Isolator 2.5 w/ VB.Net support</title><description>&lt;p&gt;&lt;a href="http://www.typemock.com/vbpage.php?utm_source=vbp&amp;amp;utm_medium=typeblog&amp;amp;utm_campaign=isolatorvb"&gt;&lt;span style="font-size:85%;"&gt;Programming Visual Basic&lt;/span&gt;&lt;/a&gt;&lt;span style="font-size:85%;"&gt; applications?&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:85%;"&gt;Typemock have released a new version of their &lt;/span&gt;&lt;a href="http://www.typemock.com/?utm_source=hp&amp;amp;utm_medium=typeblog&amp;amp;utm_campaign=isolatorvb"&gt;&lt;span style="font-size:85%;"&gt;unit testing&lt;/span&gt;&lt;/a&gt;&lt;span style="font-size:85%;"&gt; tool, Typemock Isolator 5.2.&lt;br /&gt;This version includes a new friendly &lt;/span&gt;&lt;a href="http://www.typemock.com/vbpage.php?utm_source=vbp&amp;amp;utm_medium=typeblog&amp;amp;utm_campaign=isolatorvb"&gt;&lt;span style="font-size:85%;"&gt;VB.NET &lt;/span&gt;&lt;/a&gt;&lt;span style="font-size:85%;"&gt;API which makes Isolator the best Isolation tool for &lt;/span&gt;&lt;a href="http://www.typemock.com/vbpage.php?utm_source=vbp&amp;amp;utm_medium=typeblog&amp;amp;utm_campaign=isolatorvb"&gt;&lt;span style="font-size:85%;"&gt;unit testing A Visual Basic (VB) .NET application&lt;/span&gt;&lt;/a&gt;&lt;span style="font-size:85%;"&gt;.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:85%;"&gt;Isolator now allows unit testing in VB or C# for many ‘hard to test’ technologies such as &lt;/span&gt;&lt;a href="http://typemock.com/sharepointpage.php?utm_source=spp&amp;amp;utm_medium=typeblog&amp;amp;utm_campaign=isolatorvb"&gt;&lt;span style="font-size:85%;"&gt;SharePoint&lt;/span&gt;&lt;/a&gt;&lt;span style="font-size:85%;"&gt;, ASP.NET MVC, partial support for Silverlight, WPF, LINQ, WF, Entity Framework, &lt;/span&gt;&lt;a href="http://www.typemock.com/wcfpage.php?utm_source=wcfp&amp;amp;utm_medium=typeblog&amp;amp;utm_campaign=isolatorvb"&gt;&lt;span style="font-size:85%;"&gt;WCF unit testing&lt;/span&gt;&lt;/a&gt;&lt;span style="font-size:85%;"&gt; and more.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:85%;"&gt;Note that the first 25 bloggers who blog this text in their blog and tell us about it, will get a &lt;strong&gt;Free Full Isolator license&lt;/strong&gt; (worth $139). If you post this in a &lt;strong&gt;VB.NET dedicated blog&lt;/strong&gt;, you'll get a license automatically (even if more than 25 submit) during the first week of this announcement.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:85%;"&gt;Go ahead, click the following link for &lt;/span&gt;&lt;a href="http://blog.typemock.com/2009/01/get-free-isolator-licnese-for-helping.html?utm_source=vb_blog&amp;amp;utm_medium=typeblog&amp;amp;utm_campaign=isolatorvbblog"&gt;&lt;span style="font-size:85%;"&gt;more information &lt;/span&gt;&lt;/a&gt;&lt;span style="font-size:85%;"&gt;on how to get your free license.&lt;/span&gt;&lt;/p&gt;</description><link>http://feedproxy.google.com/~r/AnExchangeDeveloperPerspective/~3/fWtxMK38YAU/typemock-isolator-25-w-vbnet-support.html</link><author>noreply@blogger.com (Roman Rozinov)</author><thr:total>0</thr:total><feedburner:origLink>http://romanroz.blogspot.com/2009/01/typemock-isolator-25-w-vbnet-support.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-2432296471619761237.post-4717585617215362177</guid><pubDate>Tue, 23 Dec 2008 01:31:00 +0000</pubDate><atom:updated>2008-12-22T18:41:17.109-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Recipient Administration</category><category domain="http://www.blogger.com/atom/ns#">Exchange 2007</category><category domain="http://www.blogger.com/atom/ns#">PowerShell</category><title>Converting Mail-Enabled recipient to Mailbox-Enabled recipient</title><description>&lt;p&gt;&amp;#160;&amp;#160;&amp;#160; Out of the box, MS Exchange 2003/2007 do not offer any kind of way converting a mail-enabled recipient (MEU) into a mailbox-enabled recpieint (MBXU).&amp;#160; At first, you would think that scenario is least likely. Mail-enabled recipients forward to outside of exchange organization and why would you create a mailbox.&amp;#160; Well, in complex environments where organization has multiple email systems and a user wants to migrate to exchange but already utilizes AD, or if your organization is going through a complex migration.&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160; To convert an MEU into MBXU, we could just strip the AD object of exchange attributes and then ask exchange to create a mailbox.&amp;#160; However, you will notice that there might be side effects. Any secondary emails that might be attached to the MEU are now gone.&amp;#160; Secondly, a less trivial issue, is that repliability of emails which contain MEU address book entry is now broken. To fix these both, you’ll need to track secondary emails and legacyExchangeDn of the MEU and append them to proxyAddresses attribute when MBXU is created.&lt;/p&gt; &lt;br /&gt;&lt;style type="text/css"&gt;&lt;br /&gt;.csharpcode, .csharpcode pre&lt;br /&gt;{&lt;br /&gt; font-size: small;&lt;br /&gt; color: black;&lt;br /&gt; font-family: consolas, "Courier New", courier, monospace;&lt;br /&gt; background-color: #ffffff;&lt;br /&gt; /*white-space: pre;*/&lt;br /&gt;}&lt;br /&gt;.csharpcode pre { margin: 0em; }&lt;br /&gt;.csharpcode .rem { color: #008000; }&lt;br /&gt;.csharpcode .kwrd { color: #0000ff; }&lt;br /&gt;.csharpcode .str { color: #006080; }&lt;br /&gt;.csharpcode .op { color: #0000c0; }&lt;br /&gt;.csharpcode .preproc { color: #cc6633; }&lt;br /&gt;.csharpcode .asp { background-color: #ffff00; }&lt;br /&gt;.csharpcode .html { color: #800000; }&lt;br /&gt;.csharpcode .attr { color: #ff0000; }&lt;br /&gt;.csharpcode .alt &lt;br /&gt;{&lt;br /&gt; background-color: #f4f4f4;&lt;br /&gt; width: 100%;&lt;br /&gt; margin: 0em;&lt;br /&gt;}&lt;br /&gt;.csharpcode .lnum { color: #606060; }&lt;/style&gt;  &lt;pre class="csharpcode"&gt;$userIdentity = &lt;span class="str"&gt;'testuser'&lt;/span&gt;&lt;br /&gt;$mailboxDatabase = exserver\mbxdb&lt;span class="str"&gt;'&lt;br /&gt;$err = @()&lt;br /&gt;$user = Get-MailUser -Identity $userIdentity `&lt;br /&gt;         -ErrorAction SilentlyContinue -ErrorVariable +err&lt;br /&gt;if ($err.count -ne 0)&lt;br /&gt;{&lt;br /&gt;    Write-Error '&lt;/span&gt;The user is not a mail-enabled user.'&lt;br /&gt;    &lt;span class="kwrd"&gt;return&lt;/span&gt;;&lt;br /&gt;}&lt;br /&gt;$mbxDB = Get-MailboxDatabase -Identity $mailboxDatabase `&lt;br /&gt;        -ErrorAction SilentlyContinue -ErrorVariable +err&lt;br /&gt;&lt;span class="kwrd"&gt;if&lt;/span&gt; ($err.count &lt;span class="preproc"&gt;-ne&lt;/span&gt; 0)&lt;br /&gt;{&lt;br /&gt;    Write-Error &lt;span class="str"&gt;&amp;quot;The database value is incorrect.&amp;quot;&lt;/span&gt;&lt;br /&gt;    &lt;span class="kwrd"&gt;return&lt;/span&gt;;&lt;br /&gt;}&lt;br /&gt;$extAddress = $user.ExternalEmailAddress&lt;br /&gt;$currAddresses = $user.EmailAddresses&lt;br /&gt;$legDn = $user.LegacyExchangeDn&lt;br /&gt;Disable-MailUser $user -Confirm:$false | Out-Null&lt;br /&gt;$mbxUser = Enable-Mailbox $user -Confirm:$false `&lt;br /&gt;                       -Database $mailboxDatabase &lt;br /&gt;$addresses = $mbxUser.EmailAddresses&lt;br /&gt;&lt;span class="kwrd"&gt;if&lt;/span&gt; ($mbxUser.LegacyExchangeDn &lt;span class="preproc"&gt;-ne&lt;/span&gt; $legDn) {&lt;br /&gt;    $addresses.add(&lt;span class="str"&gt;&amp;quot;X500:$legDn&amp;quot;&lt;/span&gt;)&lt;br /&gt;}&lt;br /&gt;$currAddresses | ?{ $_ &lt;span class="preproc"&gt;-ne&lt;/span&gt; $extAddress } | %{&lt;br /&gt;    &lt;span class="kwrd"&gt;if&lt;/span&gt; ( -not $addresses.Contains($_)) {&lt;br /&gt;        $addresses.Add($_) | Out-Null&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;span class="kwrd"&gt;if&lt;/span&gt; ($addresses.Changed) {&lt;br /&gt;    Set-mailbox $mbxUser `&lt;br /&gt;                -EmailAddresses $addresses | Out-Null&lt;br /&gt;}&lt;/pre&gt;</description><link>http://feedproxy.google.com/~r/AnExchangeDeveloperPerspective/~3/4n3wS1ViY7g/converting-mail-enabled-recipient-to.html</link><author>noreply@blogger.com (Roman Rozinov)</author><thr:total>4</thr:total><feedburner:origLink>http://romanroz.blogspot.com/2008/12/converting-mail-enabled-recipient-to.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-2432296471619761237.post-7522682924803294491</guid><pubDate>Thu, 18 Dec 2008 23:10:00 +0000</pubDate><atom:updated>2008-12-18T16:31:22.282-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Concurrency</category><category domain="http://www.blogger.com/atom/ns#">Development</category><title>C# Events and thread-safety</title><description>&lt;style type="text/css"&gt;&lt;br /&gt;.csharpcode, .csharpcode pre&lt;br /&gt;{&lt;br /&gt; font-size: small;&lt;br /&gt; color: black;&lt;br /&gt; font-family: consolas, "Courier New", courier, monospace;&lt;br /&gt; background-color: #ffffff;&lt;br /&gt; /*white-space: pre;*/&lt;br /&gt;}&lt;br /&gt;.csharpcode pre { margin: 0em; }&lt;br /&gt;.csharpcode .rem { color: #008000; }&lt;br /&gt;.csharpcode .kwrd { color: #0000ff; }&lt;br /&gt;.csharpcode .str { color: #006080; }&lt;br /&gt;.csharpcode .op { color: #0000c0; }&lt;br /&gt;.csharpcode .preproc { color: #cc6633; }&lt;br /&gt;.csharpcode .asp { background-color: #ffff00; }&lt;br /&gt;.csharpcode .html { color: #800000; }&lt;br /&gt;.csharpcode .attr { color: #ff0000; }&lt;br /&gt;.csharpcode .alt &lt;br /&gt;{&lt;br /&gt; background-color: #f4f4f4;&lt;br /&gt; width: 100%;&lt;br /&gt; margin: 0em;&lt;br /&gt;}&lt;br /&gt;.csharpcode .lnum { color: #606060; }&lt;/style&gt;&lt;br /&gt;&lt;p&gt;After reading “C# Programming Language”, which is more or less a dictionary of C# language features, I noticed that the spec claims thread-safety in event default accessors.&lt;/p&gt;  &lt;p&gt;So code defined like this:&lt;/p&gt;  &lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;event&lt;/span&gt; SomeEvent;&lt;/pre&gt;compiled into something roughly as this:&lt;br /&gt;&lt;div class="csharpcode"&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;&lt;span class="kwrd"&gt;private&lt;/span&gt; EventHandler __SomeEvent;&lt;/pre&gt;  &lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;event&lt;/span&gt; SomeEvent {&lt;/pre&gt;  &lt;pre&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;    add { &lt;span class="kwrd"&gt;lock&lt;/span&gt;(&lt;span class="kwrd"&gt;this&lt;/span&gt;) { __SomeEvent += &lt;span class="kwrd"&gt;value&lt;/span&gt;; }}&lt;/pre&gt;  &lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;    remove { &lt;span class="kwrd"&gt;lock&lt;/span&gt;(&lt;span class="kwrd"&gt;this&lt;/span&gt;) { __SomeEvent -= &lt;span class="kwrd"&gt;value&lt;/span&gt;; }}&lt;/pre&gt;  &lt;pre&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;}&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Actually, add and remove keywords are translated as add_SomeEvent and remove_SomeEvent methods with [MethodImpl(MethodImplOptions.Synchronized)] attributes and thus equivalent to lock(this) shown above.&lt;/p&gt;&lt;p&gt;However, There is a problem here to achieve thread-safety.  Using [MethodImpl(..)] is a bad practice b/c your code is trying to enter a monitor for this object instance.  Thus, if another thread of execution obtains the monitor first, your subsequent call to  “+=” or “-=” will block and will be hard to troubleshoot.&lt;/p&gt;&lt;p&gt;Instead consider this pattern where you implement custom accessors locking on a private object and give caller to invoke event safely through a method:&lt;/p&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;object&lt;/span&gt; l_SomeEvent;&lt;br /&gt;&lt;span class="kwrd"&gt;private&lt;/span&gt; EventHandler __SomeEvent;&lt;br /&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;event&lt;/span&gt; SomeEvent {&lt;br /&gt; add { &lt;span class="kwrd"&gt;lock&lt;/span&gt;(l_SomeEvent) { __SomeEvent += &lt;span class="kwrd"&gt;value&lt;/span&gt;; }}&lt;br /&gt; remove { &lt;span class="kwrd"&gt;lock&lt;/span&gt;(l_SomeEvent) { __SomeEvent -= &lt;span class="kwrd"&gt;value&lt;/span&gt;; }}&lt;br /&gt;}&lt;br /&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; OnSomeEvent(EventArgs e) {&lt;br /&gt; EventHandler temp;&lt;br /&gt; &lt;span class="kwrd"&gt;lock&lt;/span&gt;(l_SomeEvent) { temp = __SomeEvent; }&lt;br /&gt; &lt;span class="kwrd"&gt;if&lt;/span&gt; (temp != &lt;span class="kwrd"&gt;null&lt;/span&gt;) { __SomeEvent(&lt;span class="kwrd"&gt;this&lt;/span&gt;,e); }&lt;br /&gt;}&lt;/pre&gt;</description><link>http://feedproxy.google.com/~r/AnExchangeDeveloperPerspective/~3/zTeZCf1xMiI/c-events-and-thread-safety.html</link><author>noreply@blogger.com (Roman Rozinov)</author><thr:total>0</thr:total><feedburner:origLink>http://romanroz.blogspot.com/2008/12/c-events-and-thread-safety.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-2432296471619761237.post-829324590101461049</guid><pubDate>Tue, 25 Nov 2008 21:53:00 +0000</pubDate><atom:updated>2008-11-25T14:59:46.387-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Exchange Management</category><title>Using Export-Mailbox CmdLet to export to PST file</title><description>&lt;p&gt;&lt;span style="font-size:78%;"&gt;In order to export mail to a PST file, EMS requires an Outlook MAPI to be present. Otherwise,&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://lh6.ggpht.com/_8VjGVbkLmkk/SSxz2S1c_AI/AAAAAAAAACs/MdOH_XibXpk/s1600-h/11-17-2008_Error_ExportMailboxNot64bitCapable%5B3%5D.png"&gt;&lt;span style="font-size:78%;"&gt;&lt;img style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height="34" alt="11-17-2008_Error_ExportMailboxNot64bitCapable" src="http://lh5.ggpht.com/_8VjGVbkLmkk/SSxz2lzqX2I/AAAAAAAAACw/SYg886lG9OU/11-17-2008_Error_ExportMailboxNot64bitCapable_thumb%5B1%5D.png?imgmax=800" width="268" border="0" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;span style="font-size:78%;"&gt; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:78%;"&gt;That means you must use 32-bit version of the Exchange Management Tools on an Outlook-installed workstation because 64bit EMS process cannot load 32-bit MAPI subsystem.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:78%;"&gt;Thus, I quickly ran through a Vista 32bit set up steps.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:78%;"&gt;1. Install Outlook&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:78%;"&gt;2. Install IIS Requirements&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://lh6.ggpht.com/_8VjGVbkLmkk/SSxz26-unrI/AAAAAAAAAC0/fDQtPvJBc6g/s1600-h/11-19-2008-IIS_Options_Ex2k7MgmtTools%5B2%5D.png"&gt;&lt;span style="font-size:78%;"&gt;&lt;img style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height="214" alt="11-19-2008-IIS_Options_Ex2k7MgmtTools" src="http://lh5.ggpht.com/_8VjGVbkLmkk/SSxz3aR7AbI/AAAAAAAAAC4/kN9fQAT7FIU/11-19-2008-IIS_Options_Ex2k7MgmtTools_thumb.png?imgmax=800" width="244" border="0" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;span style="font-size:78%;"&gt; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:78%;"&gt;3. Install 32bit Exchange Management Tools, &lt;/span&gt;&lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=6be38633-7248-4532-929b-76e9c677e802&amp;amp;displaylang=en"&gt;&lt;span style="font-size:78%;"&gt;here&lt;/span&gt;&lt;/a&gt;&lt;span style="font-size:78%;"&gt;.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:78%;"&gt;Done!&lt;/span&gt;&lt;/p&gt;</description><link>http://feedproxy.google.com/~r/AnExchangeDeveloperPerspective/~3/csuEkcDDmJA/using-export-mailbox-cmdlet-to-export.html</link><author>noreply@blogger.com (Roman Rozinov)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh5.ggpht.com/_8VjGVbkLmkk/SSxz2lzqX2I/AAAAAAAAACw/SYg886lG9OU/s72-c/11-17-2008_Error_ExportMailboxNot64bitCapable_thumb%5B1%5D.png?imgmax=800" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://romanroz.blogspot.com/2008/11/using-export-mailbox-cmdlet-to-export.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-2432296471619761237.post-6976505015185477069</guid><pubDate>Fri, 17 Oct 2008 21:55:00 +0000</pubDate><atom:updated>2008-10-17T14:55:45.800-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Development</category><category domain="http://www.blogger.com/atom/ns#">Testing</category><title>New Drop of Gallio 3.0.4 is out</title><description>&lt;p&gt;&lt;font face="ar" color="#474b4e" size="1"&gt;New drop of Gallio is up and ready. It has a number of feature improvements, discussed at &lt;a href="http://blog.bits-in-motion.com/2008/10/announcing-gallio-and-mbunit-v304.html"&gt;here&lt;/a&gt;. My main concern is R# 4.1 integration.      &lt;br /&gt;Download it now at &lt;a href="http://www.gallio.org/Downloads.aspx"&gt;here&lt;/a&gt;.&lt;/font&gt;&lt;/p&gt;  </description><link>http://feedproxy.google.com/~r/AnExchangeDeveloperPerspective/~3/fJpZzt7VGHA/new-drop-of-gallio-304-is-out.html</link><author>noreply@blogger.com (Roman Rozinov)</author><thr:total>0</thr:total><feedburner:origLink>http://romanroz.blogspot.com/2008/10/new-drop-of-gallio-304-is-out.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-2432296471619761237.post-1183715015704044081</guid><pubDate>Tue, 22 Jul 2008 18:08:00 +0000</pubDate><atom:updated>2008-07-22T11:24:54.523-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">PowerShell</category><category domain="http://www.blogger.com/atom/ns#">Active Directory</category><title>Working with Active Directory Dates</title><description>&lt;span style="font-size:85%;"&gt;Recently, my friend and colleague asked me about how to limit an ldap search to only return objects that were created after a certain date.  '&lt;span style="font-style: italic;"&gt;whenCreated'&lt;/span&gt; should be a logical choice to solve that.  However, this attribute has an interesting format,  see this &lt;a href="http://www.microsoft.com/technet/scriptcenter/resources/qanda/aug07/hey0802.mspx"&gt;reference&lt;/a&gt;.  So, i marked up a few functions to help us work with the date naturally within Powershell.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:monospace;font-size:85%;"&gt;&lt;pre&gt;&lt;!--  Code highlighting produced by Actipro SyntaxEditor http://www.ActiproSoftware.com/Products/DotNet/  --&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;function&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span style="color: rgb(95, 158, 160);"&gt;ConvertToAdDate&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;([&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;DateTime&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;]&lt;/span&gt;&lt;span style="color: rgb(128, 0, 128);"&gt;$date&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;) {&lt;br /&gt;   &lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;{0:0000}{1:00}{2:00}{3:00}{4:00}{5:00}.0Z&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;-f&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span style="color: rgb(128, 0, 128);"&gt;$date&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;.year,&lt;/span&gt;&lt;span style="color: rgb(128, 0, 128);"&gt;$date&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;.month, &lt;/span&gt;&lt;span style="color: rgb(95, 158, 160); font-weight: bold;"&gt;`&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;           &lt;/span&gt;&lt;span style="color: rgb(128, 0, 128);"&gt;$date&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;.day, &lt;/span&gt;&lt;span style="color: rgb(128, 0, 128);"&gt;$date&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;.Hour, &lt;/span&gt;&lt;span style="color: rgb(128, 0, 128);"&gt;$date&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;.Minute, &lt;/span&gt;&lt;span style="color: rgb(128, 0, 128);"&gt;$date&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;.Second&lt;br /&gt;}&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;function&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span style="color: rgb(95, 158, 160);"&gt;ConvertFromAdDate&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;([&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;String&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;] &lt;/span&gt;&lt;span style="color: rgb(128, 0, 128);"&gt;$date&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;) {&lt;br /&gt;   &lt;/span&gt;&lt;span style="color: rgb(128, 0, 128);"&gt;$pattern&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span style="color: rgb(95, 158, 160); font-weight: bold;"&gt;`&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;      &lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;'&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;^(?&amp;lt;year&amp;gt;\d{4})(?&amp;lt;month&amp;gt;\d{2})(?&amp;lt;day&amp;gt;\d{2})(?&amp;lt;hrs&amp;gt;\d{2})`&lt;br /&gt;              (?&amp;lt;min&amp;gt;\d{2})(?&amp;lt;sec&amp;gt;\d{2})\.0Z$&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;'&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;   &lt;/span&gt;&lt;span style="color: rgb(128, 0, 128);"&gt;$match&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; [&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;regex&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;]::&lt;/span&gt;&lt;span style="color: rgb(139, 69, 19);"&gt;Match&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(128, 0, 128);"&gt;$date&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;,&lt;/span&gt;&lt;span style="color: rgb(128, 0, 128);"&gt;$pattern&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;)&lt;br /&gt;   &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;if&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; (&lt;/span&gt;&lt;span style="color: rgb(128, 0, 128);"&gt;$match&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;.success) {&lt;br /&gt;       &lt;/span&gt;&lt;span style="color: rgb(128, 0, 128);"&gt;$result&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span style="color: rgb(95, 158, 160); font-weight: bold;"&gt;New-Object&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;System.DateTime&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(128, 0, 128);"&gt;$match&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;.groups[&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;year&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;].value,&lt;/span&gt;&lt;span style="color: rgb(95, 158, 160); font-weight: bold;"&gt;`&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;           &lt;/span&gt;&lt;span style="color: rgb(128, 0, 128);"&gt;$match&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;.groups[&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;month&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;].value,&lt;/span&gt;&lt;span style="color: rgb(128, 0, 128);"&gt;$match&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;.groups[&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;day&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;].value,&lt;/span&gt;&lt;span style="color: rgb(95, 158, 160); font-weight: bold;"&gt;`&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;           &lt;/span&gt;&lt;span style="color: rgb(128, 0, 128);"&gt;$match&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;.groups[&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;hrs&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;].value,&lt;/span&gt;&lt;span style="color: rgb(128, 0, 128);"&gt;$match&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;.groups[&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;min&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;].value, &lt;/span&gt;&lt;span style="color: rgb(95, 158, 160); font-weight: bold;"&gt;`&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;           &lt;/span&gt;&lt;span style="color: rgb(128, 0, 128);"&gt;$match&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;.groups[&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;sec&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;].value,[&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;DateTimeKind&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;]::&lt;/span&gt;&lt;span style="color: rgb(139, 69, 19);"&gt;Utc&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;)&lt;br /&gt;       &lt;/span&gt;&lt;span style="color: rgb(128, 0, 128);"&gt;$result&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;.ToLocalTime()&lt;br /&gt;   } &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;else&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; {&lt;br /&gt;       &lt;/span&gt;&lt;span style="color: rgb(128, 0, 128);"&gt;$null&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;   }&lt;br /&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;/span&gt;</description><link>http://feedproxy.google.com/~r/AnExchangeDeveloperPerspective/~3/LK8At19Q2yY/working-with-active-directory-dates.html</link><author>noreply@blogger.com (Roman Rozinov)</author><thr:total>0</thr:total><feedburner:origLink>http://romanroz.blogspot.com/2008/07/working-with-active-directory-dates.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-2432296471619761237.post-3771463420926412513</guid><pubDate>Fri, 11 Jul 2008 21:35:00 +0000</pubDate><atom:updated>2008-10-16T17:23:30.208-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Wmi</category><category domain="http://www.blogger.com/atom/ns#">Exchange 2003</category><category domain="http://www.blogger.com/atom/ns#">PowerShell</category><title>Purging Mailboxes In Exchange 2003</title><description>&lt;p&gt;&lt;span style="color: #800080"&gt;&lt;span style="font-size: 85%; color: #000000"&gt;I have recently demonstrated how to Purge a mailbox in Exchange 2007 but did not show anything for Exchange 2003. Here is what I do to purge mailboxes on Exchange 2003 server.&lt;/span&gt;&lt;/span&gt;     &lt;br /&gt;&lt;/p&gt;  &lt;p&gt;&lt;span style="font-size: 78%"&gt;&lt;span style="color: #800080"&gt;$list&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #ff0000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="font-weight: bold; color: #5f9ea0"&gt;gwmi&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #5f9ea0; font-style: italic"&gt;-ComputerName&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #800000"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: #800000"&gt;ex2k3srv&lt;/span&gt;&lt;span style="color: #800000"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #5f9ea0; font-style: italic"&gt;-Class &lt;/span&gt;&lt;span style="color: #000000"&gt;&lt;/span&gt;&lt;span style="color: #800000"&gt;Exchange_Mailbox&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #5f9ea0; font-style: italic"&gt;-Namespace&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #800000"&gt;Root\MicrosoftExchangeV2&lt;/span&gt;&lt;span style="color: #000000"&gt; | &lt;/span&gt;&lt;span style="font-weight: bold; color: #5f9ea0"&gt;?&lt;/span&gt;&lt;span style="color: #000000"&gt;{ &lt;/span&gt;&lt;span style="color: #000080"&gt;$_&lt;/span&gt;&lt;span style="color: #000000"&gt;.DateDiscoveredAbsentInDS &lt;/span&gt;&lt;span style="color: #ff0000"&gt;-ne&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #800080"&gt;$null&lt;/span&gt;&lt;span style="color: #000000"&gt; }&lt;/span&gt;&lt;/span&gt;     &lt;br /&gt;&lt;span style="color: #000000"&gt;&lt;/span&gt;&lt;span style="font-size: 78%"&gt;&lt;span style="color: #800080"&gt;$list&lt;/span&gt;&lt;span style="color: #000000"&gt; | &lt;/span&gt;&lt;span style="font-weight: bold; color: #5f9ea0"&gt;%&lt;/span&gt;&lt;span style="color: #000000"&gt;{ &lt;/span&gt;&lt;span style="color: #000080"&gt;$_&lt;/span&gt;&lt;span style="color: #000000"&gt;.Purge() }&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  </description><link>http://feedproxy.google.com/~r/AnExchangeDeveloperPerspective/~3/tuX0Vc7wTJc/purging-mailboxes-in-exchange-2003_11.html</link><author>noreply@blogger.com (Roman Rozinov)</author><thr:total>0</thr:total><feedburner:origLink>http://romanroz.blogspot.com/2008/07/purging-mailboxes-in-exchange-2003_11.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-2432296471619761237.post-8468715086131693160</guid><pubDate>Fri, 11 Jul 2008 16:32:00 +0000</pubDate><atom:updated>2008-07-11T09:34:11.800-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Humor</category><title>For IT admins and Sales guys!!!</title><description>&lt;span style="font-size:85%;"&gt;It's been all over the web.  Still, I need to post this link b/c I'll be coming back to it for entertainment for awhile.&lt;/span&gt; &lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.thewebsiteisdown.com/salesguy.html" mce_href="http://www.thewebsiteisdown.com/salesguy.html"&gt;&lt;span style="font-size:85%;"&gt;http://www.thewebsiteisdown.com/salesguy.html&lt;/span&gt;&lt;/a&gt;</description><link>http://feedproxy.google.com/~r/AnExchangeDeveloperPerspective/~3/6t4AkVfx-xw/for-it-admins-and-sales-guys.html</link><author>noreply@blogger.com (Roman Rozinov)</author><thr:total>0</thr:total><feedburner:origLink>http://romanroz.blogspot.com/2008/07/for-it-admins-and-sales-guys.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-2432296471619761237.post-6772772607693635392</guid><pubDate>Thu, 03 Jul 2008 16:35:00 +0000</pubDate><atom:updated>2008-12-08T23:12:38.818-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Exchange 2007</category><category domain="http://www.blogger.com/atom/ns#">PowerShell</category><title>Purging Mailboxes in Exchange 2007</title><description>&lt;div&gt;&lt;span style="font-size:85%;"&gt;We all know how vastly different Exchange 2007 Management Console (EMC) is from Exchange System Manager (ESM) in Exchange 2003. The other day I had to test a migration for work and realized that I no longer have an easy ability to purge mailboxes through EMC just like I used to in ESM:&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;a href="http://2.bp.blogspot.com/_8VjGVbkLmkk/SG1W1KIeb1I/AAAAAAAAAA8/W3qq76dnNIs/s1600-h/7-3-2008_PurgeIn2003.png"&gt;&lt;img id="BLOGGER_PHOTO_ID_5218923014445231954" style="" alt="" src="http://2.bp.blogspot.com/_8VjGVbkLmkk/SG1W1KIeb1I/AAAAAAAAAA8/W3qq76dnNIs/s320/7-3-2008_PurgeIn2003.png" border="0" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;Under the hood, selecting Purge in ESM calls Exchange_Mailbox.Purge method.&lt;br /&gt;In Exchange 2007, WMI is gone.  So Powershell comes to the rescue.&lt;br /&gt;After reviewing "Remove-Mailbox" reference at &lt;a href="http://technet.microsoft.com/en-us/library/aa995948%28EXCHG.80%29.aspx"&gt;TechNet&lt;/a&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;, it sounds like "-Permanent" should be piped when removing the user and that's it.  However, things are not that simple.&lt;br /&gt;If mailbox is already disassociated, then I can query a list of disconnected mailboxes like this:&lt;br /&gt;&lt;pre&gt;&lt;span style="color: rgb(0, 0, 0);font-size:100%;" &gt;Get-MailboxStatistics | &lt;/span&gt;&lt;span style="color: rgb(95, 158, 160); font-weight: bold;font-size:100%;" &gt;?&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);font-size:100%;" &gt;{ &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128);font-size:100%;" &gt;$_&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);font-size:100%;" &gt;.DisconnectDate &lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);font-size:100%;" &gt;-ne&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);font-size:100%;" &gt; &lt;/span&gt;&lt;span style="color: rgb(128, 0, 128);font-size:100%;" &gt;$null&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;span style="font-size:100%;"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;Now, I need to pipe the "Remove-Mailbox", but which parameters do I choose?&lt;br /&gt;It took me some mocking around but it turns out this is what you need:&lt;br /&gt;&lt;pre&gt;&lt;span style="color: rgb(0, 0, 0);font-size:100%;" &gt;Get-MailboxStatistics | &lt;/span&gt;&lt;span style="color: rgb(95, 158, 160); font-weight: bold;font-size:100%;" &gt;?&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);font-size:100%;" &gt;{ &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128);font-size:100%;" &gt;$_&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);font-size:100%;" &gt;.DisconnectDate &lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);font-size:100%;" &gt;-ne&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);font-size:100%;" &gt; &lt;/span&gt;&lt;span style="color: rgb(128, 0, 128);font-size:100%;" &gt;$null&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);font-size:100%;" &gt;} | &lt;/span&gt;&lt;span style="color: rgb(95, 158, 160); font-weight: bold;font-size:100%;" &gt;`&lt;br /&gt; %&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);font-size:100%;" &gt;{ Remove-Mailbox -Database &lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);font-size:100%;" &gt;"&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);font-size:100%;" &gt;Mailbox Database&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);font-size:100%;" &gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);font-size:100%;" &gt; `&lt;br /&gt;    -StoreMailboxIdentity &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128);font-size:100%;" &gt;$_&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);font-size:100%;" &gt;.MailboxGuid -WhatIf:&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);font-size:100%;" &gt;$false&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);font-size:78%;" &gt;&lt;span style="font-size:100%;"&gt;}&lt;/span&gt; &lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;</description><link>http://feedproxy.google.com/~r/AnExchangeDeveloperPerspective/~3/d332U7Ar4ck/purging-mailboxes-in-exchange-2007.html</link><author>noreply@blogger.com (Roman Rozinov)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/_8VjGVbkLmkk/SG1W1KIeb1I/AAAAAAAAAA8/W3qq76dnNIs/s72-c/7-3-2008_PurgeIn2003.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://romanroz.blogspot.com/2008/07/purging-mailboxes-in-exchange-2007.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-2432296471619761237.post-3788134273264524806</guid><pubDate>Thu, 05 Jun 2008 16:18:00 +0000</pubDate><atom:updated>2008-06-05T09:24:59.506-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">PowerShell</category><title>PowerShell Team is working hard, and for a good reason</title><description>&lt;span style="font-size:85%;"&gt;    So, I am involved lately in issues other than Exchange administration.  However, I've always liked to keep tabs on what's new.  Powershell team recently came out with their new &lt;a href="https://connect.microsoft.com/site/sitehome.aspx?SiteID=99&amp;amp;wa=wsignin1.0"&gt;CTP2&lt;/a&gt; of Powershell V2.  The hot buzz so far is Remoting features, but they do require understanding of &lt;a href="https://connect.microsoft.com/site/sitehome.aspx?SiteID=200"&gt;WinRm&lt;/a&gt;.  Anyone who wants to stay in the Exchange development scene for a few years to come would need to understand both platforms.&lt;/span&gt;</description><link>http://feedproxy.google.com/~r/AnExchangeDeveloperPerspective/~3/JPKBjYk8Isw/powershell-team-is-working-hard-and-for.html</link><author>noreply@blogger.com (Roman Rozinov)</author><thr:total>0</thr:total><feedburner:origLink>http://romanroz.blogspot.com/2008/06/powershell-team-is-working-hard-and-for.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-2432296471619761237.post-2022968405825917434</guid><pubDate>Tue, 20 May 2008 02:00:00 +0000</pubDate><atom:updated>2008-05-20T08:32:01.398-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Permission</category><category domain="http://www.blogger.com/atom/ns#">Exchange 2003</category><title>exchMasterAccountSid bytes again, and again.</title><description>&lt;span style="font-size:85%;"&gt;I have recently spent a considerable amount of time supporting one of our customers who for some reason was unable to perform MAPILOGONEx command via MFCMAPI. We were issuing the OPENSTORE_USE_ADMIN_PRIVILEGE  OPENSTORE_TAKE_OWNERSHIP which translate to using Administrative Previleges. &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;After much speculation about lack of permissions, it turned out that customer's environment was at Exchange 2003 SP2 but did not have a fix for msExchMasterAccountSid issue. That same issue that even had msexchange.org guys write a tool, &lt;a href="http://www.msexchange.org/articles/NoMAS-Tool.html"&gt;NoMas&lt;/a&gt;. Apparently, Information Store disallows the administrative permission resolution as well. NoMas can help a lot with the short-term workaround, while applying &lt;a href="http://support.microsoft.com/?kbid=916783"&gt;KB916783&lt;/a&gt; ensures the correct behavior.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;Now, I need to actually look at some of our apps and review their functionality under this scenario.&lt;/span&gt;</description><link>http://feedproxy.google.com/~r/AnExchangeDeveloperPerspective/~3/pAwtG1d6NL4/exchmasteraccountsid-bytes-again-and.html</link><author>noreply@blogger.com (Roman Rozinov)</author><thr:total>0</thr:total><feedburner:origLink>http://romanroz.blogspot.com/2008/05/exchmasteraccountsid-bytes-again-and.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-2432296471619761237.post-8113350783980104186</guid><pubDate>Sun, 04 May 2008 23:10:00 +0000</pubDate><atom:updated>2008-05-04T16:16:04.929-07:00</atom:updated><title>Changing focus of the blog a bit</title><description>&lt;span style="font-size:85%;"&gt;Ok,&lt;/span&gt;&lt;br /&gt;so I went quiet a bit just as I planned to blog more.  The reason is simple.  I have swapped jobs .  Now, entrached in development as opposed to IT support, my focus is still with MS Exchange and Messaging.  However, my day-to-day tasks are now involve looking deeper at AD integration with Exchange (various versions) and with time MAPI.</description><link>http://feedproxy.google.com/~r/AnExchangeDeveloperPerspective/~3/OEPi9PbIxQw/changing-focus-of-blog-bit.html</link><author>noreply@blogger.com (Roman Rozinov)</author><thr:total>0</thr:total><feedburner:origLink>http://romanroz.blogspot.com/2008/05/changing-focus-of-blog-bit.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-2432296471619761237.post-1709049928266064359</guid><pubDate>Mon, 17 Mar 2008 17:48:00 +0000</pubDate><atom:updated>2008-03-17T10:58:24.359-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Exchange Management</category><category domain="http://www.blogger.com/atom/ns#">Exchange 2007</category><category domain="http://www.blogger.com/atom/ns#">PowerShell</category><title>Getting Export-Mailbox Cmdlet to work</title><description>&lt;span style="font-size:85%;color:#000000;"&gt;After installing Exchange 2007 SP1 Management Tools on Windows 2003 SP2 x86 and Outlook 2007 with SP1, the &lt;em&gt;&lt;strong&gt;export-mailbox&lt;/strong&gt;&lt;/em&gt; cmdlet was returning this error:&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#ff0000;"&gt;Export-Mailbox : Error was found for "Name" (&lt;/span&gt;&lt;/span&gt;&lt;a href="mailto:proxyaddress@domain.com"&gt;&lt;proxyaddress@domain.com&gt;&lt;/a&gt;&lt;span style="font-size:85%;color:#000000;"&gt;&lt;span style="color:#ff0000;"&gt;) because: Error occurred in the step: Approving object. An unknown error has occurred., error code: -2147221233&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Running FixMapi.exe from the command prompt easily fixes the problem.&lt;/span&gt;</description><link>http://feedproxy.google.com/~r/AnExchangeDeveloperPerspective/~3/Wb1Tle7dzq8/getting-export-mailbox-cmdlet-to-work.html</link><author>noreply@blogger.com (Roman Rozinov)</author><thr:total>6</thr:total><feedburner:origLink>http://romanroz.blogspot.com/2008/03/getting-export-mailbox-cmdlet-to-work.html</feedburner:origLink></item></channel></rss>
