<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.technet.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Evan Dodds - Microsoft Exchange Server Blog</title><link>http://blogs.technet.com/b/evand/</link><description>Exchange, Exchange administration stuff, and other assorted ramblings</description><dc:language>en-US</dc:language><generator>Telligent Evolution Platform Developer Build (Build: 5.6.50428.7875)</generator><item><title>TechEd 2010 – Harold Wong Interview</title><link>http://blogs.technet.com/b/evand/archive/2010/06/21/teched-2010-harold-wong-interview.aspx</link><pubDate>Mon, 21 Jun 2010 21:37:00 GMT</pubDate><guid isPermaLink="false">d5e57398-b9ef-4490-9955-07cbb4e4a80d:3339526</guid><dc:creator>evand_microsoft.com</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.technet.com/b/evand/rsscomments.aspx?WeblogPostID=3339526</wfw:commentRss><comments>http://blogs.technet.com/b/evand/archive/2010/06/21/teched-2010-harold-wong-interview.aspx#comments</comments><description>&lt;p&gt;Also while I was at TechEd 2010 a few weeks back, I met up with Harold Wong and he recorded a short (9 min) interview with me about Rich Coexistence.&lt;/p&gt;
&lt;p&gt;Have a look: &lt;a href="http://blogs.technet.com/b/haroldwong/archive/2010/06/18/tech-ed-2010-interview-with-evan-dodds-exchange-server.aspx" title="http://blogs.technet.com/b/haroldwong/archive/2010/06/18/tech-ed-2010-interview-with-evan-dodds-exchange-server.aspx"&gt;http://blogs.technet.com/b/haroldwong/archive/2010/06/18/tech-ed-2010-interview-with-evan-dodds-exchange-server.aspx&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.technet.com/aggbug.aspx?PostID=3339526" width="1" height="1"&gt;</description><category domain="http://blogs.technet.com/b/evand/archive/tags/Rich+Coexistence/">Rich Coexistence</category><category domain="http://blogs.technet.com/b/evand/archive/tags/TechEd/">TechEd</category><category domain="http://blogs.technet.com/b/evand/archive/tags/Exchange+Online/">Exchange Online</category></item><item><title>TechEd 2010 – Rich Coexistence</title><link>http://blogs.technet.com/b/evand/archive/2010/06/21/teched-2010-rich-coexistence.aspx</link><pubDate>Mon, 21 Jun 2010 21:35:34 GMT</pubDate><guid isPermaLink="false">d5e57398-b9ef-4490-9955-07cbb4e4a80d:3339525</guid><dc:creator>evand_microsoft.com</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.technet.com/b/evand/rsscomments.aspx?WeblogPostID=3339525</wfw:commentRss><comments>http://blogs.technet.com/b/evand/archive/2010/06/21/teched-2010-rich-coexistence.aspx#comments</comments><description>&lt;p&gt;At TechEd 2010 in New Orleans a week or two ago, I gave a talk entitled “Using Microsoft Exchange Server 2010 to Achieve Rich Coexistence with Exchange Online”. One of the cool things about TechEd talks is that now they’re recording them and posting them publicly for access by anyone, so if this is a topic that interests you, you might want to have a look at: &lt;a title="http://www.msteched.com/2010/NorthAmerica/UNC309" href="http://www.msteched.com/2010/NorthAmerica/UNC309"&gt;http://www.msteched.com/2010/NorthAmerica/UNC309&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;What is “Rich Coexistence”? Well, it’s when you’ve configured Exchange to run on your premises and you’ve configured coexistence with the cloud… *AND* you’ve put at least one Exchange 2010 SP1 CAS/HUB server role in your on-prem environment as a “coexistence gateway”. Once you’ve got this set-up, your Exchange organization can be configured to appear to span both on-prem and the cloud in a pretty seamless way. The talk goes into more details on what you get if you set this up, but suffice to say it’s a great, high-fidelity coexistence scenario!&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.technet.com/aggbug.aspx?PostID=3339525" width="1" height="1"&gt;</description><category domain="http://blogs.technet.com/b/evand/archive/tags/Rich+Coexistence/">Rich Coexistence</category><category domain="http://blogs.technet.com/b/evand/archive/tags/TechEd/">TechEd</category><category domain="http://blogs.technet.com/b/evand/archive/tags/Exchange+Online/">Exchange Online</category></item><item><title>Using C# to get to MultiValuedProperty</title><link>http://blogs.technet.com/b/evand/archive/2008/04/01/using-c-to-get-to-multivaluedproperty.aspx</link><pubDate>Tue, 01 Apr 2008 22:24:57 GMT</pubDate><guid isPermaLink="false">d5e57398-b9ef-4490-9955-07cbb4e4a80d:3025596</guid><dc:creator>evand_microsoft.com</dc:creator><slash:comments>6</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.technet.com/b/evand/rsscomments.aspx?WeblogPostID=3025596</wfw:commentRss><comments>http://blogs.technet.com/b/evand/archive/2008/04/01/using-c-to-get-to-multivaluedproperty.aspx#comments</comments><description>&lt;p&gt;Today's post is to address a question we dealt with fairly recently through a customer escalation. The customer was trying to figure out the best way to programmatically get access to the entries in a MultiValuedProperty collection returned as part of an Exchange object.&lt;/p&gt; &lt;p&gt;Specific example we'll use here: Read in one or more mailbox objects (using Get-Mailbox cmdlet) and then iterate across and output some properties. Since we're outputting "Name" and "EmailAddresses" properties here, one will be a singleton ("Name") and one will be a collection ("EmailAddresses"). &lt;/p&gt; &lt;p&gt;To accomplish extracting this data, immediately the customer had driven straight into the Exchange.Management namespaces looking for Mailbox. But that's not the right approach. Vivek &lt;a href="http://www.viveksharma.com/TECHLOG/archive/2006/07/27/sample-code-calling-exchange-cmdlets-from-net-code.aspx"&gt;talks about why in this blog post&lt;/a&gt;, but the short version is that there's nothing to be gained by tying your code directly into Exchange (no useful public methods and limited benefit from the property strong-types) and quite a bit to be lost (you become tied to the assembly version, etc).&lt;/p&gt; &lt;p&gt;So, how then do you do it? Well, you use PSObject and non-Exchange types everywhere. There's a pretty good starter example in Technet: &lt;a title="http://msdn2.microsoft.com/en-us/library/bb332449.aspx" href="http://msdn2.microsoft.com/en-us/library/bb332449.aspx"&gt;http://msdn2.microsoft.com/en-us/library/bb332449.aspx&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Which leads to the customer's real question -- "I can get the object, but how do I drill into the strong-type properties that are of types like MultiValuedProperty?"&lt;/p&gt; &lt;p&gt;Good news! MultiValuedProperty type implements ICollection, so it's actually pretty simple. When you extract the property value, just cast it as ICollection and you're golden!&lt;/p&gt; &lt;p&gt;Here's some sample code (based on the Technet code) with a few comments added:&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; RunspaceConfiguration rsConfig = RunspaceConfiguration.Create();&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; PSSnapInException snapInException = null;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; PSSnapInInfo info = rsConfig.AddPSSnapIn("Microsoft.Exchange.Management.PowerShell.Admin", out snapInException);&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Runspace myRunSpace = RunspaceFactory.CreateRunspace(rsConfig);&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; myRunSpace.Open();  &lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Pipeline pipeline = myRunSpace.CreatePipeline();&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Command myCommand = new Command("Get-Mailbox");  &lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; pipeline.Commands.Add(myCommand);  &lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Collection&amp;lt;PSObject&amp;gt; commandResults = pipeline.Invoke();  &lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Ok, now we've got a bunch of mailboxes, cycle through them&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; foreach (PSObject mailbox in commandResults)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //define which properties to get&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; foreach (String propName in new string[] { "Name", "EmailAddresses" })&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //grab the specified property of this mailbox&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Object objValue = mailbox.Properties[propName].Value;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // is it a collection? "Name" isn't, but "EmailAddresses" is in this example&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (objValue is ICollection)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ICollection collection = (ICollection)objValue;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Loop through each entry in the collection and output it&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; foreach (object value in collection)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Console.WriteLine(value.ToString());&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Console.WriteLine(objValue.ToString());&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; myRunSpace.Close();&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;&lt;font size="1"&gt;&lt;em&gt;Thanks to Mike Hamler for assistance with the generic solution!&lt;/em&gt;&lt;/font&gt;&lt;/p&gt;&lt;img src="http://blogs.technet.com/aggbug.aspx?PostID=3025596" width="1" height="1"&gt;</description><category domain="http://blogs.technet.com/b/evand/archive/tags/Exchange+2007/">Exchange 2007</category><category domain="http://blogs.technet.com/b/evand/archive/tags/Powershell/">Powershell</category></item><item><title>Generating LDP Dumps from PowerShell</title><link>http://blogs.technet.com/b/evand/archive/2008/03/18/generating-ldp-dumps-from-powershell.aspx</link><pubDate>Wed, 19 Mar 2008 03:21:55 GMT</pubDate><guid isPermaLink="false">d5e57398-b9ef-4490-9955-07cbb4e4a80d:3014651</guid><dc:creator>evand_microsoft.com</dc:creator><slash:comments>6</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.technet.com/b/evand/rsscomments.aspx?WeblogPostID=3014651</wfw:commentRss><comments>http://blogs.technet.com/b/evand/archive/2008/03/18/generating-ldp-dumps-from-powershell.aspx#comments</comments><description>&lt;p&gt;Back in my PSS days, it was a common data-gathering/troubleshooting technique to collect "LDP Dumps" (ie - full AD propertyname+value data for a given object) as a way of collecting data for a troubleshooting investigation. If you're a really long-time Exchange administrator, just pretend I said "raw mode dump" and know that it's effectively the same thing, but for an AD object.&lt;/p&gt; &lt;p&gt;Recently, a customer suggested that we (Exchange) should produce a built-in cmdlet which can, given a pipeline input of an Exchange object, connect to the AD and provide this sort of LDP dump data, so that they could replace their use of LDP.exe. The rationale is that this could be pretty useful to collect this data more rapidly (and with fewer clicks) when troubleshooting an issue. I thought about it for a bit, and realized that because of the directory support built into PowerShell (or, rather, .Net) this would be something possible to write with a fairly simple script... no new cmdlet required! &lt;/p&gt; &lt;p&gt;Note that in an effort to keep the output looking roughly like the LDP output, I'm writing out strings rather than objects. This is a little counter to the spirit of PowerShell, of course, but it's also easily overcome with some minor changes to the script below.&lt;/p&gt; &lt;p&gt;Behold, the outcome of this experiment - I hope it's useful to you!&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;#&lt;br&gt;# LDPDump.ps1 script&lt;br&gt;# This script is a PowerShell way to simulate the effects of the old-school "LDP Dump" used by Exchange PSS and other Exchange power-administrators&lt;br&gt;#&amp;nbsp; (ie - connecting with LDP.exe, navigating to an object, and double-clicking to get all of the property and value data onto the screen)&lt;br&gt;#  &lt;p&gt;#&lt;br&gt;# Discover whether the script is receiving piped input&lt;br&gt;#&lt;br&gt;if ( $input.movenext() )&lt;br&gt;{&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $inputExists = $true&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $input.reset()&lt;br&gt;}  &lt;p&gt;#&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br&gt;# There is no piped input - provide some guidance and exit&lt;br&gt;#&lt;br&gt;if (!$inputExists ) &lt;br&gt;{&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; write-error "You need to pipe in some object!"&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; exit&lt;br&gt;}  &lt;p&gt;# Let's loop on each of the things piped into the script&lt;br&gt;foreach ($j in $input)&lt;br&gt;{&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; # Grab out the distinguished name (this is a little bit Exchange-centric, but it's also sort of standard-ish)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $dn=$j.DistinguishedName&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; # Did we find a DistinguishedName property? If not, ABORT!&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if($dn -eq $null)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; write-error "THIS OBJECT DOES NOT HAVE A DN: $($j.ToString())"&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; write-host ""&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; else&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # OK, we found a DN... let's open a session to AD&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $ldapdn = "[ADSI]'LDAP://$dn'"&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $ldpdump = invoke-expression "$ldapdn"&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # Print a header for this object&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; write-host "$($ldpdump.psbase.path)"&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; foreach ($k in $ldpdump.psbase.properties.PropertyNames)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # Make each count, propertyname and value output look pretty much like LDP does (ie - "#&amp;gt;Name:Value")&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; write-host "$($ldpdump.psbase.properties[$k].count)&amp;gt;$($k):$($ldpdump.psbase.properties[$k])"&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; write-host ""&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;}&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;&lt;em&gt;&lt;font size="1"&gt;Thanks to Sebastian Bengochea for help getting at the ProxyCollection data!&lt;/font&gt;&lt;/em&gt;&lt;/p&gt;&lt;img src="http://blogs.technet.com/aggbug.aspx?PostID=3014651" width="1" height="1"&gt;</description><category domain="http://blogs.technet.com/b/evand/archive/tags/Exchange+2007/">Exchange 2007</category><category domain="http://blogs.technet.com/b/evand/archive/tags/Powershell/">Powershell</category></item><item><title>Interact 2008 - April 8-10, 2008</title><link>http://blogs.technet.com/b/evand/archive/2008/03/16/interact-2008-april-8-10-2008.aspx</link><pubDate>Mon, 17 Mar 2008 00:47:01 GMT</pubDate><guid isPermaLink="false">d5e57398-b9ef-4490-9955-07cbb4e4a80d:3007000</guid><dc:creator>evand_microsoft.com</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.technet.com/b/evand/rsscomments.aspx?WeblogPostID=3007000</wfw:commentRss><comments>http://blogs.technet.com/b/evand/archive/2008/03/16/interact-2008-april-8-10-2008.aspx#comments</comments><description>&lt;p&gt;I just heard that (Exchange VP) &lt;a href="http://msexchangeteam.com/archive/2008/03/12/448427.aspx"&gt;Terry's going to be giving the keynote&lt;/a&gt; at &lt;a href="https://www.interact08.com/main.aspx"&gt;Interact&lt;/a&gt; this year, and he's promised the first real public details about &lt;a href="http://msexchangeteam.com/archive/2007/10/08/447213.aspx"&gt;ExchangeLabs&lt;/a&gt;! Sweet... this is exciting stuff!&lt;/p&gt; &lt;p&gt;Plus -- Robert and Andrew will be presenting the &lt;a href="http://blogs.technet.com/evand/archive/2007/07/26/evan-s-teched-session-video-is-posted.aspx"&gt;PowerShell Automation&lt;/a&gt; talk, so that alone makes the conference worthwhile, of course. :)&lt;/p&gt;&lt;img src="http://blogs.technet.com/aggbug.aspx?PostID=3007000" width="1" height="1"&gt;</description><category domain="http://blogs.technet.com/b/evand/archive/tags/Exchange+2007/">Exchange 2007</category><category domain="http://blogs.technet.com/b/evand/archive/tags/Powershell/">Powershell</category><category domain="http://blogs.technet.com/b/evand/archive/tags/Exchange14/">Exchange14</category><category domain="http://blogs.technet.com/b/evand/archive/tags/ExchangeLabs/">ExchangeLabs</category></item><item><title>Nested DL Membership in Exchange 2007</title><link>http://blogs.technet.com/b/evand/archive/2007/12/14/nested-dl-membership-in-exchange-2007.aspx</link><pubDate>Sat, 15 Dec 2007 01:34:01 GMT</pubDate><guid isPermaLink="false">d5e57398-b9ef-4490-9955-07cbb4e4a80d:2647686</guid><dc:creator>evand_microsoft.com</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.technet.com/b/evand/rsscomments.aspx?WeblogPostID=2647686</wfw:commentRss><comments>http://blogs.technet.com/b/evand/archive/2007/12/14/nested-dl-membership-in-exchange-2007.aspx#comments</comments><description>&lt;p&gt;Aeons ago, Vivek posted about how to &lt;a href="http://www.viveksharma.com/techlog/2006/10/22/how-to-get-dl-membership-in-exchange-2007/"&gt;get DL membership in Exchange 2007&lt;/a&gt;. He commented that "&lt;em&gt;This can be adapted to do nested membership as well—I’ll leave it to you to figure out how.&lt;/em&gt;"&lt;/p&gt; &lt;p&gt;At the time, I remember reading this and thinking briefly about how I'd do this, but never really sitting down and doing it to prove my idea was correct.&lt;/p&gt; &lt;p&gt;Well, my time finally ran out on not looking at this. The other day, someone sent me a semi-working PowerShell function to get DL membership (including recursion) and asked me how to make it detect looping recursion. It's been over a year since Vivek delegated this problem "&lt;em&gt;to you&lt;/em&gt;", so I guess that's about enough time and we should share an answer. Let's get to it! &lt;/p&gt; &lt;p&gt;Here's the function we started with:&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;&lt;i&gt;function Get-DLMemberRecurse&lt;br&gt;&lt;/i&gt;&lt;i&gt;{&lt;br&gt;&lt;/i&gt;&lt;i&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; foreach ($varTemp in get-distributiongroupmember $args[0])&lt;br&gt;&lt;/i&gt;&lt;i&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;&lt;/i&gt;&lt;i&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $varTemp&lt;br&gt;&lt;/i&gt;&lt;i&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if ($varTemp.RecipientType -like "Mail*Group") { Get-DLMemberRecurse $varTemp.Identity }&lt;br&gt;&lt;/i&gt;&lt;i&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;&lt;/i&gt;&lt;i&gt;}&lt;/i&gt;&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;Key problem? If you have DG1 which has DG2 as a member which then has DG1 as a member (a looping membership hierarchy which is totally possible to set, but totally useless practically), it loops forever until it overflows the stack. Whoops, that's no good!&lt;/p&gt; &lt;p&gt;So we need to make a couple of changes to solve this problem. We need to do at least two things (which I've color coded in my updated function below to highlight the changes):&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;font color="#ff8000"&gt;Add some recursion protection, using PowerShell’s understanding of scope and recursion. This is useful to ensure we can effectively reset and subsequently build a list of DGs we’ve already traversed.&lt;/font&gt;  &lt;li&gt;&lt;font color="#008000"&gt;Build a list of DGs we’ve traversed, and update it each time we find a new one&lt;/font&gt;&lt;/li&gt;&lt;/ul&gt; &lt;blockquote&gt; &lt;p&gt;&lt;em&gt;function Get-DLMemberRecurse&lt;br&gt;{&lt;br&gt;&lt;/em&gt;&lt;em&gt;&lt;font color="#ff8000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $ParentScriptBlock = (get-variable -scope 1 MyInvocation -value).MyCommand.ScriptBlock;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if($ParentScriptBlock -ne $MyInvocation.MyCommand.ScriptBlock)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # we're not recursing (we should only hit this once and we'll use it to reset the DGList)&lt;br&gt;&lt;/em&gt;&lt;em&gt;&lt;font color="#008000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $global:DGList = @()&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $global:DGList += (Get-DistributionGroup $args[0]).Identity&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="#ff8000"&gt;&amp;nbsp; }&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; foreach ($varTemp in get-distributiongroupmember $args[0])&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $varTemp &lt;/em&gt; &lt;p&gt;&lt;em&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if ($varTemp.RecipientType -like "Mail*Group" &lt;font color="#008000"&gt;-and -not ($global:DGList -contains $varTemp.identity) &lt;/font&gt;) { &lt;font color="#008000"&gt;$global:DGList += $varTemp.Identity; &lt;/font&gt;Get-DLMemberRecurse $varTemp.Identity } &lt;/em&gt; &lt;p&gt;&lt;em&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;/em&gt; &lt;p&gt;&lt;em&gt;}&lt;/em&gt;&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;&lt;font style="background-color: #fafaf0"&gt;Special thanks to my buds on the &lt;a href="http://blogs.msdn.com/powershell"&gt;PowerShell team&lt;/a&gt; for getting me going with the "how to know if I'm inside a recursion loop using MyInvocation variable" tip. &lt;/font&gt;&lt;/p&gt;&lt;img src="http://blogs.technet.com/aggbug.aspx?PostID=2647686" width="1" height="1"&gt;</description><category domain="http://blogs.technet.com/b/evand/archive/tags/Exchange+2007/">Exchange 2007</category><category domain="http://blogs.technet.com/b/evand/archive/tags/Powershell/">Powershell</category></item><item><title>Using PowerShell + WMI to manage legacy Exchange</title><link>http://blogs.technet.com/b/evand/archive/2007/09/10/using-powershell-wmi-to-manage-legacy-exchange.aspx</link><pubDate>Mon, 10 Sep 2007 17:44:00 GMT</pubDate><guid isPermaLink="false">d5e57398-b9ef-4490-9955-07cbb4e4a80d:1930919</guid><dc:creator>evand_microsoft.com</dc:creator><slash:comments>4</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.technet.com/b/evand/rsscomments.aspx?WeblogPostID=1930919</wfw:commentRss><comments>http://blogs.technet.com/b/evand/archive/2007/09/10/using-powershell-wmi-to-manage-legacy-exchange.aspx#comments</comments><description>&lt;P&gt;Dmitry blogs all about it &lt;A href="http://dmitrysotnikov.wordpress.com/2007/09/06/wmi-powershell-for-exchange-2003/" mce_href="http://dmitrysotnikov.wordpress.com/2007/09/06/wmi-powershell-for-exchange-2003/"&gt;here&lt;/A&gt;. I'd been meaning to write pretty much this very same post ever since I attended &lt;A href="http://blogs.3sharp.com/Blog/deving/" mce_href="http://blogs.3sharp.com/Blog/deving/"&gt;Devin&lt;/A&gt;'s talk on managing Legacy Exchange with PowerShell at ExchangeConnections &lt;STRIKE&gt;last November &lt;/STRIKE&gt;&lt;EM&gt;this past April&lt;/EM&gt;, so I'm glad to see Dmitry write it up! &lt;/P&gt;&lt;img src="http://blogs.technet.com/aggbug.aspx?PostID=1930919" width="1" height="1"&gt;</description><category domain="http://blogs.technet.com/b/evand/archive/tags/Exchange+2003+SP1/">Exchange 2003 SP1</category><category domain="http://blogs.technet.com/b/evand/archive/tags/Exchange+2003+SP2/">Exchange 2003 SP2</category><category domain="http://blogs.technet.com/b/evand/archive/tags/Exchange+2007/">Exchange 2007</category><category domain="http://blogs.technet.com/b/evand/archive/tags/Powershell/">Powershell</category></item><item><title>Evan's TechEd session video is posted</title><link>http://blogs.technet.com/b/evand/archive/2007/07/26/evan-s-teched-session-video-is-posted.aspx</link><pubDate>Thu, 26 Jul 2007 20:49:00 GMT</pubDate><guid isPermaLink="false">d5e57398-b9ef-4490-9955-07cbb4e4a80d:1620387</guid><dc:creator>evand_microsoft.com</dc:creator><slash:comments>3</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.technet.com/b/evand/rsscomments.aspx?WeblogPostID=1620387</wfw:commentRss><comments>http://blogs.technet.com/b/evand/archive/2007/07/26/evan-s-teched-session-video-is-posted.aspx#comments</comments><description>&lt;P&gt;&lt;EM&gt;It turns out that my TechEd Exchange Scripting with PowerShell session was recorded to video, and now it's available for all to download (no more having to provide TechEd credentials!). Link below on the session title to the video of my session and to the rest of the sessions they've just released!&lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;&lt;IMG height=174 src="http://blogs.technet.com/blogfiles/evand/WindowsLiveWriter/EvansTechEdsessionvideo_950E/clip_image001.jpg" width=231 border=0 mce_src="http://blogs.technet.com/blogfiles/evand/WindowsLiveWriter/EvansTechEdsessionvideo_950E/clip_image001.jpg"&gt;&lt;IMG height=173 src="http://blogs.technet.com/blogfiles/evand/WindowsLiveWriter/EvansTechEdsessionvideo_950E/clip_image002.jpg" width=229 border=0 mce_src="http://blogs.technet.com/blogfiles/evand/WindowsLiveWriter/EvansTechEdsessionvideo_950E/clip_image002.jpg"&gt; 
&lt;P&gt;&lt;A href="http://www.microsoft.com/emea/itsshowtime/sessionh.aspx?videoid=542" mce_href="http://www.microsoft.com/emea/itsshowtime/sessionh.aspx?videoid=542"&gt;&lt;B&gt;Microsoft Windows PowerShell Scripting for Microsoft Exchange Server 2007&lt;/B&gt;&lt;/A&gt; 
&lt;P&gt;&lt;B&gt;Evan Dodds&lt;/B&gt;, Program Manager, Microsoft Corporation 
&lt;P&gt;&lt;B&gt;Level:&lt;/B&gt; 300 
&lt;P&gt;This session covers the new Windows PowerShell-based Exchange cmdline and scripting interface. Learn how to convert your multiple page Visual Basic and COM scripts to mere one-liners in Exchange 2007. We cover the basics of the management shell, as well as the underlying design and key concepts. Additionally, we go into more depth on how to build larger scripts that can be used to automate small, medium, as well as enterprise business scenarios. 
&lt;P&gt;&lt;B&gt;Link to list of all Tech Ed 2007 Recorded Sessions for ITs Showtime:&lt;/B&gt; 
&lt;P&gt;&lt;A href="http://www.microsoft.com/emea/itsshowtime/result_search.aspx?event=65&amp;amp;x=10&amp;amp;y=3" mce_href="http://www.microsoft.com/emea/itsshowtime/result_search.aspx?event=65&amp;amp;x=10&amp;amp;y=3"&gt;http://www.microsoft.com/emea/itsshowtime/result_search.aspx?event=65&amp;amp;x=10&amp;amp;y=3&lt;/A&gt;&lt;/P&gt;&lt;img src="http://blogs.technet.com/aggbug.aspx?PostID=1620387" width="1" height="1"&gt;</description><category domain="http://blogs.technet.com/b/evand/archive/tags/Exchange+2007/">Exchange 2007</category><category domain="http://blogs.technet.com/b/evand/archive/tags/Powershell/">Powershell</category></item><item><title>DynamicDistributionGroup for all users in a particular storage group</title><link>http://blogs.technet.com/b/evand/archive/2007/07/05/dynamicdistributiongroup-for-all-users-in-a-particular-storage-group.aspx</link><pubDate>Fri, 06 Jul 2007 01:45:00 GMT</pubDate><guid isPermaLink="false">d5e57398-b9ef-4490-9955-07cbb4e4a80d:1449804</guid><dc:creator>evand_microsoft.com</dc:creator><slash:comments>6</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.technet.com/b/evand/rsscomments.aspx?WeblogPostID=1449804</wfw:commentRss><comments>http://blogs.technet.com/b/evand/archive/2007/07/05/dynamicdistributiongroup-for-all-users-in-a-particular-storage-group.aspx#comments</comments><description>&lt;P&gt;Lots of people are asking lots of questions at the &lt;A href="http://www.exchangeninjas.com/" mce_href="http://www.exchangeninjas.com/"&gt;ExchangeNinjas wiki&lt;/A&gt;! Glad to see so much participation both from within the Exchange team and also from the broad Exchange community!!&lt;/P&gt;
&lt;P&gt;This question struck me as pretty interesting, so I figured I'd surface it on the blog as well as answering it (a few weeks ago) on the wiki... From the wiki's &lt;A href="http://www.exchangeninjas.com/RecipientManagementFAQs" mce_href="http://www.exchangeninjas.com/RecipientManagementFAQs"&gt;Recipient Management FAQs&lt;/A&gt; page (originally was posted to the &lt;A href="http://www.exchangeninjas.com/askaquestion" mce_href="http://www.exchangeninjas.com/askaquestion"&gt;Ask a Question&lt;/A&gt; page) :&lt;/P&gt;
&lt;P mce_keep="true"&gt;&lt;STRONG&gt;Q: I want to create a custom dynamic distribution group for all users in a storage group. I can get the user if I use: get-mailbox | where {$_.Database -like "*&amp;lt;SGName&amp;gt;*"} &lt;BR&gt;&lt;/STRONG&gt;&lt;STRONG&gt;BUT this doesn't work for a new DDG :&lt;BR&gt;new-DynamicDistributionGroup -alias test1a -name test1a -recipientfilter {Database -like "*SG01-SUKMSDMBX03*"} -org exchorg.local &lt;BR&gt;&lt;/STRONG&gt;&lt;STRONG&gt;I get no members!&amp;nbsp;&amp;nbsp; It will work on a per server basis, but this it no good for me.&amp;nbsp; Can you help?&amp;nbsp; Is this possible?&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;/STRONG&gt;&lt;BR&gt;A: The problem is that the "Database" filter can't do partial string matches, because underneath this property is actually a distinguished name value in the AD (which can't do substring matching). Building an infrastructure that allows you to direct email to mailboxes on a storage group is definitely possible -- just not like this. Instead, you need to ensure you're using the full distinguished name for each database you want to compare against, and not using wildcards (ie, asterisk *)&lt;/P&gt;
&lt;P&gt;There's an easy way to do this and a hard way. The hard way I'll just talk about, then I'll show you the easy way. The hard way would be to iterate through all of the MDBs in your selected storage group, concatenating a filter-parser string made up of their DNs... with appropriately placed "-or" operators between. Then pass this string into the New-DDG cmdlet as the RecipientFilter. Yuck. 
&lt;P&gt;The easy way is to create a DDG for each mailboxdatabase. Then create a DistributionGroup (doesn't have to be DDG) and add all of these per-MDB DDGs into the DG. Here's how that might look: 
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&lt;FONT face="Courier New" size=2&gt;new-distributiongroup DG-MySg1 -Type Distribution -SamAccountName DG-MySg1&lt;BR&gt;get-mailboxdatabase -Server Srv1 -StorageGroup MySG1 | % { New-DynamicDistributionGroup "DDG-$($_.Name)" -RecipientFilter "Database -eq '$($_.Identity.DistinguishedName)'"&amp;nbsp;} | % { Add-DistributionGroupMember DG-MySg1 -Member $_.Identity }&lt;/FONT&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;&lt;EM&gt;Updated July10: Added -Server switch to make it a more real-world syntax.&lt;/EM&gt;&lt;/P&gt;&lt;img src="http://blogs.technet.com/aggbug.aspx?PostID=1449804" width="1" height="1"&gt;</description><category domain="http://blogs.technet.com/b/evand/archive/tags/Exchange+2007/">Exchange 2007</category><category domain="http://blogs.technet.com/b/evand/archive/tags/Powershell/">Powershell</category></item><item><title>Evan's TechEd 2007 Wrapup</title><link>http://blogs.technet.com/b/evand/archive/2007/06/25/evan-s-teched-2007-wrapup.aspx</link><pubDate>Mon, 25 Jun 2007 17:20:49 GMT</pubDate><guid isPermaLink="false">d5e57398-b9ef-4490-9955-07cbb4e4a80d:1334910</guid><dc:creator>evand_microsoft.com</dc:creator><slash:comments>3</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.technet.com/b/evand/rsscomments.aspx?WeblogPostID=1334910</wfw:commentRss><comments>http://blogs.technet.com/b/evand/archive/2007/06/25/evan-s-teched-2007-wrapup.aspx#comments</comments><description>&lt;p&gt;I realized this week that all of the sessions (and video recordings of each session -- I didn't even realize they were recording ALL of the sessions!) are available online. This means even if you ended up double-booked for two interesting sessions and had to choose just ONE in person, you can still review the deck and the video for the session you missed. Of course, that means you probably don't need to see &lt;em&gt;my&lt;/em&gt; sessions, since you &lt;em&gt;SURELY&lt;/em&gt; chose to see those in person and missed the OTHER, conflicting session. Right? :)&lt;/p&gt; &lt;p&gt;Anyway, here are the links to sessions I participated in this year. I think you may have to be signed in to the TechEd site to get through to these (and note that if you're signed in, you can get to these directly by selecting "Content Downloads &amp;amp; Recordings" in the left of the screen).&lt;/p&gt; &lt;ul&gt; &lt;li&gt;UNC200 - Exchange 2007 Overview (&lt;a href="https://www.msteched.com/viewrecordedsession.aspx?code=UNC200"&gt;Video&lt;/a&gt;). I did a short Exchange+PowerShell demo toward the end of Terry's overview talk.&lt;/li&gt; &lt;li&gt;UNC212R - Managing Exchange 2007&amp;nbsp; (&lt;a href="https://downloads.eventpoint.com/teched2007/slides/UNC212R_Dodds.pptx?ticket=36a87e9c-af17-4cb2-981d-f77d6cf9dc2b&amp;amp;id=3039ab8f-eeeb-4674-8093-65ad86b5b7cf"&gt;PPT&lt;/a&gt; and &lt;a href="https://www.msteched.com/viewrecordedsession.aspx?code=UNC212R"&gt;Video&lt;/a&gt;). I covered the Friday morning repeat of the GUI+PowerShell talk.&lt;/li&gt; &lt;li&gt;UNC309 - Exchange 2007 Automation (&lt;a href="https://downloads.eventpoint.com/teched2007/slides/UNC309_Dodds.pptx?ticket=a227e3bb-b610-482b-9b36-4b56a685a523&amp;amp;id=bb027257-3177-4050-b8fe-3ee729770838"&gt;PPT&lt;/a&gt; and &lt;a href="https://www.msteched.com/viewrecordedsession.aspx?code=UNC309"&gt;Video&lt;/a&gt;). This is the Exchange+PowerShell session. There was also a 75min Q&amp;amp;A "Interactive Theatre" afterward, which was not recorded.&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;Also, I think the PowerShell session is going to be on the ITSShowtime site at some point in the near future as well. I'll post the link when it is up.&lt;/p&gt;&lt;img src="http://blogs.technet.com/aggbug.aspx?PostID=1334910" width="1" height="1"&gt;</description><category domain="http://blogs.technet.com/b/evand/archive/tags/Exchange+2007/">Exchange 2007</category><category domain="http://blogs.technet.com/b/evand/archive/tags/Powershell/">Powershell</category></item></channel></rss>