<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" gd:etag="W/&quot;DE4NRnYzeyp7ImA9WhRaGUo.&quot;"><id>tag:blogger.com,1999:blog-4279057743765095593</id><updated>2012-02-22T22:03:17.883-08:00</updated><title>The Evening Read</title><subtitle type="html" /><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://www.eveningread.com/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://www.eveningread.com/" /><link rel="next" type="application/atom+xml" href="http://www.blogger.com/feeds/4279057743765095593/posts/default?start-index=26&amp;max-results=25&amp;redirect=false&amp;v=2" /><author><name>Andrew Vogel</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>28</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/eveningread" /><feedburner:info uri="eveningread" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><feedburner:feedFlare href="http://add.my.yahoo.com/rss?url=http%3A%2F%2Ffeeds.feedburner.com%2Feveningread" src="http://us.i1.yimg.com/us.yimg.com/i/us/my/addtomyyahoo4.gif">Subscribe with My Yahoo!</feedburner:feedFlare><feedburner:feedFlare href="http://fusion.google.com/add?feedurl=http%3A%2F%2Ffeeds.feedburner.com%2Feveningread" src="http://buttons.googlesyndication.com/fusion/add.gif">Subscribe with Google</feedburner:feedFlare><feedburner:feedFlare href="http://www.live.com/?add=http%3A%2F%2Ffeeds.feedburner.com%2Feveningread" src="http://tkfiles.storage.msn.com/x1piYkpqHC_35nIp1gLE68-wvzLZO8iXl_JMledmJQXP-XTBOLfmQv4zhj4MhcWEJh_GtoBIiAl1Mjh-ndp9k47If7hTaFno0mxW9_i3p_5qQw">Subscribe with Live.com</feedburner:feedFlare><entry gd:etag="W/&quot;C0IHR3o7fSp7ImA9WhRaGUk.&quot;"><id>tag:blogger.com,1999:blog-4279057743765095593.post-1101873432870398129</id><published>2012-02-22T12:12:00.000-08:00</published><updated>2012-02-22T12:12:16.405-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-02-22T12:12:16.405-08:00</app:edited><title>Forcefully Migrating a Public Folder Hierarchy</title><content type="html">&lt;span style="font-size: large;"&gt;A Failed Inheritance&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
A few days ago, I went to mail enable a public folder for a customer and found that while it showed up great in the EMC, we couldn't deliver mail to it. &amp;nbsp;Rather, the server would respond:&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote class="tr_bq"&gt;&lt;span style="font-family: 'Courier New', Courier, monospace; font-size: xx-small;"&gt;&lt;span style="color: grey;"&gt;#&amp;lt; #5.2.0 smtp;554 5.2.0 STOREDRV.Deliver.Exception:ObjectNotFoundException; Failed to process message due to a permanent exception with message The Active Directory user wasn't found. ObjectNotFoundException: The Active Directory user wasn't found.&amp;gt; #SMTP#&lt;/span&gt;&lt;/span&gt;&lt;/blockquote&gt;&lt;br /&gt;
Knowing that we're talking about the GAL and/or OAB at this point, I went to rebuild the OAB ahead of schedule. &amp;nbsp;But the OAB fired back, "I can't generate!" &amp;nbsp;It was configured to generate in public folders and for web-based distribution. &amp;nbsp;Doing some thinking, I jumped into ADSIEdit and discovered that my public folder hierarchy was still pointing at the legacy server in the Exchange administrative group.&lt;br /&gt;
&lt;br /&gt;
&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-xj5elZyfqs8/T0VEchsX9kI/AAAAAAAAAdQ/o6YOtGGFGbw/s1600/adsiedit-exch-admin-groups.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/-xj5elZyfqs8/T0VEchsX9kI/AAAAAAAAAdQ/o6YOtGGFGbw/s1600/adsiedit-exch-admin-groups.png" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Ruh-roo, Shaggy!&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;
What's interesting is that the OAB generation was occurring on my new server and was targeting the public folders database on the new server. &amp;nbsp;So what's wrong with this picture?&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-size: large;"&gt;He's Responsible&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Sure enough, my legacy server isn't in the DN, but I wasn't like I could turn it back on. &amp;nbsp;The object was deleted from the Exchange administrative group and the physical hardware had been sent to the dump months ago.&lt;br /&gt;
&lt;br /&gt;
Looking at the Folder Hierarchies in both administrative groups revealed that the hierarchy object was in the old administrative group, but not on the new one. &amp;nbsp;That's right a server that didn't existing anymore was responsible for maintaining the MAPI PF tree for my new Exchange server.&lt;br /&gt;
&lt;br /&gt;
So what to do? &amp;nbsp;Ideally, my old box would be on, with public folder replication completed and nothing but system objects in the public folders. &amp;nbsp;One right click and I could migrate this via the UI. &amp;nbsp;Checking some properties and running an Exchange Best Practices Analyzer, I discover I have the following condition:&amp;nbsp;&lt;a href="http://technet.microsoft.com/en-us/library/aa996485(EXCHG.80).aspx"&gt;http://technet.microsoft.com/en-us/library/aa996485(EXCHG.80).aspx&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Okay, so far so good. &amp;nbsp;But now the MAPI tree doesn't yet exist on my new Exchange server. &amp;nbsp;A little more&amp;nbsp;digging and I discovered how my Configuration partition should look like this for a good migration: &amp;nbsp;&lt;a href="http://social.technet.microsoft.com/Forums/ar/exchangesvrmigration/thread/c0634d0e-80aa-4988-9a0f-67f1b02b3b50"&gt;http://social.technet.microsoft.com/Forums/ar/exchangesvrmigration/thread/c0634d0e-80aa-4988-9a0f-67f1b02b3b50&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-size: large;"&gt;Who's On First?&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Now that I've survived the above article and bounced my Information Store service, I've got 2 MAPI trees and fail the Exchange Best Practices Analyzer. &amp;nbsp;Oh, and Public Folders won't show up in Outlook Web Access. &amp;nbsp;Microsoft's got that covered: &amp;nbsp;&lt;a href="http://technet.microsoft.com/en-us/library/dd535370(EXCHG.80).aspx"&gt;http://technet.microsoft.com/en-us/library/dd535370(EXCHG.80).aspx&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Once that's in place and I've confirmed I'm not getting NDR's things look great. &amp;nbsp;Oh wait, Message Tracking shows that my message is received but never hits the mailbox store. &amp;nbsp;A glance at the Queues, and my message is in the Unroutable Queue.&lt;br /&gt;
&lt;br /&gt;
Remember our screenshot above? &amp;nbsp;There's still a routing group connector on the legacy administrative group side, but not on the production site. &amp;nbsp;Yes, that'll be a delete in ADSIEdit. You backed up all of this first, right?&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-size: large;"&gt;Final Absolution&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
And now my public folders are managed by the new system and the old metadata is gone. &amp;nbsp;Just one more email test. &amp;nbsp;And:&lt;br /&gt;
&lt;blockquote class="tr_bq"&gt;&lt;span style="color: grey; font-family: 'Courier New', Courier, monospace; font-size: xx-small;"&gt;#&amp;lt; #5.2.0 smtp;554 5.2.0 STOREDRV.Deliver.Exception:ObjectNotFoundException; Failed to process message due to a permanent exception with message The Active Directory user wasn't found. ObjectNotFoundException: The Active Directory user wasn't found.&amp;gt; #SMTP#&lt;/span&gt;&lt;/blockquote&gt;What? &amp;nbsp;Still? &amp;nbsp;Now we're back in familiar territory. &amp;nbsp;This happens quite frequently in Exchange 2003 to Exchange 2010 migrations. &amp;nbsp;It's a documented solution:&amp;nbsp;&lt;a href="http://blogs.dirteam.com/blogs/davestork/archive/2010/03/16/mail-enabled-public-folder-recipient-not-found.aspx"&gt;http://blogs.dirteam.com/blogs/davestork/archive/2010/03/16/mail-enabled-public-folder-recipient-not-found.aspx&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
And with that, upgrading the GALs to the new 2010 format and an OAB update and I can finally use mail-enabled public folders in Exchange 2010.&lt;br /&gt;
&lt;br /&gt;
Remember, your mileage may vary! &amp;nbsp;Backups are important, to the point of considering PST exports of the Public Folders as an additional failback. &amp;nbsp;The best part is, this is documented, but there are&amp;nbsp;several&amp;nbsp;pieces&amp;nbsp;we had to put together, but with a good understanding of the schema and using ADSIEdit and the issue became obvious and we had a path to resolution.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4279057743765095593-1101873432870398129?l=www.eveningread.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/eveningread/~4/20i_Aspk_IQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.eveningread.com/feeds/1101873432870398129/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.eveningread.com/2012/02/forcefully-migrating-public-folder.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4279057743765095593/posts/default/1101873432870398129?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4279057743765095593/posts/default/1101873432870398129?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/eveningread/~3/20i_Aspk_IQ/forcefully-migrating-public-folder.html" title="Forcefully Migrating a Public Folder Hierarchy" /><author><name>Andrew Vogel</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/-xj5elZyfqs8/T0VEchsX9kI/AAAAAAAAAdQ/o6YOtGGFGbw/s72-c/adsiedit-exch-admin-groups.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://www.eveningread.com/2012/02/forcefully-migrating-public-folder.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEQHRHwzfSp7ImA9WhRaFU8.&quot;"><id>tag:blogger.com,1999:blog-4279057743765095593.post-653836129531408040</id><published>2012-02-17T12:27:00.000-08:00</published><updated>2012-02-17T15:45:35.285-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-02-17T15:45:35.285-08:00</app:edited><title>Slow Printer?</title><content type="html">Fighting with a slow printer? &amp;nbsp;Here's some item to check that may improve your performance.&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-size: large;"&gt;Drivers, Drivers, Drivers&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Are you running the latest driver from the manufacturer? &amp;nbsp;If your PDF files are getting mangled or crashing your application, are you using a PostScript driver or PCL? &amp;nbsp;Try a different flavor.&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-size: large;"&gt;Memory&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Does your printer have expandable&amp;nbsp;memory? &amp;nbsp;You can consider adding memory, or using a front-end server for ripping. But, make certain your driver is configured to use the full memory of your device, or that your spooling options at the driver level rip&amp;nbsp;appropriately&amp;nbsp;for your&amp;nbsp;configuration.&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-size: large;"&gt;Print Processor&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
A new technique I discovered is the importance of the print processor. &amp;nbsp;Buried deep within the driver's Advanced settings, you'll find the Print Processor selection as show in the screenshot below.&lt;br /&gt;
&lt;br /&gt;
&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-lDakNQBkpa8/Tz6wgrnTq_I/AAAAAAAAAdE/XE8Eq-6tpz8/s1600/print-processor.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="320" src="http://2.bp.blogspot.com/-lDakNQBkpa8/Tz6wgrnTq_I/AAAAAAAAAdE/XE8Eq-6tpz8/s400/print-processor.png" width="400" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Deep within the print driver settings&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;
I've recently had a driver default to the &lt;i style="font-weight: bold;"&gt;winprint&lt;/i&gt;. &amp;nbsp;This slowed ripping significantly. &amp;nbsp;Switching to one of the native HP based items improved rip speed significantly. &amp;nbsp;Your mileage may vary.&lt;br /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;Happy printing!&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4279057743765095593-653836129531408040?l=www.eveningread.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/eveningread/~4/x7epb1ZXZZM" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.eveningread.com/feeds/653836129531408040/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.eveningread.com/2012/02/slow-printer.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4279057743765095593/posts/default/653836129531408040?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4279057743765095593/posts/default/653836129531408040?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/eveningread/~3/x7epb1ZXZZM/slow-printer.html" title="Slow Printer?" /><author><name>Andrew Vogel</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/-lDakNQBkpa8/Tz6wgrnTq_I/AAAAAAAAAdE/XE8Eq-6tpz8/s72-c/print-processor.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://www.eveningread.com/2012/02/slow-printer.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkEDRn48eip7ImA9WhRXEEg.&quot;"><id>tag:blogger.com,1999:blog-4279057743765095593.post-1861170776981319868</id><published>2011-12-16T07:51:00.000-08:00</published><updated>2011-12-16T07:51:17.072-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-12-16T07:51:17.072-08:00</app:edited><title>SSL for SSRS Using a CNAME</title><content type="html">&lt;div class="separator" style="clear: both; text-align: left;"&gt;Recently, I've been working on creating a basic reporting infrastructure. &amp;nbsp;For simplicity's sake, we're leveraging Log Shipping on a relatively small application database using SQL Server 2008 R2. &amp;nbsp;(Note: since this second instance is in active use, a second SQL Server license is required.)&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;Since we have a server naming convention that states if the server's role is replaced, the new host must have a different name, I want to make that transition transparent in the future. &amp;nbsp;I thought, let's leverage CNAMEs. &amp;nbsp;I created a new CNAME record in our internal DNS and aliased the actual host name.&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;Now, we wanted to force clients to only use HTTPS when connecting to SSRS, so I needed to get a certificate issued and installed and setup bindings. &amp;nbsp;Since this is for internal use and we have an Enterprise CA deployed, it was just a matter of requesting a certificate, except that I couldn't request a certificate based on the Web Server properties via the Computer certificate store.&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-KEvLjuulL3E/Tjgi8eaXFmI/AAAAAAAAAaY/dJ3AmPGumqg/s1600/cert-serv.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="161" src="http://3.bp.blogspot.com/-KEvLjuulL3E/Tjgi8eaXFmI/AAAAAAAAAaY/dJ3AmPGumqg/s400/cert-serv.jpg" width="400" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Certificate Templates on my Enterprise Certificate Authority&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;A quick hop over the the CA to adjust the security permissions to add Domain Computers for enrollment and I could request what I needed.&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/--AqtfJomwU0/Tjgi9J7fQHI/AAAAAAAAAao/7kqVl1r72Jw/s1600/template-security.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="241" src="http://1.bp.blogspot.com/--AqtfJomwU0/Tjgi9J7fQHI/AAAAAAAAAao/7kqVl1r72Jw/s400/template-security.jpg" width="400" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Adjusting security permissions for enrollment&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;div class="" style="clear: both; text-align: left;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="" style="clear: both; text-align: left;"&gt;And now I can finally get what I need:&lt;/div&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-aK5JReyt6Nk/Tjgi81iTpBI/AAAAAAAAAag/k381YyNjFKA/s1600/new-certificate.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="313" src="http://2.bp.blogspot.com/-aK5JReyt6Nk/Tjgi81iTpBI/AAAAAAAAAag/k381YyNjFKA/s400/new-certificate.jpg" width="400" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Initiate a certificate request from the local Computer certificate store&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;
&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-4e02LCpQY5w/Tjgi8iY7sMI/AAAAAAAAAac/e2-tFqVXcvA/s1600/enrollment.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="280" src="http://2.bp.blogspot.com/-4e02LCpQY5w/Tjgi8iY7sMI/AAAAAAAAAac/e2-tFqVXcvA/s400/enrollment.jpg" width="400" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Selecting a Web Server certificate&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;This is the catch, I need to add my internal single-part CNAME DNS record and then add Subject Alternate Names for my current server which is hidden behind that CNAME. &amp;nbsp;Currently, SSRS will bind the site to the primary name on the certificate by default. &amp;nbsp;If I simply requested a computer certificate, my subject name would be the internal FQDN of my server, which would render my CNAME setup useless.&lt;br /&gt;
&lt;br /&gt;
&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-ly-UR30rrCM/Tjgi81tWF8I/AAAAAAAAAak/jGSxPDvh0Rk/s1600/san-tastic.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="396" src="http://4.bp.blogspot.com/-ly-UR30rrCM/Tjgi81tWF8I/AAAAAAAAAak/jGSxPDvh0Rk/s400/san-tastic.jpg" width="400" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Adding my CNAME and SANs&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;Practical applications for doing this are for manually performed failover, or if you're really doing things right, you'll need this certificate (or a certificate like it) applied to every node in your NLB farm. &amp;nbsp;Additionally, consider the use of &lt;a href="http://msdn.microsoft.com/en-us/library/ms190445.aspx"&gt;aliases&lt;/a&gt;&amp;nbsp;for the convenience of client application&amp;nbsp;&lt;a href="http://sqlblog.com/blogs/roman_rehak/archive/2010/11/07/moving-sql-server-aliases-to-another-computer.aspx"&gt;deployments&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4279057743765095593-1861170776981319868?l=www.eveningread.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/eveningread/~4/ZY3JleoJ9w0" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.eveningread.com/feeds/1861170776981319868/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.eveningread.com/2011/12/ssl-for-ssrs-using-cname.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4279057743765095593/posts/default/1861170776981319868?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4279057743765095593/posts/default/1861170776981319868?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/eveningread/~3/ZY3JleoJ9w0/ssl-for-ssrs-using-cname.html" title="SSL for SSRS Using a CNAME" /><author><name>Andrew Vogel</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/-KEvLjuulL3E/Tjgi8eaXFmI/AAAAAAAAAaY/dJ3AmPGumqg/s72-c/cert-serv.jpg" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://www.eveningread.com/2011/12/ssl-for-ssrs-using-cname.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkMMRn8_fip7ImA9WhRQEEs.&quot;"><id>tag:blogger.com,1999:blog-4279057743765095593.post-7026495654382247949</id><published>2011-12-04T23:01:00.000-08:00</published><updated>2011-12-04T23:01:27.146-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-12-04T23:01:27.146-08:00</app:edited><title>Analyzing Vendor Recommendations</title><content type="html">&lt;div class="MsoNormal"&gt;&lt;span style="font-family: inherit;"&gt;Recently, I received some feedback from a vendor regarding changes I made to our customer's space-constrained application server, which hosts two user databases in a SQL Server 2005 instance. &amp;nbsp;Let's look at some of these recommendations, shall we? &amp;nbsp;These responses have more value for the vendor as learning points and thus weren't directly communicated with my customer. &amp;nbsp;Rather the discussion with my customer revolves around application ownership and&amp;nbsp;&lt;/span&gt;recoverability&lt;span style="font-family: inherit;"&gt;, and how those items align with their overall business needs.&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: inherit;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: inherit;"&gt;This is primarily in defense of my original actions, but brings up some important misconceptions around SQL Server, provides documentation for those myths, and discusses how to redress the issues so that the customer is served.&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: inherit;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-size: large;"&gt;Vendor Recommendations&lt;/span&gt;&lt;/div&gt;&lt;blockquote class="tr_bq"&gt;&lt;span style="font-family: inherit;"&gt;I realize it has been a while since I had setup my maintenance plan to backup the user databases and transaction logs, so I went in to see how they were doing. &amp;nbsp;But I see they are not there anymore.&lt;/span&gt;&lt;/blockquote&gt;&lt;div class="MsoNormal"&gt;Yes, I did change the existing maintenance plans. &amp;nbsp;They didn't cover system databases, &lt;a href="http://msdn.microsoft.com/en-us/library/dd207003.aspx"&gt;which are key for recoverability&lt;/a&gt;. &amp;nbsp;&lt;/div&gt;&lt;blockquote class="tr_bq"&gt;&lt;span style="font-family: inherit;"&gt;I also had a weekly maintenance plan to shrink the user databases.&lt;/span&gt;&lt;/blockquote&gt;&lt;div class="MsoNormal"&gt;The application server is space constrained, so for performance's sake, the &lt;a href="http://www.brentozar.com/archive/2009/08/stop-shrinking-your-database-files-seriously-now/"&gt;original Shrink Database item was removed&lt;/a&gt; from the plan and replaced with T-SQL code for targeting log files only for &lt;a href="http://support.microsoft.com/kb/907511"&gt;DBCC SHRINKFILE&lt;/a&gt; commands. &amp;nbsp;Joined with regular log backups, this would allow the OS to retain more free space for regular operation but still let us enjoy point-in-time recovery for user databases. &amp;nbsp;For a long term solution, this system needs more storage provisioned, period.&lt;/div&gt;&lt;blockquote class="tr_bq"&gt;&lt;span style="font-family: inherit;"&gt;The alerts you have setup have thresholds too low.&amp;nbsp; They don't take into account a database in "full" mode.&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/blockquote&gt;&lt;div class="MsoNormal"&gt;The metrics gathered were from PerfMon stats, namely&lt;a href="http://technet.microsoft.com/en-us/library/cc781394(WS.10).aspx"&gt; \\SERVER\MSSQL$INSTNACE\Database\Percent Log Used&lt;/a&gt; &amp;gt;= 90. &amp;nbsp;This metric is valid for any recovery model and can be easily illustrated by the well known &lt;a href="http://msdn.microsoft.com/en-us/library/ms189768.aspx"&gt;DBCC SQLPERF(LOGSPACE)&lt;/a&gt; query, which will show us both the percentage used and the size of the log itself. &amp;nbsp;This &lt;a href="http://msdn.microsoft.com/en-us/library/ms175495.aspx"&gt;metric matters in any case&lt;/a&gt;, and is logged to the Windows event log as an Error, not a Warning; its that important.&lt;/div&gt;&lt;blockquote class="tr_bq"&gt;&lt;span style="font-family: inherit;"&gt;And you should never get an alert on the tempdb system database.&amp;nbsp;&lt;/span&gt;&lt;/blockquote&gt;&lt;div class="MsoNormal"&gt;A full transaction log, regardless of which database it is for, will halt the writing of data. &amp;nbsp;Things that might be missing from this systems configuration is a service account with the SE_MANAGE_VOLUME_NAME permission to allow for &lt;a href="http://msdn.microsoft.com/en-us/library/ms175935.aspx"&gt;instant file initialization&lt;/a&gt; when auto-growth kicks in frequently to address the utilization issue, further propagating the alerts.&lt;/div&gt;&lt;blockquote class="tr_bq"&gt;&lt;span style="font-family: inherit;"&gt;I went out and looked at the physical size of these databases and log sizes.&amp;nbsp; They are very small compared to normal operation.&amp;nbsp; The alert settings need to be changed.&lt;/span&gt;&lt;/blockquote&gt;&lt;div class="MsoNormal"&gt;The database size isn't the issue in question (thought with Shrink Database commands, there will be fragmentation issues), but with a properly scheduled BACKUP LOG in conjuction with auto-growth enabled, a database log file will balance out with the volume of&amp;nbsp;transactions&amp;nbsp;hitting the database. &amp;nbsp;Another item to consider is &lt;a href="http://www.sqlskills.com/BLOGS/KIMBERLY/post/Transaction-Log-VLFs-too-many-or-too-few.aspx"&gt;the number of VLFs&lt;/a&gt; since there's a history of growing and shrinking logs.&lt;/div&gt;&lt;blockquote class="tr_bq"&gt;&lt;span style="font-family: inherit;"&gt;I am changing the user databases to "simple" recovery model for now.&amp;nbsp; Probably need to turn off the hourly transaction log backup for now. &amp;nbsp;&lt;/span&gt;&lt;/blockquote&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: inherit;"&gt;Yes, if you're changing recovery models, you're going to cause those explicitly typed BACKUP LOG jobs to fail.&lt;/span&gt;&lt;/div&gt;&lt;blockquote class="tr_bq"&gt;&lt;span style="font-family: inherit;"&gt;I have run the shrink database on the user databases and on tempdb.&lt;/span&gt;&lt;/blockquote&gt;I'm glad database size is a concern, but we should look at &lt;a href="http://msdn.microsoft.com/en-us/library/ms188776.aspx"&gt;sp_spaceused&lt;/a&gt; to see if we just plain need more space or if we're &lt;a href="http://sqlserverperformance.wordpress.com/2011/02/04/five-dmv-queries-that-will-make-you-a-superhero-in-2011/"&gt;potentially over-indexed&lt;/a&gt;. &amp;nbsp;And &lt;a href="http://sirsql.net/blog/2011/5/18/dont-shrink-tempdb.html"&gt;shrinking tempdb&lt;/a&gt; is &lt;a href="http://support.microsoft.com/kb/307487"&gt;documented to cause corruption&lt;/a&gt;.&lt;br /&gt;
&lt;blockquote class="tr_bq"&gt;&lt;span style="font-family: inherit;"&gt;I also see that the SQL backups are only for three days.&amp;nbsp; Are these being swapped out so that there are actually more days being stored somewhere else (offsite maybe)?.&lt;/span&gt;&lt;/blockquote&gt;&lt;div class="MsoNormal"&gt;&lt;o:p&gt;&lt;span style="font-family: inherit;"&gt;Looking at the larger picture, there is a VSS aware 3rd party backup system in place. &amp;nbsp;SQL Server backups exist for the purpose of near-line recoverablity and point-in-time recoverability. &amp;nbsp;Remember, we're space constrained, and you've just implimented a Shrink Database to address it, so we've only got so much space for backup retention.&amp;nbsp;&lt;/span&gt;&lt;/o:p&gt;&lt;/div&gt;&lt;blockquote class="tr_bq"&gt;&lt;span style="font-family: inherit;"&gt;Please do not change any general or options properties on the user databases.&amp;nbsp; I will maintain these.&amp;nbsp; Just let me know if you need something changed as some items can have&amp;nbsp;&lt;/span&gt;repercussions&lt;span style="font-family: inherit;"&gt;&amp;nbsp;on the functionallity of applications.&lt;/span&gt;&lt;/blockquote&gt;&lt;div class="MsoNormal"&gt;&lt;a href="http://www.brentozar.com/archive/2011/01/consulting-lines-sounds-like-youve-got-all-under-control/"&gt;It looks like you've got this under control&lt;/a&gt;. &amp;nbsp;The fact that &lt;a href="http://msdn.microsoft.com/en-us/library/bb510680.aspx"&gt;compatibility_level is set to 80&lt;/a&gt; and page_verify is set to &lt;a href="http://www.littlekendra.com/2011/01/25/pageverify/"&gt;CHECKSUM&lt;/a&gt; has me concerned. &amp;nbsp;Which do we really need?&lt;/div&gt;&lt;blockquote class="tr_bq"&gt;&lt;span style="font-family: inherit;"&gt;The biggest point here is that user applications are two completely separate systems sharing the SQL server.&amp;nbsp; They really need separate backup and maintenance plans as the data is used and maintained differently.&lt;/span&gt;&lt;/blockquote&gt;&lt;div class="MsoNormal"&gt;&lt;o:p&gt;&lt;span style="font-family: inherit;"&gt;Taking a holistic view of the application and server together, these backup plans may &lt;a href="http://sqlblog.com/blogs/merrill_aldrich/archive/2011/11/25/one-database-or-ten.aspx"&gt;need crash consistency between databases&lt;/a&gt;. &amp;nbsp;We've already shown that there are some unique issues with the compatilbity_level and "other general settings".&amp;nbsp;&lt;/span&gt;&lt;/o:p&gt;&lt;/div&gt;&lt;blockquote class="tr_bq"&gt;&lt;span style="font-family: inherit; font-size: small;"&gt;The SQL server is two service packs behind.&amp;nbsp; SQL Server 2005 should be on SP4. &amp;nbsp;&lt;/span&gt;&lt;/blockquote&gt;SQL Server 2005, even at Service Pack 4 with be &lt;a href="http://support.microsoft.com/lifecycle/?p1=2855"&gt;out of maintenance from Microsoft&lt;/a&gt; as of 12/2011. &amp;nbsp;And this doesn't jive with the compatibility_level request from earlier. &amp;nbsp;If I'm looking to future proof my application and move to SQL Server 2012, &lt;a href="http://technet.microsoft.com/en-us/library/bb510680(SQL.110).aspx"&gt;I won't be able to attach my database&lt;/a&gt;, let alone restore it.&lt;br /&gt;
&lt;br /&gt;
How can we be productive about these recommendations as consultant generalists and DBAs?&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-size: large;"&gt;Communicate&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Get the stake holders into a stand-up meeting. &amp;nbsp;Get the overall goals for the application written down. &amp;nbsp;What's our time to recovery needs? &amp;nbsp;What's our point in time recovery needs? &amp;nbsp;Who's responsible for what part of a disaster recovery? &amp;nbsp;How about performance? &amp;nbsp;What's the life-cycle of this application?&lt;br /&gt;
&lt;div class="MsoNormal"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-size: large;"&gt;Delegate&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal"&gt;Once the questions are answered, don't be afraid to let the 3rd party vendor handle the application the way your customer wants. &amp;nbsp;They've elected to utilize this vendor. &amp;nbsp;But be cautious, and take precautions. &amp;nbsp;In this example, I'll have to let the customer know we'll still be getting alerts and inform them of the ramifications of ignoring or permanently suppressing those notifications.&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-size: large;"&gt;Act&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal"&gt;Put your plan into action. &amp;nbsp;And, of course, backup, backup, backup. &amp;nbsp;Then test, test, test! &amp;nbsp;There's a ton of great information in the links above, so go do your homework so that you can act on knowledge, not assumptions.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4279057743765095593-7026495654382247949?l=www.eveningread.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/eveningread/~4/2L7VC0BZy8Q" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.eveningread.com/feeds/7026495654382247949/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.eveningread.com/2011/12/analyzing-vendor-recommendations.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4279057743765095593/posts/default/7026495654382247949?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4279057743765095593/posts/default/7026495654382247949?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/eveningread/~3/2L7VC0BZy8Q/analyzing-vendor-recommendations.html" title="Analyzing Vendor Recommendations" /><author><name>Andrew Vogel</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://www.eveningread.com/2011/12/analyzing-vendor-recommendations.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0MCSH46cCp7ImA9WhRRFUk.&quot;"><id>tag:blogger.com,1999:blog-4279057743765095593.post-2144817421792675182</id><published>2011-11-28T22:51:00.000-08:00</published><updated>2011-11-28T22:51:09.018-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-11-28T22:51:09.018-08:00</app:edited><title>A New Challenger Has Arrived</title><content type="html">Historically, I've run this blog on hand coded HTML, &lt;a href="http://www.wordpress.org/"&gt;Wordpress&lt;/a&gt;, and &lt;a href="http://www.textpattern.com/"&gt;Textpattern&lt;/a&gt;.&amp;nbsp; Those CMS platforms ran on Linux, Macs, and &lt;a href="http://www.joyent.com/"&gt;Solaris&lt;/a&gt; platforms.&amp;nbsp; And now it's all Google.&lt;br /&gt;
But what I really miss is my favorite CMS, Textpattern.&amp;nbsp; So in the interest of restoring some of my historical posts (namely, my Japan trips) and to challenge myself to learn the .NET development stack and &lt;a href="http://www.windowsazure.com/"&gt;Windows Azure&lt;/a&gt; platform, I've begun the challenge to recode Textpattern.&amp;nbsp; Okay, maybe not the whole thing, since Azure supports PHP, but at least get it into my RDBMS of choice, SQL Server.&amp;nbsp; So, where to begin?&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-size: large;"&gt;Development Platform&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
To easy my way into the Windows development world, I'm going to cheat and start with &lt;a href="http://www.microsoft.com/web/webmatrix/"&gt;WebMatrix&lt;/a&gt;.&amp;nbsp; It's fast, easy, free and has a &lt;a href="http://www.microsoft.com/web/downloads/platform.aspx"&gt;one-click installer&lt;/a&gt; for everything I need, named:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;WebMatrix IDE&lt;/li&gt;
&lt;li&gt;MySQL 5&lt;/li&gt;
&lt;li&gt;SQL Server Compac 4.0&lt;/li&gt;
&lt;li&gt;IIS Express&amp;nbsp;7.5&lt;/li&gt;
&lt;li&gt;PHP Extensions for PHP&lt;/li&gt;
&lt;/ul&gt;After I've installed the lot, it's a matter of getting the data replayed into a new database.&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-size: large;"&gt;Getting Your Data Back&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Before restoring, I had to brush up on MySQL syntax, but quickly discovered what I needed.&amp;nbsp; First open the MySQL prompt, connecting with the root password you set during the install.&amp;nbsp; Then create a target database:&lt;br /&gt;
&lt;blockquote&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: x-small;"&gt;mysql&amp;gt; create database textpattern;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: x-small;"&gt;mysql&amp;gt; use textpattern;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: x-small;"&gt;mysql&amp;gt; source C:\path\to\mysql-dump.sql;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: x-small;"&gt;mysql&amp;gt; exit;&lt;/span&gt;&lt;/blockquote&gt;That's all there is to it!&lt;br /&gt;
&lt;br /&gt;
&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-IOS1kGQ3-0A/TtR_kIOZOLI/AAAAAAAAAco/07m7c9fHzPw/s1600/replay-mysql-dump.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="202" src="http://2.bp.blogspot.com/-IOS1kGQ3-0A/TtR_kIOZOLI/AAAAAAAAAco/07m7c9fHzPw/s400/replay-mysql-dump.png" width="400" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;I can has data back!&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-size: large;"&gt;Connecting The Dots&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Next I created a new project in WebMatrix at the root folder of my extracted download of the latest version of Textpattern.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you'd like to take a look at your data from within WebMatrix, setup a database source connection to MySQL as in the screenshot below.&lt;br /&gt;
&lt;br /&gt;
&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-VxlTcJsbc2E/TtR_lOueY8I/AAAAAAAAAcw/q1b7IHdAOLU/s1600/connect-mysql.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="268" src="http://4.bp.blogspot.com/-VxlTcJsbc2E/TtR_lOueY8I/AAAAAAAAAcw/q1b7IHdAOLU/s320/connect-mysql.png" width="320" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Setup a MySQL Connection&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;
&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-l2S6QYavGCY/TtR_jCUv8uI/AAAAAAAAAcg/gJAnJ2OPUzo/s1600/my-txp-install.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="320" src="http://3.bp.blogspot.com/-l2S6QYavGCY/TtR_jCUv8uI/AAAAAAAAAcg/gJAnJ2OPUzo/s320/my-txp-install.png" width="146" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Look at those pretty tables&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;
Then, I renamed config-dist.php to match the MySQL settings I had configured, just as if I was deploying Textpattern for the first time.&lt;br /&gt;
&lt;br /&gt;
Launching the Textpattern admin interface for the first time forced a minor schema upgrade.&amp;nbsp; Then switching to the Admin interface, I updated my website URL to match my development environment for relative URIs, and that was all I had to do!&lt;br /&gt;
&lt;br /&gt;
Take a quick look at my 404 page, which is clearly not Apache!&lt;br /&gt;
&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-VcaHsrgXtgg/TtR_g91UDqI/AAAAAAAAAcY/-HwbuRgYGXY/s1600/iis-express-404.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="255" src="http://4.bp.blogspot.com/-VcaHsrgXtgg/TtR_g91UDqI/AAAAAAAAAcY/-HwbuRgYGXY/s400/iis-express-404.png" width="400" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Definitely not Kansas&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4279057743765095593-2144817421792675182?l=www.eveningread.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/eveningread/~4/RLQ8QNVC0UA" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.eveningread.com/feeds/2144817421792675182/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.eveningread.com/2011/11/new-challenger-has-arrived.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4279057743765095593/posts/default/2144817421792675182?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4279057743765095593/posts/default/2144817421792675182?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/eveningread/~3/RLQ8QNVC0UA/new-challenger-has-arrived.html" title="A New Challenger Has Arrived" /><author><name>Andrew Vogel</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/-IOS1kGQ3-0A/TtR_kIOZOLI/AAAAAAAAAco/07m7c9fHzPw/s72-c/replay-mysql-dump.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://www.eveningread.com/2011/11/new-challenger-has-arrived.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DU4EQ3kyeip7ImA9WhRSFkU.&quot;"><id>tag:blogger.com,1999:blog-4279057743765095593.post-5509003197614306991</id><published>2011-11-18T23:31:00.000-08:00</published><updated>2011-11-18T23:31:42.792-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-11-18T23:31:42.792-08:00</app:edited><title>Why, SSRS, Why?</title><content type="html">&lt;div class="separator" style="clear: both; text-align: left;"&gt;Once again, I've been digging into SSRS reporting. &amp;nbsp;Today, I thought to myself, I should had a multi-valued parameter to this report for filtering my tablix aggregations. &amp;nbsp;So, I created a data-set that was a self-join for gathering a list of Managers. &amp;nbsp;Easy enough, that'll work great for a drop-down selection. &amp;nbsp;But let's say a manager wants to only look at certain employees that they manage. &amp;nbsp;A multi-valued parameter would be great for this! &amp;nbsp;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-Q_9PmqzHL5A/TsdYxdiPrII/AAAAAAAAAcE/R1l9Ky6cXGc/s1600/MVP.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="330" src="http://3.bp.blogspot.com/-Q_9PmqzHL5A/TsdYxdiPrII/AAAAAAAAAcE/R1l9Ky6cXGc/s400/MVP.png" width="400" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;I'd like a side of extra values in an array, please.&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;Add one data-set for that scenario, and re-order the parameters for proper cascading.&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;Then it's just a matter of adding my managed employees MVP to the tablix filter, right? &amp;nbsp;Okay, here it is, I'll just double click it and get the right syntax.&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-xMckA4ciUio/TsdYxOwBioI/AAAAAAAAAb8/TEAokw5zo68/s1600/Default.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="363" src="http://2.bp.blogspot.com/-xMckA4ciUio/TsdYxOwBioI/AAAAAAAAAb8/TEAokw5zo68/s400/Default.png" width="400" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;What's wrong with this picture?&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;
So, why am I only getting one member's aggregates in my tablix? &amp;nbsp;This is some serious fail!&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-Y9dFfkFN3JU/TsdYxhXxYnI/AAAAAAAAAcM/TXZ07uv9dBs/s1600/What-You-Need.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="363" src="http://2.bp.blogspot.com/-Y9dFfkFN3JU/TsdYxhXxYnI/AAAAAAAAAcM/TXZ07uv9dBs/s400/What-You-Need.png" width="400" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Oh, of course!&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;div&gt;A few searches through MSDN for syntax &lt;a href="http://msdn.microsoft.com/en-us/library/aa337292(SQL.100).aspx"&gt;and we discover&lt;/a&gt; that for multi-valued parameters, appending "(0)" in your expression causes SSRS to query only the first value in your array. &amp;nbsp;I'm glad that got added by default when the parameter was an explicitly typed array. &amp;nbsp;Not very&amp;nbsp;conducive&amp;nbsp;for learning syntax on the fly. &amp;nbsp;But now we've got one (significantly more&amp;nbsp;readable) report.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4279057743765095593-5509003197614306991?l=www.eveningread.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/eveningread/~4/dOiddyjbi2w" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.eveningread.com/feeds/5509003197614306991/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.eveningread.com/2011/11/why-ssrs-why.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4279057743765095593/posts/default/5509003197614306991?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4279057743765095593/posts/default/5509003197614306991?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/eveningread/~3/dOiddyjbi2w/why-ssrs-why.html" title="Why, SSRS, Why?" /><author><name>Andrew Vogel</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/-Q_9PmqzHL5A/TsdYxdiPrII/AAAAAAAAAcE/R1l9Ky6cXGc/s72-c/MVP.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://www.eveningread.com/2011/11/why-ssrs-why.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkMAQX05eSp7ImA9WhdaFUs.&quot;"><id>tag:blogger.com,1999:blog-4279057743765095593.post-7933500057769171774</id><published>2011-10-25T09:34:00.000-07:00</published><updated>2011-10-25T09:34:00.321-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-10-25T09:34:00.321-07:00</app:edited><title>More Schema Fun</title><content type="html">So let's say you don't have any sort of Exchange on premises for an Office 365 deployment. &amp;nbsp;You have Active Directory on premises for authentication and some local storage for things like QuickBooks or large volumes of CAD drawings. &amp;nbsp;Office 365 seems like a good fit for a small organization because you just don't need those extra servers and management overhead.&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-size: large;"&gt;Wait, wait! Don't tell me!&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
But once again, schema matters, because when you created a new user, even though you set their eUPN accordingly, they're getting email&amp;nbsp;aliases&amp;nbsp;with &lt;a href="http://community.office365.com/en-us/f/148/t/310.aspx?PageIndex=2"&gt;that pesky &lt;b&gt;&lt;i&gt;onmicrosoft.com&lt;/i&gt;&lt;/b&gt; domain&lt;/a&gt; as the primary alias. &amp;nbsp;So you think, &lt;i&gt;It's just Exchange 2010, I'll use PowerShell remoting and do some wizardry behind the scenes.&lt;/i&gt;&amp;nbsp; Nope, fail. &amp;nbsp;You can't. &amp;nbsp;The primary SMTP alias comes from an Active Directory property that's automatically populated in domains with on premises Exchange when you create a user's mailbox.&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-size: large;"&gt;Enter the ADSIEdit&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
If you've been an Exchange administrator for a while, you've probably played with the proxyAddresses attribute before. &amp;nbsp;I've mentioned it before when you're looking to add a secondary alias. &amp;nbsp;But if you don't even have a primary alias, you'll be seeing this:&lt;br /&gt;
&lt;br /&gt;
&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-O00et2L7REM/TqbhtK8twLI/AAAAAAAAAbg/wlIbInK3bRs/s1600/User-Properties.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="336" src="http://4.bp.blogspot.com/-O00et2L7REM/TqbhtK8twLI/AAAAAAAAAbg/wlIbInK3bRs/s400/User-Properties.png" width="400" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;proxyAddresses is undefined&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;
Launching &lt;b&gt;&lt;i&gt;ADSIEdit&lt;/i&gt;&amp;nbsp;&lt;/b&gt;from &lt;i style="font-weight: bold;"&gt;Administrator Tools&lt;/i&gt;&amp;nbsp;on the &lt;i style="font-weight: bold;"&gt;Start Menu&lt;/i&gt;&amp;nbsp;gets us going. &amp;nbsp;Connect to your &lt;i style="font-weight: bold;"&gt;Default Naming Context&lt;/i&gt;&amp;nbsp;and drill down to your user object. &amp;nbsp;Right clicking the user allows you to select &lt;i style="font-weight: bold;"&gt;Properties&lt;/i&gt;. &amp;nbsp;Double check that the &lt;i style="font-weight: bold;"&gt;Show only attributes that have values&lt;/i&gt;&amp;nbsp;is unchecked.&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;Drilling down through our list you'll see that &lt;i style="font-weight: bold;"&gt;proxyAddresses&lt;/i&gt;&amp;nbsp;is blank. &amp;nbsp;Set it to &lt;i style="font-weight: bold;"&gt;SMTP:youralias@vanitydomain.com&lt;/i&gt;. &amp;nbsp;Make sure that you have one and only one address with the &lt;i style="font-weight: bold;"&gt;SMTP&lt;/i&gt;&amp;nbsp;capitalized. &amp;nbsp;Hop over to your &lt;i style="font-weight: bold;"&gt;Directory&amp;nbsp;&lt;/i&gt;&lt;b&gt;&lt;i&gt;Synchronization&lt;/i&gt;&lt;/b&gt;&amp;nbsp;host and re-run the &lt;i&gt;&lt;b&gt;Directory&amp;nbsp;Synchronization&amp;nbsp;Configuration&lt;/b&gt;&lt;/i&gt;&amp;nbsp;wizard.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;Other Cool Stuff&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;Let's say you want to see who you've missed this property on before. &amp;nbsp;If you launch &lt;i style="font-weight: bold;"&gt;ADUC&lt;/i&gt;, you can create a custom query and configure an LDAP filter:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;(&amp;amp;(objectClass=User)(!proxyAddresses=*SMTP*))&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4279057743765095593-7933500057769171774?l=www.eveningread.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/eveningread/~4/AZ3ncAgPkQ0" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.eveningread.com/feeds/7933500057769171774/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.eveningread.com/2011/10/more-schema-fun.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4279057743765095593/posts/default/7933500057769171774?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4279057743765095593/posts/default/7933500057769171774?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/eveningread/~3/AZ3ncAgPkQ0/more-schema-fun.html" title="More Schema Fun" /><author><name>Andrew Vogel</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/-O00et2L7REM/TqbhtK8twLI/AAAAAAAAAbg/wlIbInK3bRs/s72-c/User-Properties.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://www.eveningread.com/2011/10/more-schema-fun.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUEGRn88fip7ImA9WhdaEU8.&quot;"><id>tag:blogger.com,1999:blog-4279057743765095593.post-1136053047809219651</id><published>2011-10-20T08:13:00.000-07:00</published><updated>2011-10-20T08:13:47.176-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-10-20T08:13:47.176-07:00</app:edited><title>Office 365: Schema Matters</title><content type="html">We just pushed an a la carte deployment of Microsoft Online services in order to eliminate the on-premises requirements for Lync. &amp;nbsp;In the process, we discovered that our legacy OCS 2007 internal-only deployment caused some schema issues for us. &amp;nbsp;We had politely&amp;nbsp;decommissioned&amp;nbsp;the OCS host by un-registering the various roles, uninstalling the application, then eventually disjoining it from the domain.&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-size: large;"&gt;The evils of directory synchronization&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
But this environment is running ADFS2 and DirSync for a unified single sign-on experience. &amp;nbsp;That means any AD schema extensions we have regarding Exchange or Lync/OCS are&amp;nbsp;propagated&amp;nbsp;to the cloud. &amp;nbsp;The most&amp;nbsp;critical&amp;nbsp;property is msRTCSIP-UserEnabled. &amp;nbsp;Anyone who logged into OCS in the legacy deployment has this attribute, and during the above&amp;nbsp;decommissioning&amp;nbsp;procedures, it is set to FALSE by the installers. &amp;nbsp;Give it 3 hours, and now you have licensed users in Office 365, who have AD properties to the contrary. &amp;nbsp;But you can't change it from the cloud, you have to change it in your AD and force a synchronization.&lt;br /&gt;
&lt;br /&gt;
&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-7axBhYoby1o/Tp8ZVv4ELZI/AAAAAAAAAbE/H1dgchkcjh8/s1600/msRTCSIP-UserEnabled.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/-7axBhYoby1o/Tp8ZVv4ELZI/AAAAAAAAAbE/H1dgchkcjh8/s1600/msRTCSIP-UserEnabled.png" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Don't let this happen to you.&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;ADModify.net to the rescue&lt;/span&gt;&lt;br /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;Enter my favorite ADDS tool (and soon to be yours), &lt;a href="http://admodify.codeplex.com/"&gt;ADModify.net&lt;/a&gt;. &amp;nbsp;This tool uses LDAP calls to ADDS, scripting mass changes behind the scenes. &amp;nbsp;This is useful not only for resolving this problem, but also for setting your &lt;a href="http://blogs.dirteam.com/blogs/jorge/archive/2010/10/13/user-principal-names-in-ad-part-1.aspx"&gt;eUPN&lt;/a&gt; to your vanity domain for all desired Office 365 users. &amp;nbsp;It's also a portable app you can keep on a USB drive for quickly making changes at customer sites.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;Before we solve our problem, don't forget to add &lt;i style="font-weight: bold;"&gt;%sAMAccountName%&lt;/i&gt;&amp;nbsp;in the &lt;i style="font-weight: bold;"&gt;Legacy Account&lt;/i&gt;&amp;nbsp;field of the &lt;i style="font-weight: bold;"&gt;Account&lt;/i&gt;&amp;nbsp;tab, or you'll blank out everyone's UPNs! &amp;nbsp;It's simple to resolve, but easy to miss.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-KXautedn79A/Tp9KZDMfdFI/AAAAAAAAAbM/nrQSWQXNErs/s1600/admod-upn.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="400" src="http://3.bp.blogspot.com/-KXautedn79A/Tp9KZDMfdFI/AAAAAAAAAbM/nrQSWQXNErs/s400/admod-upn.png" width="315" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Set that eUPN, but don't forget %sAMAccountName%&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;
Moving on to the &lt;i style="font-weight: bold;"&gt;Custom&lt;/i&gt;&amp;nbsp;tab, check the &lt;i style="font-weight: bold;"&gt;Make a customized attribute modification&lt;/i&gt;&amp;nbsp;and specify our troublesome property, &lt;i style="font-weight: bold;"&gt;msRTCSIP-UserEnabled&lt;/i&gt;, and set it to &lt;i style="font-weight: bold;"&gt;TRUE&lt;/i&gt;. &amp;nbsp;Note, this will add the property to any objects that currently do not have it, so select users judiciously.&lt;br /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-1xtklf9enPU/Tp9KbpLjnsI/AAAAAAAAAbU/uKSuP8nKN1Q/s1600/admod-msRTCSIP-UserEnabled.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="400" src="http://1.bp.blogspot.com/-1xtklf9enPU/Tp9KbpLjnsI/AAAAAAAAAbU/uKSuP8nKN1Q/s400/admod-msRTCSIP-UserEnabled.png" width="315" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Set a custom attribute, for everyone.&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;div&gt;&lt;br /&gt;
&lt;div&gt;Hit &lt;i style="font-weight: bold;"&gt;Go!&lt;/i&gt;&amp;nbsp;then jump on your DirSync server and &lt;a href="http://onlinehelp.microsoft.com/en-us/office365-enterprises/996fa36d-b4ea-441d-aacd-39a59a21b59f#BKMK_SynchronizeDirectories"&gt;force a synchronization&lt;/a&gt; and it's off to the races for Lync.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;Why do I care?&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;You probably asking why this even matters. &amp;nbsp;Well, with DirSync, if you have a property Microsoft cares about (pretty much from any co-existence scenario), then Microsoft is going to take that objects property and put it in their AD. &amp;nbsp;Say you're in an organization that never had on-premises Exchange and you move to Office 365. &amp;nbsp;Well that means with SSO and DirSync, you won't be able to set the &lt;a href="http://www.messageops.com/attributes-synchronized-by-microsoft-online-directory-synchronization"&gt;msExchangeHideFromAddressLists property&lt;/a&gt;, because your schema doesn't have it. &amp;nbsp;And you can't make that change via remote PowerShell or the Exchange Online console because Microsoft expects it to come from your on-premises AD.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;So, know your limits. &amp;nbsp;And also know your recent schema changes and how to look for differences between objects.&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4279057743765095593-1136053047809219651?l=www.eveningread.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/eveningread/~4/4NXtDucMD2Q" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.eveningread.com/feeds/1136053047809219651/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.eveningread.com/2011/10/office-365-schema-matters.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4279057743765095593/posts/default/1136053047809219651?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4279057743765095593/posts/default/1136053047809219651?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/eveningread/~3/4NXtDucMD2Q/office-365-schema-matters.html" title="Office 365: Schema Matters" /><author><name>Andrew Vogel</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/-7axBhYoby1o/Tp8ZVv4ELZI/AAAAAAAAAbE/H1dgchkcjh8/s72-c/msRTCSIP-UserEnabled.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://www.eveningread.com/2011/10/office-365-schema-matters.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DE4ASX4zfCp7ImA9WhdXE0U.&quot;"><id>tag:blogger.com,1999:blog-4279057743765095593.post-7742610613206776319</id><published>2011-08-26T12:26:00.000-07:00</published><updated>2011-08-26T12:29:08.084-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-08-26T12:29:08.084-07:00</app:edited><title>Add a secondary alias to a federated Office 365 mailbox</title><content type="html">Today, Joe called and asked me why he couldn't get emails at &lt;b&gt;&lt;i&gt;joesph@contoso.com&lt;/i&gt;&lt;/b&gt;. &amp;nbsp;Well, his account was setup for &lt;b&gt;&lt;i&gt;joe@contoso.com&lt;/i&gt;&lt;/b&gt; and that's also his UPN in Active Directory. &amp;nbsp;His business cards have already been printed and he's been using his email to send, so we can't just re-create things.&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-size: large;"&gt;Office 365, open the pod bay doors&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Now, you could just log into Office 365, click on &lt;b&gt;&lt;i&gt;Manage&lt;/i&gt;&amp;nbsp;&lt;/b&gt;under &lt;i style="font-weight: bold;"&gt;Exchange Online&lt;/i&gt;, find the user's mailbox and add the address under &lt;i style="font-weight: bold;"&gt;E-mail Addresses&lt;/i&gt;. &amp;nbsp;But since your using SSO with Federation, you're getting this lovely message:&lt;br /&gt;
&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-AxL6OvCd3iY/Tlfwum3thKI/AAAAAAAAAa0/3fEIZ4MDlek/s1600/web-manage-fail.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="223" src="http://2.bp.blogspot.com/-AxL6OvCd3iY/Tlfwum3thKI/AAAAAAAAAa0/3fEIZ4MDlek/s400/web-manage-fail.jpg" width="400" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;I'm sorry, Dave. I can't do that.&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;Really, open the bay doors, please&lt;/span&gt;&lt;br /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;Well, if you managed to get SSO and Federation configured, you're probably already familiar with the key to this process, ADSIEdit. &amp;nbsp;Launch it and connect to the &lt;i style="font-weight: bold;"&gt;Default naming context&lt;/i&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-DIRwPONpbJw/TlfwuJF6iRI/AAAAAAAAAas/Tfw-UQKqEog/s1600/adsi-default-naming-context.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="305" src="http://4.bp.blogspot.com/-DIRwPONpbJw/TlfwuJF6iRI/AAAAAAAAAas/Tfw-UQKqEog/s400/adsi-default-naming-context.jpg" width="400" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Step 1: Get the Blue Key&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;Drill down through the schema until you find your user object, right click it and select &lt;i style="font-weight: bold;"&gt;Properties&lt;/i&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-9WyGPKEENk8/TlfwugJhk5I/AAAAAAAAAaw/hB0GqMhlbnk/s1600/proxyAddresses.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="261" src="http://4.bp.blogspot.com/-9WyGPKEENk8/TlfwugJhk5I/AAAAAAAAAaw/hB0GqMhlbnk/s400/proxyAddresses.jpg" width="400" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Step 2: Get the Red key&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&amp;nbsp;Locate the &lt;i style="font-weight: bold;"&gt;proxyAddresses&lt;/i&gt;&amp;nbsp;property and edit it. &amp;nbsp;Add your secondary alias using the following format (capitalization&amp;nbsp;matters, significantly!):&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: center;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;smtp:useralternate@contoso.com&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;
Note the existing alias with a capitalized &lt;b&gt;&lt;i&gt;SMTP&lt;/i&gt;&lt;/b&gt;. &amp;nbsp;That means it's the primary, so we don't want to mess with it. &amp;nbsp;Click &lt;i style="font-weight: bold;"&gt;OK&lt;/i&gt;&amp;nbsp;all the way back out of ADSIEdit and head over to your DirectorySync server. &amp;nbsp;Launch &lt;b&gt;&lt;i&gt;%programfiles%\Microsoft Online Directory Sync\DirSyncConfigShell.ps1&lt;/i&gt;&lt;/b&gt; and type:&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: center;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;Start-OnlineCoexistenceSync&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;
Later, log into the management console of Exchange Online and you should see the results you need:&lt;br /&gt;
&lt;br /&gt;
&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-eSy0YWk2W8Q/Tlfy-RJSJpI/AAAAAAAAAa4/z2Lg7EEgD3Y/s1600/the-pod-bay.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="400" src="http://2.bp.blogspot.com/-eSy0YWk2W8Q/Tlfy-RJSJpI/AAAAAAAAAa4/z2Lg7EEgD3Y/s400/the-pod-bay.jpg" width="346" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Look, it's the pod bay, finally!&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;
And according to the references below, if we extend the Active Directory schema for Exchange 2010 SP1, we can leverage additional Active Directory properties that will replicate up to Office 365 and take effect. &amp;nbsp;Or we could all learn &lt;a href="http://www.mikepfeiffer.net/2010/11/office-365-connecting-to-exchange-online-with-remote-powershell/"&gt;PowerShell remoting&lt;/a&gt;, which I've used a few times already for other items, like mass contact creation, but I'll leave that as an exercise for the reader.&lt;br /&gt;
&lt;br /&gt;
References:&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://community.office365.com/en-us/f/158/p/7857/32254.aspx#32254"&gt;http://community.office365.com/en-us/f/158/p/7857/32254.aspx#32254&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://onlinehelp.microsoft.com/en-us/office365-enterprises/996fa36d-b4ea-441d-aacd-39a59a21b59f#BKMK_SynchronizeDirectories"&gt;http://onlinehelp.microsoft.com/en-us/office365-enterprises/996fa36d-b4ea-441d-aacd-39a59a21b59f#BKMK_SynchronizeDirectories&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4279057743765095593-7742610613206776319?l=www.eveningread.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/eveningread/~4/_x4oKaNIK-U" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.eveningread.com/feeds/7742610613206776319/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.eveningread.com/2011/08/add-secondary-alias-to-federated-office.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4279057743765095593/posts/default/7742610613206776319?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4279057743765095593/posts/default/7742610613206776319?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/eveningread/~3/_x4oKaNIK-U/add-secondary-alias-to-federated-office.html" title="Add a secondary alias to a federated Office 365 mailbox" /><author><name>Andrew Vogel</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/-AxL6OvCd3iY/Tlfwum3thKI/AAAAAAAAAa0/3fEIZ4MDlek/s72-c/web-manage-fail.jpg" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://www.eveningread.com/2011/08/add-secondary-alias-to-federated-office.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0MMQXo4eSp7ImA9WhdQFk8.&quot;"><id>tag:blogger.com,1999:blog-4279057743765095593.post-3473888811987387036</id><published>2011-08-17T16:58:00.000-07:00</published><updated>2011-08-17T16:58:00.431-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-08-17T16:58:00.431-07:00</app:edited><title>Refactoring sp_spaceused</title><content type="html">A while back I refactored sp_spaceused into CTEs. &amp;nbsp;One query would return the total for a database, the other would return totals for individual user objects within the current execution context. &amp;nbsp;This only accounted for on-page data, which the original stored procedure does manage. &amp;nbsp;I keep finding myself running the object level query to determine which tables are index heavy or are ready for historical archiving, both of which are&amp;nbsp;especially&amp;nbsp;handy when you're working with the storage limitation of Express Edition. &amp;nbsp;(Sample &lt;a href="http://kb.vmware.com/selfservice/microsites/search.do?language=en_US&amp;amp;cmd=displayKC&amp;amp;externalId=1025914"&gt;use&lt;/a&gt; &lt;a href="http://kb.vmware.com/selfservice/microsites/search.do?cmd=displayKC&amp;amp;externalId=1007453"&gt;cases&lt;/a&gt;)&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;&lt;u&gt;Disclaimer: By following any of these activities you hold the author harmless of any effects, averse or otherwise. &amp;nbsp;There's no fitness or guarantee for this information.&amp;nbsp;&lt;/u&gt;&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;code style="font-size: 12px;"&gt;&lt;span style="color: blue;"&gt;WITH &lt;/span&gt;&lt;span style="color: black;"&gt;size_calculations &lt;/span&gt;&lt;span style="color: grey;"&gt;(&lt;/span&gt;&lt;span style="color: black;"&gt;objectid&lt;/span&gt;&lt;span style="color: grey;"&gt;, &lt;/span&gt;&lt;span style="color: black;"&gt;reserved_pages&lt;/span&gt;&lt;span style="color: grey;"&gt;, &lt;/span&gt;&lt;span style="color: black;"&gt;used_pages&lt;/span&gt;&lt;span style="color: grey;"&gt;, &lt;/span&gt;&lt;span style="color: black;"&gt;pages&lt;/span&gt;&lt;span style="color: grey;"&gt;, &lt;/span&gt;&lt;span style="color: black;"&gt;num_rows&lt;/span&gt;&lt;span style="color: grey;"&gt;)&lt;/span&gt;&lt;span style="color: blue;"&gt;AS &lt;/span&gt;&lt;span style="color: grey;"&gt;(&lt;/span&gt;&lt;span style="color: blue;"&gt;SELECT &lt;/span&gt;&lt;span style="color: black;"&gt;[OBJECT_ID] &lt;/span&gt;&lt;span style="color: blue;"&gt;AS &lt;/span&gt;&lt;span style="color: black;"&gt;[objectid]&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: grey;"&gt;, &lt;/span&gt;&lt;span style="color: magenta;"&gt;SUM&lt;/span&gt;&lt;span style="color: grey;"&gt;(&lt;/span&gt;&lt;span style="color: black;"&gt;reserved_page_count&lt;/span&gt;&lt;span style="color: grey;"&gt;) &lt;/span&gt;&lt;span style="color: blue;"&gt;AS &lt;/span&gt;&lt;span style="color: black;"&gt;[reserved_pages]&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: grey;"&gt;, &lt;/span&gt;&lt;span style="color: magenta;"&gt;SUM&lt;/span&gt;&lt;span style="color: grey;"&gt;(&lt;/span&gt;&lt;span style="color: black;"&gt;used_page_count&lt;/span&gt;&lt;span style="color: grey;"&gt;) &lt;/span&gt;&lt;span style="color: blue;"&gt;AS &lt;/span&gt;&lt;span style="color: black;"&gt;[used_pages]&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: grey;"&gt;, &lt;/span&gt;&lt;span style="color: magenta;"&gt;SUM&lt;/span&gt;&lt;span style="color: grey;"&gt;( &lt;/span&gt;&lt;span style="color: magenta;"&gt;CASE&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;WHEN &lt;/span&gt;&lt;span style="color: grey;"&gt;(&lt;/span&gt;&lt;span style="color: black;"&gt;index_id &lt;/span&gt;&lt;span style="color: grey;"&gt;&amp;lt; &lt;/span&gt;&lt;span style="color: black;"&gt;2&lt;/span&gt;&lt;span style="color: grey;"&gt;) &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;THEN &lt;/span&gt;&lt;span style="color: grey;"&gt;(&lt;/span&gt;&lt;span style="color: black;"&gt;in_row_data_page_count &lt;/span&gt;&lt;span style="color: grey;"&gt;+ &lt;/span&gt;&lt;span style="color: black;"&gt;lob_used_page_count &lt;/span&gt;&lt;span style="color: grey;"&gt;+ &lt;/span&gt;&lt;span style="color: black;"&gt;row_overflow_used_page_count&lt;/span&gt;&lt;span style="color: grey;"&gt;)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;ELSE &lt;/span&gt;&lt;span style="color: black;"&gt;lob_used_page_count &lt;/span&gt;&lt;span style="color: grey;"&gt;+ &lt;/span&gt;&lt;span style="color: black;"&gt;row_overflow_used_page_count&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;END&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: grey;"&gt;) &lt;/span&gt;&lt;span style="color: blue;"&gt;AS &lt;/span&gt;&lt;span style="color: black;"&gt;[pages]&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: grey;"&gt;, &lt;/span&gt;&lt;span style="color: magenta;"&gt;SUM&lt;/span&gt;&lt;span style="color: grey;"&gt;( &lt;/span&gt;&lt;span style="color: magenta;"&gt;CASE&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;WHEN &lt;/span&gt;&lt;span style="color: grey;"&gt;(&lt;/span&gt;&lt;span style="color: black;"&gt;index_id &lt;/span&gt;&lt;span style="color: grey;"&gt;&amp;lt; &lt;/span&gt;&lt;span style="color: black;"&gt;2&lt;/span&gt;&lt;span style="color: grey;"&gt;) &lt;/span&gt;&lt;span style="color: blue;"&gt;THEN &lt;/span&gt;&lt;span style="color: black;"&gt;row_count&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;ELSE &lt;/span&gt;&lt;span style="color: black;"&gt;0&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;END&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: grey;"&gt;) &lt;/span&gt;&lt;span style="color: blue;"&gt;AS &lt;/span&gt;&lt;span style="color: black;"&gt;[num_rows]&lt;/span&gt;&lt;span style="color: blue;"&gt;FROM &lt;/span&gt;&lt;span style="color: black;"&gt;sys.dm_db_partition_stats&lt;/span&gt;&lt;span style="color: blue;"&gt;GROUP BY &lt;/span&gt;&lt;span style="color: black;"&gt;[object_id]&lt;/span&gt;&lt;span style="color: grey;"&gt;)&lt;/span&gt;&lt;span style="color: blue;"&gt;SELECT &lt;/span&gt;&lt;span style="color: magenta;"&gt;OBJECT_NAME&lt;/span&gt;&lt;span style="color: grey;"&gt;(&lt;/span&gt;&lt;span style="color: black;"&gt;SC.objectid&lt;/span&gt;&lt;span style="color: grey;"&gt;) &lt;/span&gt;&lt;span style="color: blue;"&gt;AS &lt;/span&gt;&lt;span style="color: black;"&gt;[name]&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: grey;"&gt;, &lt;/span&gt;&lt;span style="color: black;"&gt;SC.num_rows &lt;/span&gt;&lt;span style="color: blue;"&gt;AS &lt;/span&gt;&lt;span style="color: black;"&gt;[rows]&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: grey;"&gt;, (&lt;/span&gt;&lt;span style="color: black;"&gt;SC.reserved_pages &lt;/span&gt;&lt;span style="color: grey;"&gt;* &lt;/span&gt;&lt;span style="color: black;"&gt;8&lt;/span&gt;&lt;span style="color: grey;"&gt;) &lt;/span&gt;&lt;span style="color: blue;"&gt;AS &lt;/span&gt;&lt;span style="color: black;"&gt;[reserved_kb]&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: grey;"&gt;, (&lt;/span&gt;&lt;span style="color: black;"&gt;SC.pages &lt;/span&gt;&lt;span style="color: grey;"&gt;* &lt;/span&gt;&lt;span style="color: black;"&gt;8&lt;/span&gt;&lt;span style="color: grey;"&gt;) &lt;/span&gt;&lt;span style="color: blue;"&gt;AS &lt;/span&gt;&lt;span style="color: black;"&gt;[data_kb]&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: grey;"&gt;, ((&lt;/span&gt;&lt;span style="color: magenta;"&gt;CASE &lt;/span&gt;&lt;span style="color: blue;"&gt;WHEN &lt;/span&gt;&lt;span style="color: black;"&gt;SC.used_pages &lt;/span&gt;&lt;span style="color: grey;"&gt;&amp;gt; &lt;/span&gt;&lt;span style="color: black;"&gt;SC.pages &lt;/span&gt;&lt;span style="color: blue;"&gt;THEN &lt;/span&gt;&lt;span style="color: grey;"&gt;(&lt;/span&gt;&lt;span style="color: black;"&gt;SC.used_pages &lt;/span&gt;&lt;span style="color: grey;"&gt;- &lt;/span&gt;&lt;span style="color: black;"&gt;SC.pages&lt;/span&gt;&lt;span style="color: grey;"&gt;) &lt;/span&gt;&lt;span style="color: blue;"&gt;ELSE &lt;/span&gt;&lt;span style="color: black;"&gt;0 &lt;/span&gt;&lt;span style="color: blue;"&gt;END&lt;/span&gt;&lt;span style="color: grey;"&gt;) * &lt;/span&gt;&lt;span style="color: black;"&gt;8&lt;/span&gt;&lt;span style="color: grey;"&gt;) &lt;/span&gt;&lt;span style="color: blue;"&gt;AS &lt;/span&gt;&lt;span style="color: black;"&gt;[index_size_kb]&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: grey;"&gt;, ((&lt;/span&gt;&lt;span style="color: magenta;"&gt;CASE &lt;/span&gt;&lt;span style="color: blue;"&gt;WHEN &lt;/span&gt;&lt;span style="color: black;"&gt;SC.reserved_pages &lt;/span&gt;&lt;span style="color: grey;"&gt;&amp;gt; &lt;/span&gt;&lt;span style="color: black;"&gt;SC.used_pages &lt;/span&gt;&lt;span style="color: blue;"&gt;THEN &lt;/span&gt;&lt;span style="color: grey;"&gt;(&lt;/span&gt;&lt;span style="color: black;"&gt;SC.reserved_pages &lt;/span&gt;&lt;span style="color: grey;"&gt;-&lt;/span&gt;&lt;span style="color: black;"&gt;SC.used_pages&lt;/span&gt;&lt;span style="color: grey;"&gt;) &lt;/span&gt;&lt;span style="color: blue;"&gt;ELSE &lt;/span&gt;&lt;span style="color: black;"&gt;0 &lt;/span&gt;&lt;span style="color: blue;"&gt;END&lt;/span&gt;&lt;span style="color: grey;"&gt;) * &lt;/span&gt;&lt;span style="color: black;"&gt;8&lt;/span&gt;&lt;span style="color: grey;"&gt;) &lt;/span&gt;&lt;span style="color: blue;"&gt;AS &lt;/span&gt;&lt;span style="color: black;"&gt;[unused_kb]&lt;/span&gt;&lt;/code&gt;&lt;br /&gt;
&lt;code style="font-size: 12px;"&gt;&lt;span style="color: blue;"&gt;FROM &lt;/span&gt;&lt;span style="color: black;"&gt;size_calculations &lt;/span&gt;&lt;span style="color: blue;"&gt;AS &lt;/span&gt;&lt;span style="color: black;"&gt;SC&lt;/span&gt;&lt;/code&gt;&lt;br /&gt;
&lt;code style="font-size: 12px;"&gt;&lt;span style="color: blue;"&gt;INNER JOIN &lt;/span&gt;&lt;span style="color: black;"&gt;sys.objects &lt;/span&gt;&lt;span style="color: blue;"&gt;AS &lt;/span&gt;&lt;span style="color: black;"&gt;O&lt;/span&gt;&lt;/code&gt;&lt;br /&gt;
&lt;code style="font-size: 12px;"&gt;&lt;span style="color: blue;"&gt;ON &lt;/span&gt;&lt;span style="color: black;"&gt;SC.[objectid] &lt;/span&gt;&lt;span style="color: blue;"&gt;= &lt;/span&gt;&lt;span style="color: black;"&gt;O.[object_id]&lt;/span&gt;&lt;/code&gt;&lt;br /&gt;
&lt;code style="font-size: 12px;"&gt;&lt;span style="color: blue;"&gt;WHERE &lt;/span&gt;&lt;span style="color: black;"&gt;O.&lt;/span&gt;&lt;span style="color: blue;"&gt;TYPE = &lt;/span&gt;&lt;span style="color: red;"&gt;'U'&lt;/span&gt;&lt;/code&gt;&lt;br /&gt;
&lt;code style="font-size: 12px;"&gt;&lt;span style="color: blue;"&gt;ORDER BY &lt;/span&gt;&lt;span style="color: black;"&gt;SC.reserved_pages &lt;/span&gt;&lt;span style="color: blue;"&gt;DESC&lt;/span&gt;&lt;span style="color: grey;"&gt;;&lt;/span&gt;&lt;/code&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4279057743765095593-3473888811987387036?l=www.eveningread.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/eveningread/~4/E_17gWjB0J8" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.eveningread.com/feeds/3473888811987387036/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.eveningread.com/2011/08/refactoring-spspaceused.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4279057743765095593/posts/default/3473888811987387036?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4279057743765095593/posts/default/3473888811987387036?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/eveningread/~3/E_17gWjB0J8/refactoring-spspaceused.html" title="Refactoring sp_spaceused" /><author><name>Andrew Vogel</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://www.eveningread.com/2011/08/refactoring-spspaceused.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEUMQ3kyfip7ImA9WhdRGEk.&quot;"><id>tag:blogger.com,1999:blog-4279057743765095593.post-3100975561768723933</id><published>2011-08-08T16:31:00.000-07:00</published><updated>2011-08-08T16:31:22.796-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-08-08T16:31:22.796-07:00</app:edited><title>Where are my SQL Servers?</title><content type="html">How can you discover where SQL Servers are in your enterprise environment?&lt;br /&gt;
&lt;br /&gt;
There's always the handy &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;sqlcmd -L&lt;/span&gt;, but how can you know you've found everything?&lt;br /&gt;
&lt;br /&gt;
How about this for starters:&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: xx-small;"&gt;csvde -f out.csv -r "(&amp;amp;(objectClass=Computer)(servicePrincipalName=*SQL*))" -l name,servicePrincipalName&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
It's left as an exercise for the reader to find the intersection of the results of the above tools, along with validation.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4279057743765095593-3100975561768723933?l=www.eveningread.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/eveningread/~4/q-4YdrLpQik" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.eveningread.com/feeds/3100975561768723933/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.eveningread.com/2011/08/where-are-my-sql-servers.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4279057743765095593/posts/default/3100975561768723933?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4279057743765095593/posts/default/3100975561768723933?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/eveningread/~3/q-4YdrLpQik/where-are-my-sql-servers.html" title="Where are my SQL Servers?" /><author><name>Andrew Vogel</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://www.eveningread.com/2011/08/where-are-my-sql-servers.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Ck8ERXY7eyp7ImA9WhdREkw.&quot;"><id>tag:blogger.com,1999:blog-4279057743765095593.post-4444354908012563093</id><published>2011-08-01T08:00:00.000-07:00</published><updated>2011-08-01T08:00:04.803-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-08-01T08:00:04.803-07:00</app:edited><title>Fixing Old Laptops</title><content type="html">For the last ten years, I've been the computer guy in the family. &amp;nbsp;That means when I'm home or visiting friends, there's an awkward moment after "How have you been?" and before "So, my computer..."&lt;br /&gt;
&lt;br /&gt;
Last week, I went up to see my sister-in-law and her family, and her girls were complaining about their old "homework" laptop. &amp;nbsp;It was essentially the same hardware as my ThinkPad x41t, which actually can manage to run Windows 7 Ultimate. &amp;nbsp;That being said, with Windows XP on a Pentium M with a 4500RPM IDE drive, things just aren't going to be that fast. &amp;nbsp;And there was malware involved. &amp;nbsp;So where do we start?&lt;br /&gt;
&lt;i&gt;&lt;br /&gt;
&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&lt;u&gt;Disclaimer: By following any of these activities you hold the author harmless of any effects, averse or otherwise. &amp;nbsp;There's no fitness or guarantee for this information.&amp;nbsp;&lt;/u&gt;&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-size: large;"&gt;Safe Mode Cleaning&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
First, boot the computer into Safe Mode with Networking. &amp;nbsp;At this point, I like to cleanup as much temporary data as possible to reduce malware removal tool scan time. &amp;nbsp;Tools like Piriform's &lt;a href="http://www.piriform.com/ccleaner"&gt;CCleaner&lt;/a&gt;&amp;nbsp;work great to clean up the local profile. &amp;nbsp;If you need to clean other user profiles, you're on your own or logging in and out several times to run the tool.&lt;br /&gt;
&lt;br /&gt;
Following up with a scan with tools like &lt;a href="http://www.malwarebytes.org/products/malwarebytes_free"&gt;Malwarebytes&lt;/a&gt;&amp;nbsp;(a current favorite) and you've got a head start on the malware problem.&lt;br /&gt;
&lt;br /&gt;
Additionally, I typically like to check a few registry locations, however the majority of the startup items can be located by TrendMicro's &lt;a href="http://free.antivirus.com/hijackthis/"&gt;Hijackthis&lt;/a&gt;&amp;nbsp;tool. &amp;nbsp;Be cautious as many of the keys it enumerates are, in fact, supposed to exist.&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-size: large;"&gt;Disk Problems&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
In safe mode, you can also check the health of the logical disk using &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;chkdsk&lt;/span&gt;. &amp;nbsp;If I'm having a performance issue loading or opening programs, it's important to confirm that you're not getting disk read errors causing re-reads. &amp;nbsp;Realistically, the speed at which disks operate today actually causes more read errors that you know, but there's automatic disk correction occurring under the hood. &amp;nbsp;What I'm looking for is significant logical errors on the disk, which can also mean pending disk failure.&lt;br /&gt;
&lt;br /&gt;
If &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;chkdsk&lt;/span&gt; reports more errors than a volume bitmap error, then I'll schedule a &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;chkdsk /f&lt;/span&gt; on the next reboot to get those index errors repaired.&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-size: large;"&gt;Useless Programs and Features&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Once back in Windows, I'll load up &lt;b&gt;&lt;i&gt;Add and Remove Programs&lt;/i&gt;&lt;/b&gt; and audit the installed applications. &amp;nbsp;Frequently there's a plethora of toolbars, which can slow down browser performance. &amp;nbsp;Occasionally, there's two versions of Java, which I recommend running only the latest, most up-to-date version, unless you have an application compatibility issue, such as using the web management software for Cisco PIX firewalls (Requires Java SE 1.4.14, I believe).&lt;br /&gt;
&lt;br /&gt;
The biggest culprit I see slowing down older hardware running Windows XP is the &lt;a href="http://www.microsoft.com/windows/products/winfamily/desktopsearch/default.mspx"&gt;Windows Desktop Search 4.0&lt;/a&gt; feature that's installed via Windows Update. &amp;nbsp;It's a great tool, and I leverage it on my Windows 7 workstation, but that's newer hardware. &amp;nbsp;It's the Microsoft equivalent to &lt;a href="http://desktop.google.com/"&gt;Google Desktop&lt;/a&gt;. &amp;nbsp;If you don't need it, then you don't need it crawling across your slow disk, reading and indexing files in the background.&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-size: large;"&gt;Defragmentation&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Speaking of disks, how about defragmenting? &amp;nbsp;&lt;a href="http://www.diskeeper.com/"&gt;Diskeeper&lt;/a&gt;&amp;nbsp;swears by it as a performance tool, however the measurable results can be negligible. &amp;nbsp;Rather, if you have the option to re-install Windows from scratch and happen to have a Windows 7 install CD lying around, consider using it to pre-format your disks for your Windows XP install so that you can take advantage of &lt;a href="http://blogs.msdn.com/b/jimmymay/archive/2009/05/08/disk-partition-alignment-sector-alignment-make-the-case-with-this-template.aspx"&gt;disk partition alignment&lt;/a&gt;, which applies not only to servers, but to workstations.&lt;br /&gt;
&lt;br /&gt;
As for actually defragmenting, I prefer both Piriform's &lt;a href="http://www.piriform.com/defraggler"&gt;Defraggler&lt;/a&gt; and Sysinternal's &lt;a href="http://technet.microsoft.com/en-us/sysinternals/bb897428"&gt;contig&lt;/a&gt;. &amp;nbsp;The former allows for a more&amp;nbsp;efficient&amp;nbsp;whole disk defragmentation including defragmenting free-space. &amp;nbsp;Both utilities allow for single-file defragmentation.&lt;br /&gt;
&lt;br /&gt;
Additionally, some system files, namely the paging file and registry hives, cannot be defragmented in user-mode. &amp;nbsp;Instead, you could defragment free space, set your paging file to zero, reboot, set your paging file back to a 1:1 ratio with you physical memory, and reboot again, hoping that the file will be created in&amp;nbsp;contiguous&amp;nbsp;free space. &amp;nbsp;Or you could just use &lt;a href="http://technet.microsoft.com/en-us/sysinternals/bb897426"&gt;PageDefrag&lt;/a&gt;. &amp;nbsp;The tool does a boot-time defrag of the paging file and registry hives, just like a &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;chkdsk /f&lt;/span&gt;. &amp;nbsp;I don't run this tool on a regular basis, but only when I'm being incredibly aggressive with my disk fragmentation.&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-size: large;"&gt;General System&amp;nbsp;Optimizations&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Do you really need those fancy themes? &amp;nbsp;Or Fast User Switching on a computer with a single account?&lt;br /&gt;
&lt;br /&gt;
Right clicking &lt;i style="font-weight: bold;"&gt;My Computer&lt;/i&gt;&amp;nbsp;and selecting properties brings up all the tabs we need. &amp;nbsp;Under the &lt;i style="font-weight: bold;"&gt;Remote&lt;/i&gt;&amp;nbsp;tab, are you even using Remote Desktop or Remote Assistance? &amp;nbsp;How about unchecking the option? &amp;nbsp;How about System Restore? &amp;nbsp;Checking the turn off box will also clear out the disk space it uses, where old malware files tend to hide.&lt;br /&gt;
&lt;br /&gt;
The &lt;i style="font-weight: bold;"&gt;Advanced&lt;/i&gt;&amp;nbsp;tab is where the real magic happens. &amp;nbsp;For Performance settings, set to &lt;i style="font-weight: bold;"&gt;Adjust for best performance&lt;/i&gt;. &amp;nbsp;You'll lose that fancy blue color, but it's a few less bitmaps to load into memory. &amp;nbsp;Switch over to the &lt;i style="font-weight: bold;"&gt;Advanced&lt;/i&gt;&amp;nbsp;tab under &lt;i style="font-weight: bold;"&gt;Peformance&lt;/i&gt;, and click on &lt;i style="font-weight: bold;"&gt;Change&lt;/i&gt;&amp;nbsp;to set your page file size. &amp;nbsp;Regardless of the size you set (I prefer a 1:1 ratio to physical memory), you should set the &lt;i style="font-weight: bold;"&gt;Custom Size&lt;/i&gt;&amp;nbsp;minimum and maximum to the same size. &amp;nbsp;Why should Windows waste disk IO and CPU resources managing and resizing the paging file? &amp;nbsp;Don't forget to click &lt;i style="font-weight: bold;"&gt;Set&lt;/i&gt;&amp;nbsp;to actually apply the setting, and then later reboot. &amp;nbsp;If you can put the paging file on a different volume that resides on a different physical disk, you can experience improved&amp;nbsp;performance.&lt;br /&gt;
&lt;br /&gt;
Under the &lt;b&gt;&lt;i&gt;Startup and Recovery&lt;/i&gt;&amp;nbsp;&lt;/b&gt;section of the &lt;i style="font-weight: bold;"&gt;Advanced&lt;/i&gt;&amp;nbsp;tab is also where you control the BSOD actions. If at all possible set it to not automatically reboot and to write a full memory dump. &amp;nbsp;This allows you to use tools like Nirsoft's &lt;a href="http://www.nirsoft.net/utils/blue_screen_view.html"&gt;BlueScreenView&lt;/a&gt; to inspect the root cause of the crash. (It's left as an exercise to the reader to learn about &lt;a href="http://www.dumpanalysis.org/blog/"&gt;Crash Dump Analysis&lt;/a&gt;.)&lt;br /&gt;
&lt;br /&gt;
The next stop is &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;services.msc&lt;/span&gt;. &amp;nbsp;Now that we've got the windowing system down to the minimums, does the &lt;b&gt;&lt;i&gt;Themes&lt;/i&gt;&amp;nbsp;&lt;/b&gt;service need to be running? &amp;nbsp;Nah, let's set it to &lt;b&gt;&lt;i&gt;Stopped&lt;/i&gt;&lt;/b&gt; and &lt;b&gt;&lt;i&gt;Disabled&lt;/i&gt;&lt;/b&gt;. &amp;nbsp;And if we're using a single account on the system, stop and disable &lt;i style="font-weight: bold;"&gt;Fast User Switching&lt;/i&gt;. &amp;nbsp;What about &lt;i style="font-weight: bold;"&gt;Windows Wireless Zero Configuration&lt;/i&gt;&amp;nbsp;on a desktop system? &amp;nbsp;Or &lt;i style="font-weight: bold;"&gt;Print Spooler&lt;/i&gt;? &amp;nbsp;If you disabled &lt;i style="font-weight: bold;"&gt;System Restore&lt;/i&gt;&amp;nbsp;earlier, you can also disable the service. &amp;nbsp;&lt;i style="font-weight: bold;"&gt;Windows Indexer&lt;/i&gt;? &amp;nbsp;&lt;i style="font-weight: bold;"&gt;Windows Search&lt;/i&gt;? (Which you hopefully uninstalled already.) &amp;nbsp;Be very&amp;nbsp;judicious&amp;nbsp;about disabling services though, as some of the dependencies are not as&amp;nbsp;obvious and your risk creating an unstable system.&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-size: large;"&gt;The End Result&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Once I went through all of these items, I was able to reduce CPU usage,&amp;nbsp;stabilize&amp;nbsp;a dying disk, and reduce memory utilization by a whopping 50%. &amp;nbsp;The main problems I found were malware, logical disk corruption, and Windows Search causing high IO.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4279057743765095593-4444354908012563093?l=www.eveningread.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/eveningread/~4/ygMoOaQ1rsI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.eveningread.com/feeds/4444354908012563093/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.eveningread.com/2011/08/fixing-old-laptops.html#comment-form" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4279057743765095593/posts/default/4444354908012563093?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4279057743765095593/posts/default/4444354908012563093?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/eveningread/~3/ygMoOaQ1rsI/fixing-old-laptops.html" title="Fixing Old Laptops" /><author><name>Andrew Vogel</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>1</thr:total><feedburner:origLink>http://www.eveningread.com/2011/08/fixing-old-laptops.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D08CSX85cSp7ImA9WhdTF0k.&quot;"><id>tag:blogger.com,1999:blog-4279057743765095593.post-413932632186565522</id><published>2011-07-15T09:04:00.001-07:00</published><updated>2011-07-15T09:04:28.129-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-07-15T09:04:28.129-07:00</app:edited><title>Mega-Patch Tuesday</title><content type="html">At my local PASS chapter meeting last Wednesday, I discovered I was behind on the latest news. &amp;nbsp;SQL Server 2008 R2 Service Pack 1 was released! &amp;nbsp;Having just done a cluster deployment and three internal upgrades, I had to get a plan in order for deployment.&lt;br /&gt;
&lt;br /&gt;
Beforehand, I thankfully discovered &lt;a href="http://blogs.msdn.com/b/sqlreleaseservices/archive/2011/06/21/cumulative-updates-included-in-sql-server-2008-r2-sp1.aspx"&gt;the latest&lt;/a&gt; from Microsoft Release Services. &amp;nbsp;Apparently the RTM of SP1 is essentially Cumulative Updates 1 through 6. &amp;nbsp;Really? &amp;nbsp;I'm ahead of the curve? &amp;nbsp;In my zeal for fresh deployments (and for a customer's requirements), I had slipstreamed Cumulative Update 8 on all of my recent deployments. &amp;nbsp;Those changsets don't get included until Service Pack 1 Cumulative Update 1. &amp;nbsp;That certainly saves me some time!&lt;br /&gt;
&lt;br /&gt;
Now if I could only find time to finish deploying SSRS internally.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4279057743765095593-413932632186565522?l=www.eveningread.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/eveningread/~4/jbBzSNJpss4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.eveningread.com/feeds/413932632186565522/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.eveningread.com/2011/07/mega-patch-tuesday.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4279057743765095593/posts/default/413932632186565522?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4279057743765095593/posts/default/413932632186565522?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/eveningread/~3/jbBzSNJpss4/mega-patch-tuesday.html" title="Mega-Patch Tuesday" /><author><name>Andrew Vogel</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://www.eveningread.com/2011/07/mega-patch-tuesday.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0cNSXYycSp7ImA9WhdTFUo.&quot;"><id>tag:blogger.com,1999:blog-4279057743765095593.post-7885357275119098902</id><published>2011-07-13T08:29:00.000-07:00</published><updated>2011-07-13T08:31:38.899-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-07-13T08:31:38.899-07:00</app:edited><title>MPIO, iSCSI, and the Cluster</title><content type="html">I've been working away at a Windows Server 2008 R2 based cluster for the eventual deployment of two SQL Server 2008 R2 instances. &amp;nbsp;I've dug, and I've dug, and I've dug, but I couldn't find a good order of configuration for getting the basics of the iSCSI SAN configured for multi-pathing, so here's what I've experienced.&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-size: large;"&gt;Setup VLANs&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Unfortunately, we've only got one switch to work with, but at least it's gigabit and managed. &amp;nbsp;I setup three VLANs, one to carry public network traffic, one for the first iSCSI subnet, and one for the second iSCSI subnet. &amp;nbsp;Why two VLANs for iSCSI? &amp;nbsp;I don't want to have the broadcast communication from one interfering with another, as there will be no default gateway on either subnet to assist with routing. &amp;nbsp;It's left as an exercise for the reader to learn the VLAN configuration for your particular model switch. &amp;nbsp;But if you've got an HP ProCurve, they do provide some &lt;a href="http://www.hp.com/rnd/support/config_examples/2512_2524.htm"&gt;sample configurations&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-size: large;"&gt;Configure SAN&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Thanks to Alan Hirt's (&lt;a href="http://www.sqlha.com/blog/"&gt;blog&lt;/a&gt; | &lt;a href="http://twitter.com/#!/sqlha"&gt;twitter&lt;/a&gt;) book, I was able to plan my LUNs, and even then as requirements changed I had to redo them several times. &amp;nbsp;For my SAN, and &lt;a href="http://h10010.www1.hp.com/wwpc/us/en/sm/WF06b/12169-304616-241493-241493-241493-4118559-5048949-5048950.html"&gt;HP P2000 G3 iSCSI bundle&lt;/a&gt; with 12 2.5" SAS disks, HP uses the term "volume" to refer to LUNs. &amp;nbsp;Don't confuse this with the term volume used to describe a filesystem container on a partition. &amp;nbsp;All told, we needed eight LUNs for basic quorum, MSDTC, two data volumes, two log volumes, and two backup volumes. &amp;nbsp;I avoided the use of mountpoints to keep the configuration easily readable. &amp;nbsp;In the SMB market, mountpoints have been basically unheard of.&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-size: large;"&gt;Configure IP addressing&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
For Public, it's simple enough. &amp;nbsp;For the Private (or heartbeat), we used a cross-over cable and 10.50.50.0/24. &amp;nbsp;Then to differentiate our iSCSI controllers, we used 10.10.10.0/24 and 10.10.20.0/24 for Controller A and Controller B, respectively. &amp;nbsp;Those subnets are over-zealous, but for the sake of&amp;nbsp;support-ability, I chose a commonly known subnet mask.&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-size: large;"&gt;Configuring iSCSI&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
This is where things got heady and confusing. &amp;nbsp;At this point there's about 10 different IPs in the mix, plus those VLANs, and a bunch of identically colored cables. &amp;nbsp;When picking a target for discovery, go with the IP you know and love on Controller A. &amp;nbsp;Remember to check &lt;b style="font-style: italic;"&gt;Enable Multi-Path&lt;/b&gt;&amp;nbsp;when &lt;a href="http://mikefrobbins.com/2010/08/26/multipath-io-installation-on-windows-2008-r2-server-core/"&gt;adding a Target&lt;/a&gt;. &amp;nbsp;It'll chose the default binding for the initiator (0.0.0.0), which might not be what we want, but it's a start. &amp;nbsp;It's those sessions that really matter. &amp;nbsp;Don't forget to switch to the &lt;i style="font-weight: bold;"&gt;Volumes and Devices&lt;/i&gt;&amp;nbsp;tab and use &lt;i style="font-weight: bold;"&gt;Auto Configure&lt;/i&gt;&amp;nbsp;to associate those LUNs.&lt;br /&gt;
&lt;br /&gt;
&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-rg75eqWOPtg/Th2vnRL2gYI/AAAAAAAAAZg/wuQ67W-iFz4/s1600/iscsi-targets.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="320" src="http://3.bp.blogspot.com/-rg75eqWOPtg/Th2vnRL2gYI/AAAAAAAAAZg/wuQ67W-iFz4/s320/iscsi-targets.jpg" width="228" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Connected to a Quick Connect Target&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;
Go ahead and add a second target for Controller B on the &lt;b&gt;&lt;i&gt;Discovery&amp;nbsp;&lt;/i&gt;&lt;/b&gt;tab. &amp;nbsp;Then make sure that the MPIO feature is installed and run &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;mpclaim -n -i -a&lt;/span&gt;, to grab all of the MPIO enabled drives. &amp;nbsp;You'll likely have to reboot after this. Note that my HP P2000i G3 didn't have a vendor supplied DSM because it's so new, so the Microsoft DSM will work just fine. &amp;nbsp;Repeat on your second host and reboot. &amp;nbsp;Now in the MPIO control panel (Windows 2008 R2 only), you should see&amp;nbsp;MSFT2005iSCSIBusType_0x9 as a claimed device. &amp;nbsp;That's about it for your visits to the MPIO tool.&lt;br /&gt;
&lt;br /&gt;
Now let's confirm that we've got multiple paths or add them explicitly if you need particular source and target IPs. &amp;nbsp;On the &lt;i style="font-weight: bold;"&gt;Target&lt;/i&gt;&amp;nbsp;tab, click on &lt;i style="font-weight: bold;"&gt;Properties&lt;/i&gt;. &amp;nbsp;Here you'll see sessions connected to your SAN. &amp;nbsp;It's the multi-pathing of the sessions that keeps things running.&lt;br /&gt;
&lt;br /&gt;
&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-j36Hni2iVqw/Th2wyEsiKcI/AAAAAAAAAZk/ZOfIedkdDNI/s1600/iscsi-properties.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="320" src="http://3.bp.blogspot.com/-j36Hni2iVqw/Th2wyEsiKcI/AAAAAAAAAZk/ZOfIedkdDNI/s320/iscsi-properties.jpg" width="207" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;The list of sessions in Target properties&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;
Drill down further on a particular session by clicking on &lt;i style="font-weight: bold;"&gt;Devices&lt;/i&gt;. &amp;nbsp;Here you'll see what LUNs are associated with that connection. &amp;nbsp;If MPIO is correctly enabled, the &lt;i style="font-weight: bold;"&gt;MPIO&lt;/i&gt;&amp;nbsp;button will be available.&lt;br /&gt;
&lt;br /&gt;
&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-BJuic2DNAzA/Th2xIEoPvKI/AAAAAAAAAZo/FAyCQ0cgWtQ/s1600/iscsi-devices.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="320" src="http://4.bp.blogspot.com/-BJuic2DNAzA/Th2xIEoPvKI/AAAAAAAAAZo/FAyCQ0cgWtQ/s320/iscsi-devices.jpg" width="260" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;The list of disks associated with a session&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;
&lt;br /&gt;
Click on the &lt;i style="font-weight: bold;"&gt;MPIO&lt;/i&gt;&amp;nbsp;button after highliting a LUN to look at it's paths a policies.&lt;br /&gt;
&lt;br /&gt;
&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-qDsUeotRT_Y/Th2xZUM1N-I/AAAAAAAAAZs/PEvPyqHCIOk/s1600/iscsi-device-details.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="320" src="http://2.bp.blogspot.com/-qDsUeotRT_Y/Th2xZUM1N-I/AAAAAAAAAZs/PEvPyqHCIOk/s320/iscsi-device-details.jpg" width="275" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;MPIO settings on a device&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;
You can see that I've got mine already configured with 3 paths at this point. &amp;nbsp;I've already set the policy to &lt;i style="font-weight: bold;"&gt;Fail Over Only&lt;/i&gt;&amp;nbsp;and two of those paths have been set to &lt;i style="font-weight: bold;"&gt;Standby&lt;/i&gt;. &amp;nbsp;To confirm each path's settings, highlight it and click on &lt;i style="font-weight: bold;"&gt;&amp;nbsp;Details&lt;/i&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-rTVpHjT86-I/Th2xwO_N9EI/AAAAAAAAAZw/AHXYiMrP_Wo/s1600/iscsi-mpio-path-details.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="255" src="http://4.bp.blogspot.com/-rTVpHjT86-I/Th2xwO_N9EI/AAAAAAAAAZw/AHXYiMrP_Wo/s320/iscsi-mpio-path-details.jpg" width="320" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Details of an MPIO path&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;
Now you can see what each connection is using for source and target. &amp;nbsp;You see from the example that its explicitly set to use the &lt;i style="font-weight: bold;"&gt;Microsoft iSCSI Initiator&lt;/i&gt;&amp;nbsp;and it's source is explicitly set to the second iSCSI NIC's IP hitting the third port on Controller A.&lt;br /&gt;
&lt;br /&gt;
Now that seems like too much clicking, doesn't it? &amp;nbsp;For my deployment, this was fast enough and it re-enforced&amp;nbsp;the learning process visually. &amp;nbsp;You can &lt;a href="http://technet.microsoft.com/en-us/library/ee619743(WS.10).aspx"&gt;leverage&lt;/a&gt;&amp;nbsp;the &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;mpclaim&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt; &lt;/span&gt;command line tool to set these policies via scripts.&lt;br /&gt;
&lt;br /&gt;
Open &lt;i style="font-weight: bold;"&gt;Disk Manager&lt;/i&gt;, bring the disks&lt;b style="font-style: italic;"&gt;&amp;nbsp;Online&lt;/b&gt;&amp;nbsp;then &lt;i style="font-weight: bold;"&gt;Initialize&lt;/i&gt;&amp;nbsp;them. &amp;nbsp;On the same node, you can format and assign drive letters. &amp;nbsp;After this, the failover cluster installation will perform the magic to make them clustered resources.&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-size: large;"&gt;Installing Failover Cluster Feature&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Now it's a matter of running some wizards. &amp;nbsp;At this point, the configuration passed validation successfully. &amp;nbsp;Everything is wizard driven, so I recommend Alan Hirt's book, &lt;a href="http://www.amazon.com/Server-Failover-Clustering-Experts-Voice/dp/1430219661/ref=sr_1_1?ie=UTF8&amp;amp;qid=1310568153&amp;amp;sr=8-1"&gt;Pro SQL Server 2008 Failover Clustering&lt;/a&gt; from Apress. &amp;nbsp;Its what you need to understand the theory behind the process and points out several pitfalls during the architecture process, something I had to learn ad-hoc while running this last-minute project. &amp;nbsp;And if you want to get perfect validation, you'll need to read Nic Cain's (&lt;a href="http://sirsql.net/"&gt;blog&lt;/a&gt; | &lt;a href="http://twitter.com/#!/sirsql"&gt;twitter&lt;/a&gt;) blog on the &lt;a href="http://sirsql.net/blog/2011/5/12/sql-clusteringnetwork-binding-order-warnings.html"&gt;hidden cluster adapter&lt;/a&gt;. &amp;nbsp;If you're looking for more information, check out both Alan and Nic's blogs. &amp;nbsp;Nic's running a series on &lt;a href="http://sirsql.net/blog/tag/cluster"&gt;large cluster deployments&lt;/a&gt; right now.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4279057743765095593-7885357275119098902?l=www.eveningread.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/eveningread/~4/YMWPc1dj6mU" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.eveningread.com/feeds/7885357275119098902/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.eveningread.com/2011/07/mpio-iscsi-and-cluster.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4279057743765095593/posts/default/7885357275119098902?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4279057743765095593/posts/default/7885357275119098902?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/eveningread/~3/YMWPc1dj6mU/mpio-iscsi-and-cluster.html" title="MPIO, iSCSI, and the Cluster" /><author><name>Andrew Vogel</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/-rg75eqWOPtg/Th2vnRL2gYI/AAAAAAAAAZg/wuQ67W-iFz4/s72-c/iscsi-targets.jpg" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://www.eveningread.com/2011/07/mpio-iscsi-and-cluster.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0UBQnk_fSp7ImA9WhdTFEU.&quot;"><id>tag:blogger.com,1999:blog-4279057743765095593.post-4049517001997842726</id><published>2011-07-12T09:47:00.000-07:00</published><updated>2011-07-12T09:47:33.745-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-07-12T09:47:33.745-07:00</app:edited><title>The Joys of SSL</title><content type="html">So you just upgrade to Exchange 2010 and you bought and installed your UCC certificate. &amp;nbsp;Things look great right? &amp;nbsp;But that was five months ago.&lt;br /&gt;
&lt;br /&gt;
The SharePoint team called and they need an SSL certificate too. &amp;nbsp;So can you use a UCC certificate? &amp;nbsp;Yes, but it &lt;a href="http://blogs.technet.com/b/blairb/archive/2008/01/11/how-to-use-ssl-certificates-with-multiple-subject-alternative-names-in-moss.aspx"&gt;requires a lot more work&lt;/a&gt;. &amp;nbsp;Oh, and the accounting department's web application, that can't handle Subject Alternate Names.&lt;br /&gt;
&lt;br /&gt;
Time to call the aforementioned accounting department and get approval for purchasing that wildcard certificate. But the question is, do we just deploy it or setup &lt;a href="http://technet.microsoft.com/en-us/windowsserver/dd448615"&gt;Active Directory Certificate Services&lt;/a&gt;?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4279057743765095593-4049517001997842726?l=www.eveningread.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/eveningread/~4/_S89OJOQ_vs" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.eveningread.com/feeds/4049517001997842726/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.eveningread.com/2011/07/joys-of-ssl.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4279057743765095593/posts/default/4049517001997842726?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4279057743765095593/posts/default/4049517001997842726?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/eveningread/~3/_S89OJOQ_vs/joys-of-ssl.html" title="The Joys of SSL" /><author><name>Andrew Vogel</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://www.eveningread.com/2011/07/joys-of-ssl.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEcNR3o9cSp7ImA9WhdTEE0.&quot;"><id>tag:blogger.com,1999:blog-4279057743765095593.post-974455527581828042</id><published>2011-07-06T19:34:00.001-07:00</published><updated>2011-07-06T19:34:56.469-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-07-06T19:34:56.469-07:00</app:edited><title>Organizational Charts</title><content type="html">Having been a part of at least five organizational changes in my 30 month tenure with my current employer, this infographic speaks volumes.&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://www.bonkersworld.net/2011/06/27/organizational-charts/"&gt;http://www.bonkersworld.net/2011/06/27/organizational-charts/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4279057743765095593-974455527581828042?l=www.eveningread.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/eveningread/~4/dV6w-c_ymkg" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.eveningread.com/feeds/974455527581828042/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.eveningread.com/2011/07/organizational-charts.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4279057743765095593/posts/default/974455527581828042?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4279057743765095593/posts/default/974455527581828042?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/eveningread/~3/dV6w-c_ymkg/organizational-charts.html" title="Organizational Charts" /><author><name>Andrew Vogel</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://www.eveningread.com/2011/07/organizational-charts.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkQGSX4_cCp7ImA9WhZbGU4.&quot;"><id>tag:blogger.com,1999:blog-4279057743765095593.post-8096524471637806959</id><published>2011-06-24T10:58:00.000-07:00</published><updated>2011-06-24T10:58:48.048-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-06-24T10:58:48.048-07:00</app:edited><title>Cheating at Redirection</title><content type="html">Recently, I've been challenged to add a network share to a Documents &lt;a href="http://msdn.microsoft.com/en-us/library/dd758096(VS.85).aspx"&gt;library&lt;/a&gt;, to essentially mimic the folder redirection the were familiar with in Windows XP, on a Windows Server 2008 Terminal Server.&lt;br /&gt;
&lt;br /&gt;
Using a terminal server is the problem. &amp;nbsp;To add a folder, local or remote, to a library, it must be indexed. &amp;nbsp;Try it for yourself and you'll get an error stating that there's no index. &amp;nbsp;Your recourse is to index it, or if it's a remote share, enable Offline Files. &amp;nbsp;Offline Files? &amp;nbsp;On a Terminal Server? &amp;nbsp;Nope, by &lt;a href="http://technet.microsoft.com/en-us/library/cc978347.aspx"&gt;design&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Okay, then I'll enable&amp;nbsp;&lt;a href="http://technet.microsoft.com/en-us/library/cc772446(WS.10).aspx"&gt;Windows Search Service&lt;/a&gt;&amp;nbsp;on the server hosting the share. &amp;nbsp;It already has the File Services role enabled, so I'll just add the feature. &amp;nbsp;And don't be confused if you see &lt;a href="http://support.microsoft.com/kb/954822"&gt;Windows 2003 Indexing Service&lt;/a&gt;, it's not the same! &amp;nbsp;You'll want the &lt;b&gt;&lt;i&gt;Search Service&lt;/i&gt;&lt;/b&gt; feature. &amp;nbsp;Then it's just a matter of adding your volume or folder via the &lt;b&gt;&lt;i&gt;Indexing Options&lt;/i&gt;&lt;/b&gt; in &lt;b&gt;&lt;i&gt;Control Panel&lt;/i&gt;&lt;/b&gt;.&lt;br /&gt;
&lt;br /&gt;
Back to the Terminal Server and... what do you mean I can't add it? &amp;nbsp;It's indexed! &amp;nbsp;Well, you need the Search Service feature installed on the&amp;nbsp;Terminal&amp;nbsp;Server. &amp;nbsp;But, when you go to Add Feature, it's not there. &amp;nbsp;Rather, you've got to pretend you're going to install the File Server role, uncheck &lt;b&gt;&lt;i&gt;File Server&lt;/i&gt;&lt;/b&gt;, and check &lt;b&gt;&lt;i&gt;Search Service&lt;/i&gt;&lt;/b&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-SZATNwGowjo/TgTP9oCBVJI/AAAAAAAAAZc/kwy7EQFh_jQ/s1600/search_service_feature.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="293" src="http://3.bp.blogspot.com/-SZATNwGowjo/TgTP9oCBVJI/AAAAAAAAAZc/kwy7EQFh_jQ/s400/search_service_feature.jpg" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
Now your Terminal Server can read the remote index on that remote share and you can add it to the Documents library. &amp;nbsp;It all seems a little confusing to install a File Server role on a Terminal Server, doesn't it?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4279057743765095593-8096524471637806959?l=www.eveningread.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/eveningread/~4/auCm6H2L93o" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.eveningread.com/feeds/8096524471637806959/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.eveningread.com/2011/06/cheating-at-redirection.html#comment-form" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4279057743765095593/posts/default/8096524471637806959?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4279057743765095593/posts/default/8096524471637806959?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/eveningread/~3/auCm6H2L93o/cheating-at-redirection.html" title="Cheating at Redirection" /><author><name>Andrew Vogel</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/-SZATNwGowjo/TgTP9oCBVJI/AAAAAAAAAZc/kwy7EQFh_jQ/s72-c/search_service_feature.jpg" height="72" width="72" /><thr:total>2</thr:total><feedburner:origLink>http://www.eveningread.com/2011/06/cheating-at-redirection.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0YHRX06fip7ImA9WhZUFEU.&quot;"><id>tag:blogger.com,1999:blog-4279057743765095593.post-8999275963353768152</id><published>2011-06-07T15:18:00.000-07:00</published><updated>2011-06-07T15:18:54.316-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-06-07T15:18:54.316-07:00</app:edited><title>Dude, Where's My Maintenance Plan?</title><content type="html">I just finished an in-place, cross-version, cross-SKU upgrade of SQL Server 2005 Express with Advanced Services to SQL Server 2008 R2 Standard. &amp;nbsp;It was actually very easy and required about an hour's downtime for this SMB client.&lt;br /&gt;
&lt;br /&gt;
However, when I went to make a quick Maintenance Plan from SSMS in order to schedule some basic tasks, I discovered I couldn't create a new plan and edit it, but I could create it via the wizard. &amp;nbsp;A few clicks and about 22MB of installers later, and I realized I hadn't updated the one requirement:&lt;b&gt;&lt;i&gt; Management Tools - Complete&lt;/i&gt;&lt;/b&gt;. &amp;nbsp;&lt;b&gt;&lt;i&gt;Management Tools - Basic&lt;/i&gt;&lt;/b&gt; won't let you create SSIS packages via SSMS because you've got no SQL Agent to run them!&lt;br /&gt;
&lt;br /&gt;
&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-9PQCGpIE2yk/Te6jlZQITBI/AAAAAAAAAZY/GocwthwI8BE/s1600/ssms-complete.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="296" src="http://3.bp.blogspot.com/-9PQCGpIE2yk/Te6jlZQITBI/AAAAAAAAAZY/GocwthwI8BE/s400/ssms-complete.jpg" width="400" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;I need all of those tools, please!&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4279057743765095593-8999275963353768152?l=www.eveningread.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/eveningread/~4/s8ieodh78SQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.eveningread.com/feeds/8999275963353768152/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.eveningread.com/2011/06/dude-wheres-my-maintenance-plan.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4279057743765095593/posts/default/8999275963353768152?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4279057743765095593/posts/default/8999275963353768152?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/eveningread/~3/s8ieodh78SQ/dude-wheres-my-maintenance-plan.html" title="Dude, Where's My Maintenance Plan?" /><author><name>Andrew Vogel</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/-9PQCGpIE2yk/Te6jlZQITBI/AAAAAAAAAZY/GocwthwI8BE/s72-c/ssms-complete.jpg" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://www.eveningread.com/2011/06/dude-wheres-my-maintenance-plan.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Ck4MRHo5fip7ImA9WhZVE0o.&quot;"><id>tag:blogger.com,1999:blog-4279057743765095593.post-3245501432989090050</id><published>2011-05-25T17:45:00.000-07:00</published><updated>2011-05-25T17:49:45.426-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-05-25T17:49:45.426-07:00</app:edited><title>Exchange Item-Level Manipulation with PowerShell</title><content type="html">&lt;span class="Apple-style-span" style="font-size: large;"&gt;Shameless Plug&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Mike Pfeiffer (&lt;a href="http://www.mikepfeiffer.net/"&gt;blog&lt;/a&gt; | &lt;a href="http://twitter.com/#!/mike_pfeiffer"&gt;twitter&lt;/a&gt;) is a recently christened &lt;a href="http://www.microsoft.com/learning/en/us/certification/master-exchange-path.aspx"&gt;MCM for Exchange 2010&lt;/a&gt;. &amp;nbsp;His blog is awesome. &amp;nbsp;You should read it. &amp;nbsp;And then when you have a problem like I have, you should leverage what you've learned.&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-size: large;"&gt;The Problem&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Building on yesterday's Linked Mailbox creation issue for an Exchange server in a resource forest, I now need to perform item level manipulation for Contacts and Calenders. &amp;nbsp;We've been working on migration to Exchange 2010 from an obscure messaging system designed by a company in Redwood City, who shall not be named. &amp;nbsp;My co-worker, Andrew Healey (&lt;a href="http://halfloaded.com/"&gt;blog&lt;/a&gt; | &lt;a href="http://twitter.com/#!/halfloaded"&gt;twitter&lt;/a&gt;), has done an excellent job solving mail item synchronization. &amp;nbsp;But we're still stuck doing manual PST exports of non-mail items.&lt;br /&gt;
&lt;br /&gt;
After completing our testing phase, we want to clear out all the non-mail items from user's mailboxes then perform fresh PST imports, thus avoiding any chance of item duplication. &amp;nbsp;In terms of native capabilities, Exchange 2010's lowest level of granularity using PowerShell is the mailbox. &amp;nbsp;So, knowing a little about EWS from another project I was considering to sync Out-of-Office&amp;nbsp;replies&amp;nbsp;to a Public Folder Vacation calendar, I found Mike Pfeiffer's &lt;a href="http://www.mikepfeiffer.net/2011/04/powershell-script-cmdlets-for-managing-e-mail-items-using-the-exchange-web-services-managed-api/"&gt;article&lt;/a&gt; on this very topic. &amp;nbsp;His EWSMail module is&amp;nbsp;phenomenal and incredibly well documented, but he did leave some things out on purpose.&lt;br /&gt;
&lt;blockquote&gt;The cmdlets in this module could use some enhancements though. They run under the security context of the logged on user, the EWS endpoint is set using autodiscover, and the Exchange version will default to Exchange 2010 SP1. If you want to extend this code, it might be useful to add parameters for specifying alternate credentials, manually setting the EWS URL, and specifying the Exchange version.&lt;/blockquote&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;The Solution&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
First, we had to patch Exchange 2010 to SP1. &amp;nbsp;This saved some time (and was best practices) so that I didn't have to add&lt;a href="http://msdn.microsoft.com/en-us/library/microsoft.exchange.webservices.data.exchangeversion(EXCHG.80).aspx"&gt; version detection&lt;/a&gt;. &amp;nbsp;Incidentally, you can see &lt;a href="http://www.mikepfeiffer.net/2011/01/creating-calendar-items-with-powershell-and-the-ews-managed-api/"&gt;an example&lt;/a&gt; where Mike&amp;nbsp;instantiated&amp;nbsp;an object with that exact property.&lt;br /&gt;
&lt;br /&gt;
Secondly, I needed to extend his PowerShell module to allow me to pass the EWS URL as a parameter. &amp;nbsp;Adding the following snippets in the appropriate places did the job.&lt;br /&gt;
&lt;br /&gt;
In the param() declarations, add the following snippet, updating the&amp;nbsp;Position&amp;nbsp;value accordingly:&lt;br /&gt;
&lt;blockquote&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;[Parameter(Position = 4, Mandatory = $false)]&amp;nbsp;[string]&amp;nbsp;$WebServicesUrl&lt;/span&gt;&lt;/blockquote&gt;Then in the EWS Autodiscover section, I created some conditional logic:&lt;br /&gt;
&lt;blockquote&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;#Determine the EWS end-point using Autodiscover&lt;br /&gt;
if ($WebServicesUrl -eq $null) {&amp;nbsp;$service.AutodiscoverUrl($Mailbox)}&lt;br /&gt;
else {&amp;nbsp;$service.Url = $WebServicesUrl }&lt;/span&gt;&lt;/blockquote&gt;It was after this that I discovered my biggest challenge, discovering what data structure each item used. &amp;nbsp;Mike's script handles Email Messages using the &lt;a href="http://msdn.microsoft.com/en-us/library/microsoft.exchange.webservices.data.emailmessage_members(EXCHG.80).aspx"&gt;EmailMessage&lt;/a&gt; class without problems. &amp;nbsp;Typically you'll find those in the "Inbox". &amp;nbsp;Calendar items use the &lt;a href="http://msdn.microsoft.com/en-us/library/microsoft.exchange.webservices.data.appointment_members(EXCHG.80).aspx"&gt;Appointment&lt;/a&gt; class and reside in "Calendars", of course. &amp;nbsp;Contacts are the most logical and use the &lt;a href="http://msdn.microsoft.com/en-us/library/microsoft.exchange.webservices.data.contact_members(EXCHG.80).aspx"&gt;Contact&lt;/a&gt; class and reside in the "Contacts" folders. &amp;nbsp;Same with Tasks, using &lt;a href="http://msdn.microsoft.com/en-us/library/microsoft.exchange.webservices.data.task_members(EXCHG.80).aspx"&gt;Task&lt;/a&gt;, and residing in "Tasks". &lt;br /&gt;
&lt;br /&gt;
Notes on the other hand were unique. &amp;nbsp;In terms of data structures, they're the same as Email Messages, using the &lt;a href="http://msdn.microsoft.com/en-us/library/microsoft.exchange.webservices.data.emailmessage_members(EXCHG.80).aspx"&gt;EmailMessage&lt;/a&gt; class, but they'll sit in the "Notes" folder. &amp;nbsp;Go figure! &lt;br /&gt;
&lt;blockquote&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;Note: Don't forget to update the default folder if none is specified in the params() block.&lt;/span&gt;&lt;/blockquote&gt;Rather than creating conditional logic, I chose to duplicate the main Get-* and Remove-* scripts and update the class binding line accordingly, e.g., for Contacts, I changed:&lt;br /&gt;
&lt;blockquote&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;$email = [Microsoft.Exchange.WebServices.Data.EmailMessage]::Bind($service, $_.Id, $emailProps)&lt;/span&gt;&lt;/blockquote&gt;to&lt;br /&gt;
&lt;blockquote&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;$email = [Microsoft.Exchange.WebServices.Data.Contact]::Bind($service, $_.Id, $emailProps)&lt;/span&gt;&lt;/blockquote&gt;Now after adding the additional Get-* and Remove-* scripts into the EWSMail.psm1 file, and dropping the whole module folder into my &lt;a href="http://msdn.microsoft.com/en-us/library/dd878326(VS.85).aspx"&gt;$env:PSModulePath&lt;/a&gt;, I was ready to go!&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-size: large;"&gt;Final Details&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
I had to enable &lt;a href="http://msdn.microsoft.com/en-us/library/bb204095(EXCHG.140).aspx"&gt;impersonation&lt;/a&gt; for my executing account:&lt;br /&gt;
&lt;blockquote&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;New-ManagementRoleAssignment –Name:impersonationAssignmentName –Role:ApplicationImpersonation –User:CONTOSO\Administrator&lt;/span&gt;&lt;/blockquote&gt;Then launch the EMS, and run the script below and it’ll kill 2000 items at a time for all Mailboxes with a name like “Test*”. &amp;nbsp;There will be no visual confirmation of success in EMS.&lt;br /&gt;
&lt;br /&gt;
Edit the text of that script to remove the &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;Where-Object {$_.Name –like “Test*”}&lt;/span&gt; and it’ll do every mailbox. &amp;nbsp;See the text of that script below.&lt;br /&gt;
&lt;blockquote&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;Import-Module EWSMail&lt;br /&gt;
$MBX = Get-Mailbox -ResultSize unlimited | Where-Object {$_.Name -like "Test*"}&lt;br /&gt;
$EWS = "https://exchange.corp.contoso.com/EWS/Exchange.asmx"&lt;br /&gt;
$Limit = 2000&lt;br /&gt;
$MBX | ForEach-Object {&lt;br /&gt;
&amp;nbsp; &amp;nbsp; Get-EWSCalendarItem -Mailbox $_.WindowsEmailAddress -WebServicesUrl $EWS -ResultSize $Limit | Remove-EWSCalendarItem -WebServicesUrl $EWS -Confirm:$false&lt;br /&gt;
&amp;nbsp; &amp;nbsp; Get-EWSContact -Mailbox $_.WindowsEmailAddress -WebServicesUrl $EWS -ResultSize $Limit | Remove-EWSContact -WebServicesUrl $EWS -Confirm:$false&lt;br /&gt;
&amp;nbsp; &amp;nbsp; Get-EWSTask -Mailbox $_.WindowsEmailAddress -WebServicesUrl $EWS -ResultSize $Limit | Remove-EWSTask -WebServicesUrl $EWS -Confirm:$false&lt;br /&gt;
&amp;nbsp; &amp;nbsp; Get-EWSMailMessage -Mailbox $_.WindowsEmailAddress -WebServicesUrl $EWS -ResultSize $Limit -Folder Notes | Remove-EWSMailMessage -Mailbox $_.WindowsEmailAddress -WebServicesUrl $EWS -Confirm:$false&lt;br /&gt;
}&lt;/span&gt;&lt;/blockquote&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;Learning Points&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Now, run all of this at your own risk. &amp;nbsp;And if you can do better, please do so and let me know. &amp;nbsp;More importantly, let &lt;a href="http://twitter.com/#!/mike_pfeiffer"&gt;Mike&lt;/a&gt; know. &amp;nbsp;Thanks to his template, I've learned a great deal about:&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/dd878310(VS.85).aspx"&gt;PowerShell Modules&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/dd633709(EXCHG.80).aspx"&gt;Exchange Web Services&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Object Binding and calling &lt;a href="http://blogs.msdn.com/b/mattbie/archive/2010/02/23/how-to-call-net-and-win32-methods-from-powershell-and-your-troubleshooting-packs.aspx"&gt;.NET methods from PowerShell&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/bb204095(EXCHG.140).aspx"&gt;PowerShell Impersonation&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;
And I hope the rest of you never have to migrate between systems that don't provide vendor neutral protocols for all supplied services.&lt;br /&gt;
&lt;br /&gt;
I do have one apology and that is that I haven't attached my scripts here as my blogging platform doesn't support attachments and to past ~500 script inline would be beastly to read.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4279057743765095593-3245501432989090050?l=www.eveningread.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/eveningread/~4/lV7uHa2ATv8" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.eveningread.com/feeds/3245501432989090050/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.eveningread.com/2011/05/exchange-item-level-manipulation-with.html#comment-form" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4279057743765095593/posts/default/3245501432989090050?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4279057743765095593/posts/default/3245501432989090050?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/eveningread/~3/lV7uHa2ATv8/exchange-item-level-manipulation-with.html" title="Exchange Item-Level Manipulation with PowerShell" /><author><name>Andrew Vogel</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>1</thr:total><feedburner:origLink>http://www.eveningread.com/2011/05/exchange-item-level-manipulation-with.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkAEQXs_eip7ImA9WhZWFko.&quot;"><id>tag:blogger.com,1999:blog-4279057743765095593.post-152137012479114888</id><published>2011-05-17T14:30:00.000-07:00</published><updated>2011-05-17T15:18:20.542-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-05-17T15:18:20.542-07:00</app:edited><title>The Power of PowerShell</title><content type="html">Today I was faced with the challenge of creating an enterprise worth of Linked Mailboxes on Exchange 2010. &amp;nbsp;The Exchange server was sitting in a resource forest, adjacent to the production forest with two domains. &amp;nbsp;Linked mailboxes allow us to have a disabled User account in the resource forest, but grant authorization to the resource to a remote user account in a different trusted forest. &amp;nbsp;All this and more, just to migrate off of a previously&amp;nbsp;unheard-of&amp;nbsp;MTA.&lt;br /&gt;
&lt;br /&gt;
I tested things out manually with a test mailbox, following Microsoft's &lt;a href="http://technet.microsoft.com/en-us/library/bb123524.aspx"&gt;article on the topic&lt;/a&gt; without any trouble. &amp;nbsp;Quickly noting the PowerShell example, I thought, "Hey, let's pipe in a list of user accounts from the production forest's Active Directory servers."&lt;br /&gt;
&lt;br /&gt;
It was a great idea until:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;[PS] C:\&amp;gt;Get-ADUser -Filter {Name -eq "Test"} -SearchBase "DC=contoso,DC=com" -Server ad01.contoso.com:3268&lt;/span&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="color: red; font-family: 'Courier New', Courier, monospace;"&gt;Get-ADUser : Unable to contact the server. This may be because this server does not exist, it is currently down, or it&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="color: red; font-family: 'Courier New', Courier, monospace;"&gt;does not have the Active Directory Web Services running.&lt;/span&gt;&lt;/span&gt;&lt;/blockquote&gt;&lt;br /&gt;
Uh oh. &amp;nbsp;Can I use a different cmdlet to connect to Server 2008 RTM? &amp;nbsp;Nope, not that I could find. &amp;nbsp;&lt;a href="http://technet.microsoft.com/en-us/library/dd391908(WS.10).aspx"&gt;Active Directory Web Services&lt;/a&gt; was introduced with Windows Server 2008 R2. &amp;nbsp;So how about a different tool? &amp;nbsp;Remember &lt;a href="http://technet.microsoft.com/en-us/library/cc732101(WS.10).aspx"&gt;CSVDE&lt;/a&gt;? &amp;nbsp;I had used it once before to perform a parallel Active Directory migration. &amp;nbsp;Not pretty, but it gets the job done.&lt;br /&gt;
&lt;br /&gt;
A little hack here, and a little test there and viola:&lt;br /&gt;
&lt;blockquote&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;csvde -f users.csv -d "OU=Users,DC=contoso,DC=com" -s AD01 -r "(&amp;amp;(objectClass=user)(userAccountControl:1.2.840.113556.1.4.803:=2))" -l "name,cn,sn,description,givenName,displayName,proxyAddresses,sAMAccountName,userPrincipalName"&lt;/span&gt;&lt;/blockquote&gt;&lt;br /&gt;
Okay, I've got a CSV with some pretty useful information. &amp;nbsp;How do I loop through it with PowerShell to make those linked mailboxes? &amp;nbsp;A little searching through Technet, and I find J. Vosloo's &lt;a href="http://blogs.technet.com/b/nzdse/archive/2011/01/14/powershell-script-bulk-move-mailboxes-using-a-csv-input-file-hmc-4-0.aspx"&gt;article&lt;/a&gt; on a similar procedure for migrating mailboxes. &amp;nbsp;&lt;a href="http://technet.microsoft.com/en-us/library/dd347665.aspx"&gt;Import-CSV&lt;/a&gt; is a pretty powerful tool. &amp;nbsp;Now I can filter and&amp;nbsp;purify&amp;nbsp;my data in Excel, then run my script without any trouble.&lt;br /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;&lt;blockquote&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: xx-small;"&gt;$CSV = Import-CSV -path ".\users.csv"&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: xx-small;"&gt;Foreach ($line in $CSV)&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: xx-small;"&gt;{&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: xx-small;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; $UPN = $line.sAMAccountName + "@resource.fabrikam.com"&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: xx-small;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; $LMA = "CONTOSO\" + $line.sAMAccountName&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: xx-small;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; New-Mailbox -Name $line.name -Alias $line.sAMAccountName -UserPrincipalName $UPN -SamAccountName $line.sAMAccountName -FirstName $line.givenName -Initials '' -LastName $line.sn -LinkedMasterAccount $LMA -LinkedDomainController 'ad01.contoso.com'&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: xx-small;"&gt;}&lt;/span&gt;&lt;/blockquote&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;And there we go! &amp;nbsp;All my mailboxes are created and linked. &amp;nbsp;There's more fun things you can do, like specify a particular OU for your target mailboxes based off of the OU of the originating Master Account, but that's left as an exercise to the reader.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4279057743765095593-152137012479114888?l=www.eveningread.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/eveningread/~4/ozkXVqhkywc" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.eveningread.com/feeds/152137012479114888/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.eveningread.com/2011/05/power-of-powershell.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4279057743765095593/posts/default/152137012479114888?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4279057743765095593/posts/default/152137012479114888?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/eveningread/~3/ozkXVqhkywc/power-of-powershell.html" title="The Power of PowerShell" /><author><name>Andrew Vogel</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://www.eveningread.com/2011/05/power-of-powershell.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DE4NQHg-eip7ImA9WhZXFEg.&quot;"><id>tag:blogger.com,1999:blog-4279057743765095593.post-5497526937302553550</id><published>2011-05-03T14:09:00.000-07:00</published><updated>2011-05-03T14:09:51.652-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-05-03T14:09:51.652-07:00</app:edited><title>Playing "What Device Is It?"</title><content type="html">&lt;div class="MsoNormal"&gt;If you ever have to guess a device on the network without logging into it via common protocols (e.g., HTTP, HTTPS, FTP, Telnet, SMTP, etc), you can actually find out its NIC vendor.&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal"&gt;First ping the device to get it into your ARP cache.&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal" style="margin-left: .5in;"&gt;&lt;b&gt;&lt;span style="color: #4f6228; font-family: Consolas; font-size: 8.0pt;"&gt;C:\&amp;gt;ping 172.16.100.254&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin-left: .5in;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal" style="margin-left: .5in;"&gt;&lt;b&gt;&lt;span style="color: #4f6228; font-family: Consolas; font-size: 8.0pt;"&gt;Pinging 172.16.100.254 with 32 bytes of data:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin-left: .5in;"&gt;&lt;b&gt;&lt;span style="color: #4f6228; font-family: Consolas; font-size: 8.0pt;"&gt;Reply from 172.16.100.254: bytes=32 time&amp;lt;1ms TTL=64&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin-left: .5in;"&gt;&lt;b&gt;&lt;span style="color: #4f6228; font-family: Consolas; font-size: 8.0pt;"&gt;Reply from 172.16.100.254: bytes=32 time&amp;lt;1ms TTL=64&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin-left: .5in;"&gt;&lt;b&gt;&lt;span style="color: #4f6228; font-family: Consolas; font-size: 8.0pt;"&gt;Reply from 172.16.100.254: bytes=32 time&amp;lt;1ms TTL=64&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin-left: .5in;"&gt;&lt;b&gt;&lt;span style="color: #4f6228; font-family: Consolas; font-size: 8.0pt;"&gt;Reply from 172.16.100.254: bytes=32 time&amp;lt;1ms TTL=64&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin-left: .5in;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal" style="margin-left: .5in;"&gt;&lt;b&gt;&lt;span style="color: #4f6228; font-family: Consolas; font-size: 8.0pt;"&gt;Ping statistics for 172.16.100.254:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin-left: .5in;"&gt;&lt;b&gt;&lt;span style="color: #4f6228; font-family: Consolas; font-size: 8.0pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin-left: .5in;"&gt;&lt;b&gt;&lt;span style="color: #4f6228; font-family: Consolas; font-size: 8.0pt;"&gt;Approximate round trip times in milli-seconds:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin-left: .5in;"&gt;&lt;b&gt;&lt;span style="color: #4f6228; font-family: Consolas; font-size: 8.0pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Minimum = 0ms, Maximum = 0ms, Average = 0ms&lt;/span&gt;&lt;/b&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal"&gt;Then, leverage ARP to check it’s MAC address.&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal" style="margin-left: .5in;"&gt;&lt;b&gt;&lt;span style="color: #4f6228; font-family: Consolas; font-size: 8.0pt;"&gt;C:\&amp;gt;arp -a | find ".254"&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin-left: .5in;"&gt;&lt;b&gt;&lt;span style="color: #4f6228; font-family: Consolas; font-size: 8.0pt;"&gt;&amp;nbsp; 172.16.100.254&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 00-90-7f-3c-e0-b8&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; dynamic&lt;/span&gt;&lt;/b&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal"&gt;Then use Coffer’s MAC Find tool to find out the manufacturer using the first 6 digits of the MAC address.&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;a href="http://www.coffer.com/mac_find/?string=00-90-7f"&gt;http://www.coffer.com/mac_find/?string=00-90-7f&lt;/a&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;br /&gt;
&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-6VXBly3-dnI/TcBq0dNwp7I/AAAAAAAAAZU/66X7x_g-Wc4/s1600/results.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/-6VXBly3-dnI/TcBq0dNwp7I/AAAAAAAAAZU/66X7x_g-Wc4/s1600/results.jpg" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Coffer's MAC Find lookup results&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;
&lt;div&gt;I've had to leverage this many a time when hunting down rogue devices. &amp;nbsp;Unfortunately, its less common for workstations to have a workstation OEM branded NIC, but embedded devices tend to&amp;nbsp;yield&amp;nbsp; more conclusive results.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4279057743765095593-5497526937302553550?l=www.eveningread.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/eveningread/~4/SDr_MEMXgRQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.eveningread.com/feeds/5497526937302553550/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.eveningread.com/2011/05/playing-what-device-is-it.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4279057743765095593/posts/default/5497526937302553550?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4279057743765095593/posts/default/5497526937302553550?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/eveningread/~3/SDr_MEMXgRQ/playing-what-device-is-it.html" title="Playing &quot;What Device Is It?&quot;" /><author><name>Andrew Vogel</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/-6VXBly3-dnI/TcBq0dNwp7I/AAAAAAAAAZU/66X7x_g-Wc4/s72-c/results.jpg" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://www.eveningread.com/2011/05/playing-what-device-is-it.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkIBR34ycCp7ImA9WhZXEEw.&quot;"><id>tag:blogger.com,1999:blog-4279057743765095593.post-8464953631633964984</id><published>2011-04-28T11:15:00.000-07:00</published><updated>2011-04-28T11:15:56.098-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-04-28T11:15:56.098-07:00</app:edited><title>Parsing Logs - Part I</title><content type="html">Microsoft does a ton of great logging in their OS and Applications.&amp;nbsp; The hardest part is sorting through it.&lt;br /&gt;
&lt;br /&gt;
A while ago, I discovered Microsoft's &lt;a href="http://www.microsoft.com/downloads/en/details.aspx?FamilyID=890cd06b-abf8-4c25-91b2-f8d975cf8c07&amp;amp;displaylang=en"&gt;LogParser&lt;/a&gt; tool.&amp;nbsp; It's great for older systems that don't leverage PowerShell natively.&amp;nbsp; Certainly, WMI is out there, but learning curve can feel pretty steep.&amp;nbsp; Instead, utilizing LogParser's native SQL query engine, I can leverage a syntax I know and love.&lt;br /&gt;
&lt;br /&gt;
Without further&amp;nbsp;adieu, here's how I do it:&lt;br /&gt;
&lt;br /&gt;
&lt;code style="font-size: 12px;"&gt;&lt;span style="color: blue;"&gt;SELECT &lt;/span&gt;&lt;span style="color: black;"&gt;EventLog&lt;/span&gt;&lt;span style="color: grey;"&gt;, &lt;/span&gt;&lt;span style="color: green;"&gt;-- The Name of the Event Log&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: black;"&gt;EventID&lt;/span&gt;&lt;span style="color: grey;"&gt;, &lt;/span&gt;&lt;span style="color: green;"&gt;-- The number of the Event ID&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: black;"&gt;SourceName&lt;/span&gt;&lt;span style="color: grey;"&gt;, &lt;/span&gt;&lt;span style="color: green;"&gt;-- The Source of the error&lt;/span&gt;&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;&lt;span class="Apple-style-span" style="font-size: 12px;"&gt;&lt;span style="color: green;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: magenta; font-size: 12px;"&gt;&lt;span class="Apple-style-span" style="color: green;"&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="color: green; font-family: monospace; font-size: 12px;"&gt;&amp;nbsp;&lt;/span&gt;COUNT&lt;/span&gt;&lt;span style="color: grey; font-size: 12px;"&gt;(*) &lt;/span&gt;&lt;span style="color: blue; font-size: 12px;"&gt;AS &lt;/span&gt;&lt;span style="color: black; font-size: 12px;"&gt;Frequency&lt;/span&gt;&lt;span style="color: grey; font-size: 12px;"&gt;, &lt;/span&gt;&lt;span style="color: green;"&gt;&lt;span class="Apple-style-span" style="font-size: 12px;"&gt;--&amp;nbsp;Aggregate&amp;nbsp;distinct results&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-size: 12px;"&gt; &amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="color: black; font-size: 12px;"&gt;Message &lt;/span&gt;&lt;span style="color: green; font-size: 12px;"&gt;-- The body of text from the event&lt;/span&gt;&lt;/code&gt;&lt;br /&gt;
&lt;code style="font-size: 12px;"&gt;&lt;span style="color: blue;"&gt;INTO &lt;/span&gt;&lt;span style="color: black;"&gt;Report.txt &lt;/span&gt;&lt;span style="color: green;"&gt;-- Return the results to txt, based on the execution path&lt;/span&gt;&lt;/code&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: monospace; font-size: 12px;"&gt;&lt;span style="color: blue;"&gt;FROM &lt;/span&gt;&lt;span style="color: black;"&gt;Application&lt;/span&gt;&lt;span style="color: grey;"&gt;, &lt;/span&gt;&lt;span style="color: green;"&gt;-- The names of the default logs&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;code style="font-size: 12px;"&gt;&lt;span style="color: green;"&gt; &amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: black;"&gt;Security&lt;/span&gt;&lt;span style="color: grey;"&gt;, &lt;br /&gt;
&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: black;"&gt;System&lt;/span&gt;&lt;span style="color: grey;"&gt;, &lt;br /&gt;
&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: red;"&gt;'Directory Service'&lt;/span&gt;&lt;span style="color: grey;"&gt;, &lt;/span&gt;&lt;span style="color: green;"&gt;-- E&lt;/span&gt;&lt;/code&gt;&lt;span class="Apple-style-span" style="color: green; font-family: monospace; font-size: 12px;"&gt;xplicitly&lt;/span&gt;&lt;span class="Apple-style-span" style="color: green; font-family: monospace; font-size: 12px;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="color: green; font-family: monospace; font-size: 12px;"&gt;specify extra logs&lt;/span&gt;&lt;br /&gt;
&lt;code style="font-size: 12px;"&gt;&lt;span style="color: green;"&gt; &amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: red;"&gt;'DNS Server'&lt;/span&gt;&lt;span style="color: grey;"&gt;, &lt;br /&gt;
&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: red;"&gt;'File Replication Service'&amp;nbsp;&lt;/span&gt;&lt;/code&gt;&lt;br /&gt;
&lt;code style="font-size: 12px;"&gt;&lt;span style="color: red;"&gt;&lt;/span&gt;&lt;span style="color: blue;"&gt;WHERE &lt;/span&gt;&lt;span style="color: black;"&gt;EventType &lt;/span&gt;&lt;span style="color: blue;"&gt;IN&lt;/span&gt;&lt;span style="color: grey;"&gt;(&lt;/span&gt;&lt;span style="color: black;"&gt;1&lt;/span&gt;&lt;span style="color: grey;"&gt;;&lt;/span&gt;&lt;span style="color: black;"&gt;2&lt;/span&gt;&lt;span style="color: grey;"&gt;;&lt;/span&gt;&lt;span style="color: black;"&gt;3&lt;/span&gt;&lt;span style="color: grey;"&gt;;&lt;/span&gt;&lt;span style="color: black;"&gt;5&lt;/span&gt;&lt;span style="color: grey;"&gt;;&lt;/span&gt;&lt;span style="color: black;"&gt;16&lt;/span&gt;&lt;span style="color: grey;"&gt;) &lt;/span&gt;&lt;span style="color: green;"&gt;-- Ignore Information or Success event types&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: grey;"&gt;AND &lt;/span&gt;&lt;span style="color: black;"&gt;TimeGenerated &lt;/span&gt;&lt;span style="color: grey;"&gt;&amp;gt;= &lt;/span&gt;&lt;span style="color: black;"&gt;TO_LOCALTIME&lt;/span&gt;&lt;span style="color: grey;"&gt;( &lt;/span&gt;&lt;span style="color: black;"&gt;SUB&lt;/span&gt;&lt;span style="color: grey;"&gt;( &lt;/span&gt;&lt;span style="color: black;"&gt;SYSTEM_TIMESTAMP&lt;/span&gt;&lt;span style="color: grey;"&gt;(),&lt;/span&gt;&lt;span style="color: green;"&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;TIMESTAMP&lt;/span&gt;&lt;span style="color: grey;"&gt;(&lt;/span&gt;&lt;span style="color: red;"&gt;'30'&lt;/span&gt;&lt;span style="color: grey;"&gt;, &lt;/span&gt;&lt;span style="color: red;"&gt;'d'&lt;/span&gt;&lt;span style="color: grey;"&gt;) ) ) &lt;/span&gt;&lt;span style="color: green;"&gt;-- Subtract 30 days from exec time&lt;/span&gt;&lt;/code&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: monospace; font-size: 12px;"&gt;&lt;span style="color: blue;"&gt;GROUP BY &lt;/span&gt;&lt;span style="color: black;"&gt;EventLog&lt;/span&gt;&lt;span style="color: grey;"&gt;, &lt;/span&gt;&lt;span style="color: green;"&gt;-- Group our results, for the aforementioned aggregate&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;code style="font-size: 12px;"&gt;&lt;span style="color: green;"&gt; &amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: black;"&gt;EventID&lt;/span&gt;&lt;span style="color: grey;"&gt;, &lt;br /&gt;
&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: black;"&gt;SourceName&lt;/span&gt;&lt;span style="color: grey;"&gt;, &lt;br /&gt;
&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: black;"&gt;Message &lt;br /&gt;
HAVING &lt;/span&gt;&lt;span style="color: magenta;"&gt;COUNT&lt;/span&gt;&lt;span style="color: grey;"&gt;(*) &amp;gt; &lt;/span&gt;&lt;span style="color: black;"&gt;1 &lt;/span&gt;&lt;span style="color: green;"&gt;-- Only return events that have happened more than once&lt;/span&gt;&lt;/code&gt;&lt;br /&gt;
&lt;code style="font-size: 12px;"&gt;&lt;span style="color: green;"&gt;&lt;/span&gt;&lt;span style="color: blue;"&gt;ORDER BY &lt;/span&gt;&lt;span style="color: black;"&gt;EventLog&lt;/span&gt;&lt;span style="color: grey;"&gt;, &lt;/span&gt;&lt;span style="color: green;"&gt;-- Sort by log name, ascending&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: black;"&gt;EventID &lt;/span&gt;&lt;span style="color: green;"&gt;-- Then event id number, ascending&lt;/span&gt;&lt;/code&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4279057743765095593-8464953631633964984?l=www.eveningread.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/eveningread/~4/IWXBj0uOfOo" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.eveningread.com/feeds/8464953631633964984/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.eveningread.com/2011/04/parsing-logs-part-i.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4279057743765095593/posts/default/8464953631633964984?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4279057743765095593/posts/default/8464953631633964984?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/eveningread/~3/IWXBj0uOfOo/parsing-logs-part-i.html" title="Parsing Logs - Part I" /><author><name>Andrew Vogel</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://www.eveningread.com/2011/04/parsing-logs-part-i.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUUFQXw-cSp7ImA9WhZSFEk.&quot;"><id>tag:blogger.com,1999:blog-4279057743765095593.post-2870262337958476974</id><published>2011-03-29T18:06:00.000-07:00</published><updated>2011-03-29T18:06:50.259-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-03-29T18:06:50.259-07:00</app:edited><title>Adventures in Bare Metal Recovery</title><content type="html">&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;I've worked my way through several Bare Metal Recoveries before, including physical to virtual conversions, but this is the first time this has happened to me. &amp;nbsp;The fact that the server has been unable to contact the domain may have been a pre-existing condition which was further exasperated by a nasty malware infection.&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;/span&gt;This is a handy tool, if your server in question is a Domain Controller:&lt;br /&gt;
&lt;blockquote&gt;&lt;span class="Apple-style-span" style="line-height: 18px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;netdom resetpwd /server:server_name /userd:domain_name\administrator /passwordd:administrator_password&lt;/span&gt;&lt;/span&gt;&lt;/blockquote&gt;But if it's not, a tiny note on &lt;a href="http://blogs.technet.com/b/asiasupp/archive/2007/01/18/typical-symptoms-when-secure-channel-is-broken.aspx"&gt;this page&lt;/a&gt; explains that:&lt;br /&gt;
&lt;blockquote&gt;&lt;span class="Apple-style-span" style="line-height: 18px;"&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;span lang="EN-US"&gt;Note:&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-US"&gt;This method only works for DC. If it’s member server, we have to disjoin and rejoin domain.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/blockquote&gt;&lt;span class="Apple-style-span" style="line-height: 18px;"&gt;And I was stuck with a member server. &amp;nbsp;Thankfully its services recovered after rejoining the domain without too much hacking. &amp;nbsp;A few updates later and we were back on track.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4279057743765095593-2870262337958476974?l=www.eveningread.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/eveningread/~4/6yyQTJbLuNM" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.eveningread.com/feeds/2870262337958476974/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.eveningread.com/2011/03/adventures-in-bare-metal-recovery.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4279057743765095593/posts/default/2870262337958476974?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4279057743765095593/posts/default/2870262337958476974?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/eveningread/~3/6yyQTJbLuNM/adventures-in-bare-metal-recovery.html" title="Adventures in Bare Metal Recovery" /><author><name>Andrew Vogel</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://www.eveningread.com/2011/03/adventures-in-bare-metal-recovery.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0cEQXk-eCp7ImA9WhZTF08.&quot;"><id>tag:blogger.com,1999:blog-4279057743765095593.post-3888556674308701378</id><published>2011-03-21T09:30:00.000-07:00</published><updated>2011-03-21T09:30:00.750-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-03-21T09:30:00.750-07:00</app:edited><title>Weekend Warrior Wireless Project - Phase II</title><content type="html">After this last weekend's project, I ended up with more on my plate to fix than originally planned.&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-size: large;"&gt;Timing Really is Everything&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
As I noted in my &lt;a href="http://www.eveningread.com/2011/03/weekend-wireless-warrior-project.html"&gt;last post&lt;/a&gt;, I love the Buffalo WHR-HP-G54, because its &lt;a href="http://www.dd-wrt.com/wiki/index.php/Recover_from_a_Bad_Flash#Buffalo_WHR-HP-G54_soft_repair"&gt;so well supported&lt;/a&gt;! &amp;nbsp;By setting my local physical NIC to 192.168.11.2/24, I was able to ping my device when it started up by using the 5/5/5 method:&lt;br /&gt;
&lt;blockquote&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;ping -t -w 10 192.168.11.1&lt;/span&gt;&lt;/blockquote&gt;I found the Windows based GUI &lt;a href="http://www.dd-wrt.com/wiki/index.php/TFTP_flash"&gt;TFTP client listed here&lt;/a&gt; to be the best for restartable TFTP sessions. &amp;nbsp;First I'd get a a few errors, then at least 5 pings before it timed out. &amp;nbsp;Setting the timeout to 10, then starting the TFTP attempts prior to the 5/5/5 maintenance mode boot, I was able to send successfully!&lt;br /&gt;
&lt;br /&gt;
&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="https://lh6.googleusercontent.com/-g3Q2mZxjBOM/TYAS9cYAxdI/AAAAAAAAAZI/Vju7cZwN0Cg/s1600/New+Picture.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="256" src="https://lh6.googleusercontent.com/-g3Q2mZxjBOM/TYAS9cYAxdI/AAAAAAAAAZI/Vju7cZwN0Cg/s320/New+Picture.png" width="320" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Selecting options for a successful TFTP&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;Choosing the Right Firmware (Again)&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;Firmware was indeed what it came down to. &amp;nbsp;I chose a firmware that was both a different feature set, kernel, and wireless driver. &amp;nbsp;Essentially, it was too much for the nvram to handle. &amp;nbsp;Even during that initial upload, I was amazed at just how fast that firmware uploaded. &amp;nbsp;Oh, wait it actually didn't. &amp;nbsp;So back to my last "good" firmware, the 14929 vpn K24 sp2 build from Brainslayer.&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;From what research I have gathered, when making the jump to the NEWD-2 firmware, it includes a jump to the K26 series. &amp;nbsp;When I've got more time on my hands and as the builds mature, I'll jump back in and try out the latest and greatest. &amp;nbsp;Meanwhile the trusty 14929 will have to do. &amp;nbsp;At least if I did actually brick my device, I've got another one to spare.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4279057743765095593-3888556674308701378?l=www.eveningread.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/eveningread/~4/oekRy-yBIFc" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.eveningread.com/feeds/3888556674308701378/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.eveningread.com/2011/03/weekend-warrior-wireless-project-phase.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4279057743765095593/posts/default/3888556674308701378?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4279057743765095593/posts/default/3888556674308701378?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/eveningread/~3/oekRy-yBIFc/weekend-warrior-wireless-project-phase.html" title="Weekend Warrior Wireless Project - Phase II" /><author><name>Andrew Vogel</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://lh6.googleusercontent.com/-g3Q2mZxjBOM/TYAS9cYAxdI/AAAAAAAAAZI/Vju7cZwN0Cg/s72-c/New+Picture.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://www.eveningread.com/2011/03/weekend-warrior-wireless-project-phase.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D04DRn4-cSp7ImA9WhZTEUs.&quot;"><id>tag:blogger.com,1999:blog-4279057743765095593.post-2068008043451096956</id><published>2011-03-14T22:12:00.000-07:00</published><updated>2011-03-14T22:12:57.059-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-03-14T22:12:57.059-07:00</app:edited><title>Weekend Wireless Warrior Project</title><content type="html">Since my father just retired the router I setup for him in favor of re-aligning his IP schema with the generic defaults of the 2WIRE device included with his AT&amp;amp;T U-Verse subscription, I re-inherited one of my favorite toys, a pre-lawsuit Buffalo &lt;a href="http://www.dd-wrt.com/wiki/index.php/WHR-HP-G54"&gt;WHR-HP-G54&lt;/a&gt;. &amp;nbsp;I already had one in my possession (originally desiring to setup a PTP OpenVPN, but never configured it). &amp;nbsp;I recently swapped mine out to put in my old &lt;a href="http://support.apple.com/kb/SP76"&gt;Apple AirPort Express&lt;/a&gt;&amp;nbsp;so we could stream music to the home theater system. &amp;nbsp;So, now that I've got two good, hackable routers, it was high time to upgrade the firmware using &lt;a href="http://www.dd-wrt.com/"&gt;DD-WRT&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-size: large;"&gt;Preparing For The Upgrade&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
After reading the latest documentation on the &lt;a href="http://www.dd-wrt.com/phpBB2/viewtopic.php?t=51486"&gt;Peacock Thread&lt;/a&gt;, I prepared my system by running a &lt;a href="http://www.dd-wrt.com/wiki/index.php/Hard_reset_or_30/30/30"&gt;30/30/30 Reset&lt;/a&gt;. &amp;nbsp;This helps to completely clear the nvram and prep for what's essentially a "schema" upgrade for the settings in the nvram. &amp;nbsp;Ultimately, bricking can occur if this isn't done as settings can get jumbled between firmware revisions. (A situation I was bound to experience.)&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-size: large;"&gt;Researching the Right Firmware&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Choosing the most up-to-date, feature complete, and out-right compatible. &amp;nbsp;It's not as easy as visiting the latest router database. &amp;nbsp;Originally, I thought my device was running build 13064&amp;nbsp;(10/10/09) using the VPN feature-set. &amp;nbsp;This build has since been known to be rather unstable, in spite of still being recommended by the router database. &lt;br /&gt;
&lt;br /&gt;
Much to my surprise, after performing the 30/30/30 Reset, my router reported it was running firmware&amp;nbsp;10011 (07/27/08) vpn! &amp;nbsp;This is running the following firmware and wl driver:&lt;br /&gt;
&lt;blockquote style="text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;Linux DD-WRT 2.4.36 #310 Sun Jul 27 16:25:32 CEST 2008 mips&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;wl0: Jul 27 2008 08:31:25 version 4.150.10.5&lt;/span&gt;&lt;/blockquote&gt;&lt;div&gt;Yes, its still running Linux kernel 2.4. &amp;nbsp;Do a little research, and you'll find significant issues with the K26 (2.6 series kernel) builds, as well as with the later wireless drivers (&lt;a href="http://www.dd-wrt.com/phpBB2/viewtopic.php?t=55625"&gt;NEWD and NEWD-2&lt;/a&gt;). &amp;nbsp;The key point is that&amp;nbsp;"NEWD won't work only on corerev=4 radios. You can run it on 5 and 7, just virtual wireless interfaces won't work in AP mode. All the rest work."&lt;br /&gt;
&lt;br /&gt;
After &lt;a href="http://www.dd-wrt.com/phpBB2/viewtopic.php?t=52043"&gt;copious amounts of research&lt;/a&gt;, I settled on the v24-sp2 build 14929 vpn firmware. &amp;nbsp;And the initial flash was successful! &amp;nbsp;Here's the kernel and wireless driver versions for that build, a minor upgrade at the least:&lt;br /&gt;
&lt;blockquote style="text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;Linux DD-WRT 2.4.37 #13291 Thu Aug 12 02:58:35 CEST 2010 mips&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;wl0: Aug 11 2010 05:22:07 version 4.150.10.31&lt;/span&gt;&lt;/blockquote&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;Cut By The Bleeding Edge&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
But it wasn't enough, I had to run the 2.6 kernel for improved memory management and a better scheduler! &amp;nbsp;After all, I've only got 200Mhz of MIPS power, pulling in a whopping 199.0 BogoMIPs! &amp;nbsp;According to &lt;a href="http://www.dd-wrt.com/phpBB2/viewtopic.php?t=54711"&gt;this forum post&lt;/a&gt;, my device is compatible with the &lt;a href="http://www.dd-wrt.com/phpBB2/viewtopic.php?t=55625"&gt;nokaid build of the K24 NEWD-2 firmware&lt;/a&gt;. &amp;nbsp;This is one of the very reasons I chose this model router back in the day. &amp;nbsp;It's simply got the best support,&amp;nbsp;recoverability, an&amp;nbsp;mod-ability.&lt;br /&gt;
&lt;br /&gt;
Well, I chose the&amp;nbsp;NEWD-2 K26 firmware build&amp;nbsp;14929 std nokaid. &amp;nbsp;Notice anything wrong? &amp;nbsp;Yes, I chose to jump from K24 to K26 with NEWD-2. &amp;nbsp;And I bricked it. &amp;nbsp;Thankfully, I &lt;a href="http://www.dd-wrt.com/wiki/index.php/CFE_backup"&gt;backed up my CFE&lt;/a&gt; for best recoverability. &amp;nbsp;At this point, I need to &lt;a href="http://www.dd-wrt.com/wiki/index.php/Recover_from_a_Bad_Flash"&gt;get my device into maintenance mode&lt;/a&gt; and &lt;a href="http://www.dd-wrt.com/wiki/index.php/Installation#Method_2:_Flashing_with_TFTP"&gt;TFTP&lt;/a&gt; the last good firmware onto it. &amp;nbsp;I really don't want to solder on a JTAG.&lt;br /&gt;
&lt;br /&gt;
And now my weekend warrior project is now locked into my desk at the office for a little lunchtime project.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4279057743765095593-2068008043451096956?l=www.eveningread.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/eveningread/~4/59-CAJQ8BIo" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.eveningread.com/feeds/2068008043451096956/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.eveningread.com/2011/03/weekend-wireless-warrior-project.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4279057743765095593/posts/default/2068008043451096956?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4279057743765095593/posts/default/2068008043451096956?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/eveningread/~3/59-CAJQ8BIo/weekend-wireless-warrior-project.html" title="Weekend Wireless Warrior Project" /><author><name>Andrew Vogel</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://www.eveningread.com/2011/03/weekend-wireless-warrior-project.html</feedburner:origLink></entry></feed>

