<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>SQL Server Sleuth &#187; automation</title>
	<atom:link href="http://sqlserversleuth.com/tag/automation/feed/" rel="self" type="application/rss+xml" />
	<link>http://sqlserversleuth.com</link>
	<description>For DBAs that enjoy a good mystery</description>
	<lastBuildDate>Sat, 12 May 2012 15:43:20 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='sqlserversleuth.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://0.gravatar.com/blavatar/a9ab64e4b3cc6d92ec2c225a7d6ea0bd?s=96&#038;d=http%3A%2F%2Fs2.wp.com%2Fi%2Fbuttonw-com.png</url>
		<title>SQL Server Sleuth &#187; automation</title>
		<link>http://sqlserversleuth.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://sqlserversleuth.com/osd.xml" title="SQL Server Sleuth" />
	<atom:link rel='hub' href='http://sqlserversleuth.com/?pushpress=hub'/>
		<item>
		<title>Code snippet &#8211; Reestablishing the backup log chain with PowerShell</title>
		<link>http://sqlserversleuth.com/2011/05/19/code-snippet-reestablishing-the-backup-log-chain-with-powershell/</link>
		<comments>http://sqlserversleuth.com/2011/05/19/code-snippet-reestablishing-the-backup-log-chain-with-powershell/#comments</comments>
		<pubDate>Thu, 19 May 2011 05:20:18 +0000</pubDate>
		<dc:creator>tnbarkhouse</dc:creator>
				<category><![CDATA[PowerShell]]></category>
		<category><![CDATA[SQL Server]]></category>
		<category><![CDATA[automation]]></category>
		<category><![CDATA[backup]]></category>
		<category><![CDATA[bad practices]]></category>
		<category><![CDATA[catalog views]]></category>
		<category><![CDATA[full recovery model]]></category>
		<category><![CDATA[shoulders of giants]]></category>
		<category><![CDATA[snippet]]></category>
		<category><![CDATA[Transact-SQL]]></category>

		<guid isPermaLink="false">http://sqlserversleuth.com/?p=267</guid>
		<description><![CDATA[We have a certain customer that has an incredible fondness for undermining the restorability of their databases. Almost all of their databases are in the full recovery model and all-too-frequently the customer will start backing up transaction logs with the &#8230; <a href="http://sqlserversleuth.com/2011/05/19/code-snippet-reestablishing-the-backup-log-chain-with-powershell/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=sqlserversleuth.com&#038;blog=6775699&#038;post=267&#038;subd=tnbarkhouse&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>We have a certain customer that has an incredible fondness for undermining the restorability of their databases.  Almost all of their databases are in the <a href="http://msdn.microsoft.com/en-us/library/ms189275.aspx" target="_blank">full recovery model</a> and all-too-frequently the customer will start backing up transaction logs with the dreaded <a href="http://msdn.microsoft.com/en-us/library/ms186865%28SQL.90%29.aspx" target="_blank">NO_LOG</a> option, which destroys the <a href="http://technet.microsoft.com/en-us/magazine/gg132708.aspx" target="_blank">transaction log backup chain</a>:</p>
<pre style="color:red;margin-left:15px;">Msg 4214, Level 16, State 1, Line 1
BACKUP LOG cannot be performed because there is no current database backup.
Msg 3013, Level 16, State 1, Line 1
BACKUP LOG is terminating abnormally.</pre>
<p>In a future blog post, I will go into why users resort to this bad practice and what they should be doing instead.</p>
<p>This solution is based on a great <a href="http://sqlblog.com/blogs/kalen_delaney/archive/2008/11/30/when-is-full-recovery-not-really-full-recovery.aspx" target="_blank">blog post</a> from Kalen Delaney (<a href="http://sqlblog.com/blogs/kalen_delaney/" target="_blank">blog</a>, <a href="http://twitter.com/#!/sqlqueen" target="_blank">Twitter</a>), that showed how the <a href="http://msdn.microsoft.com/en-us/library/ms178575.aspx" target="_blank">[sys].[database_recovery_status]</a> catalog view can reveal databases suffering from this problem, using a query like so:</p>
<pre style="margin-left:15px;">SELECT DB_Name([database_id]) AS [DatabaseName]
FROM [sys].[database_recovery_status]
WHERE (
    ([last_log_backup_lsn] IS NULL)
    AND
    (Cast(DatabasePropertyEx(DB_Name([database_id]), 'Recovery') AS NVarChar(16)) = N'FULL')
    AND
    (Cast(DatabasePropertyEx(DB_Name([database_id]), 'Status') AS NVarChar(16)) = N'ONLINE')
)
ORDER BY [DatabaseName] ASC;</pre>
<p>The following <a href="http://technet.microsoft.com/en-us/scriptcenter/dd742419.aspx" target="_blank">PowerShell</a> function uses the query to retrieve a list of problematic databases and then automatically backs up each one:</p>
<pre style="margin-left:15px;">Function Repair-LogBackupChain (
    [String]$ServerName = $(Throw (New-Object -TypeName 'System.ArgumentNullException' -ArgumentList '$ServerName')),
    [String]$BackupDirectoryPath = $(Throw (New-Object -TypeName 'System.ArgumentNullException' -ArgumentList '$BackupDirectoryPath')),
    [String]$OutputDirectoryPath = $(Throw (New-Object -TypeName 'System.ArgumentNullException' -ArgumentList '$OutputDirectoryPath'))
) {
    [Int]$BackedUpDatabaseCount = 0;
    [String]$BackupFilePath = '';
    [String]$DatabaseName = '';
    [String]$ErrorMessage = '';
    [String]$OutputFilePath = '';
    [String]$Query = "SET NOCOUNT ON; SELECT DB_Name([database_id]) AS [DatabaseName] FROM [sys].[database_recovery_status] WHERE (([last_log_backup_lsn] IS NULL) AND (Cast(DatabasePropertyEx(DB_Name([database_id]), 'Recovery') AS NVarChar(16)) = N'FULL') AND (Cast(DatabasePropertyEx(DB_Name([database_id]), 'Status') AS NVarChar(16)) = N'ONLINE')) ORDER BY [DatabaseName] ASC;";
    [String]$TSQLCode = '';

    #   Create the necessary directories, if they don't already exist.
    $BackupDirectoryPath = Add-Directory -Path $BackupDirectoryPath;
    $OutputDirectoryPath = Add-Directory -Path $OutputDirectoryPath;

    #   Lookup the names of the databases, in the full recovery model, that 
    #   lack an intact transaction log backup chain.
    [String[]]$DatabaseNames = @(&amp; 'SQLCmd.exe' -E -S $ServerName -d 'tempdb' -Q $Query -b -h-1 -W);
    $DatabaseNames | Write-Debug;

    #   Verify that the list of databases was successfully retrieved.
    If ((Get-Item -Path Variable:'LastExitCode').Value -eq 0) {
        #   Iterate through the databases that need backups.
        $DatabaseNames | ForEach-Object {
            $DatabaseName = $_;
            Write-Host "Backing up the [$($DatabaseName)] database..." -ForegroundColor 'Cyan';

            $OutputFilePath = "$($OutputDirectoryPath)$(Get-EscapedFileNameComponent -FileNameComponent $ServerName),Backup database,$(Get-EscapedFileNameComponent -FileNameComponent $DatabaseName),$([DateTime]::Now.ToString('yyyyMMddTHHmmssfff')).out";
            Write-Debug "`$OutputFilePath = `"$($OutputFilePath)`"";

            #   Construct the name of the backup file.
            $BackupFilePath = [String]::Format(
                '{0}{1}_{2}_{3}.bak',
                $BackupDirectoryPath,
                (Get-EscapedFileNameComponent -FileNameComponent $ServerName),
                (Get-EscapedFileNameComponent -FileNameComponent $DatabaseName),
                ([DateTime]::Now.ToString('yyyyMMddTHHmmssfff'))
            );

            #   Generate the T-SQL for backing up the database.
            $TSQLCode = [String]::Format(
                "BACKUP DATABASE [{0}] TO DISK = N'{1}';",
                $DatabaseName,
                $BackupFilePath
            );
            Write-Debug "`$TSQLCode = `"$($TSQLCode)`"";

            #   Backup the database.
            &amp; 'SQLCmd.exe' -E -S $ServerName -d 'tempdb' -Q $TSQLCode -o $OutputFilePath -b;

            If (Test-Path -LiteralPath $BackupFilePath -PathType 'Leaf') {
                $BackedUpDatabaseCount++;
            }
            Else {
                $ErrorMessage = "There was a problem backing up the [$($DatabaseName)] database.";
                Throw (New-Object -TypeName 'System.InvalidOperationException' -ArgumentList $ErrorMessage);
            }
        }
    }
    Else {
        $ErrorMessage = [String]::Format(
            "There was a problem querying the [sys].[database_recovery_status] catalog view:`r`n{0}",
            (
                [String]::Join(
                    "`r`n",
                    $DatabaseNames
                )
            )
        );
        Throw (New-Object -TypeName 'System.InvalidOperationException' -ArgumentList $ErrorMessage);
    }

    Write-Host "A total of $($BackedUpDatabaseCount) database(s) was/were backed up." -ForegroundColor 'Green';

    Return;
}</pre>
<p>Here&#8217;s an example of using the function:</p>
<pre style="margin-left:15px;">Repair-LogBackupChain -ServerName 'DatabaseServer01\InstanceA' -BackupDirectoryPath 'C:\Temp\' -OutputDirectoryPath 'C:\Temp\';</pre>
<p><span style="font-weight:bold;">Note:</span> The code snippet is dependent on two functions that are included in the download for my <a href="/technical-presentations/powershellcookbook/" target="_blank">PowerShell cookbook</a> presentation, <span style="font-style:italic;">Add-Directory</span> and <span style="font-style:italic;">Get-EscapedFileNameComponent</span>.</p>
<p>Maybe by the time that I write the follow-up blog post, I will have received permission to break the customer of this nasty habit (using a <a href="http://www.sqlskills.com/BLOGS/PAUL/post/BACKUP-LOG-WITH-NO_LOG-use-abuse-and-undocumented-trace-flags-to-stop-it.aspx" target="_blank">tip</a> from Paul Randal (<a href="http://www.sqlskills.com/blogs/Paul/" target="_blank">blog</a>, <a href="http://twitter.com/#!/PaulRandal" target="_blank">Twitter</a>)).</p>
<p>Hopefully this PowerShell snippet will save you as much time as it has for me!</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/tnbarkhouse.wordpress.com/267/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/tnbarkhouse.wordpress.com/267/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/tnbarkhouse.wordpress.com/267/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/tnbarkhouse.wordpress.com/267/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/tnbarkhouse.wordpress.com/267/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/tnbarkhouse.wordpress.com/267/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/tnbarkhouse.wordpress.com/267/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/tnbarkhouse.wordpress.com/267/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/tnbarkhouse.wordpress.com/267/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/tnbarkhouse.wordpress.com/267/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/tnbarkhouse.wordpress.com/267/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/tnbarkhouse.wordpress.com/267/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/tnbarkhouse.wordpress.com/267/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/tnbarkhouse.wordpress.com/267/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=sqlserversleuth.com&#038;blog=6775699&#038;post=267&#038;subd=tnbarkhouse&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://sqlserversleuth.com/2011/05/19/code-snippet-reestablishing-the-backup-log-chain-with-powershell/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/a662186ae400e1e95ffca05d7b474fd7?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">tnbarkhouse</media:title>
		</media:content>
	</item>
		<item>
		<title>Script &#8211; Extracting XML deadlock graphs from a trace file</title>
		<link>http://sqlserversleuth.com/2011/02/24/script-extracting-xml-deadlock-graphs-from-a-trace-file/</link>
		<comments>http://sqlserversleuth.com/2011/02/24/script-extracting-xml-deadlock-graphs-from-a-trace-file/#comments</comments>
		<pubDate>Thu, 24 Feb 2011 17:04:00 +0000</pubDate>
		<dc:creator>tnbarkhouse</dc:creator>
				<category><![CDATA[PowerShell]]></category>
		<category><![CDATA[SQL Server]]></category>
		<category><![CDATA[attachments]]></category>
		<category><![CDATA[automation]]></category>
		<category><![CDATA[deadlocks]]></category>
		<category><![CDATA[Profiler]]></category>
		<category><![CDATA[script]]></category>
		<category><![CDATA[SMO]]></category>
		<category><![CDATA[SQL Trace]]></category>
		<category><![CDATA[SQLskills Immersion]]></category>
		<category><![CDATA[XML]]></category>

		<guid isPermaLink="false">http://sqlserversleuth.com/?p=254</guid>
		<description><![CDATA[Today is my fourth day of SQLskills Immersion Events training, taught by none other than Paul Randal (blog, Twitter) and Kimberly Tripp (blog, Twitter). The material and delivery have been amazing and I hope to have a chance to blog &#8230; <a href="http://sqlserversleuth.com/2011/02/24/script-extracting-xml-deadlock-graphs-from-a-trace-file/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=sqlserversleuth.com&#038;blog=6775699&#038;post=254&#038;subd=tnbarkhouse&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Today is my fourth day of <a href="http://www.sqlskills.com/T_SQLskillsMasterImmersionEvents.asp" target="_blank">SQLskills Immersion Events</a> training, taught by none other than Paul Randal (<a href="http://www.sqlskills.com/blogs/Paul/" target="_blank">blog</a>, <a href="http://twitter.com/#!/PaulRandal" target="_blank">Twitter</a>) and Kimberly Tripp (<a href="http://www.sqlskills.com/blogs/Kimberly/" target="_blank">blog</a>, <a href="http://twitter.com/#!/KimberlyLTripp" target="_blank">Twitter</a>).  The material and delivery have been amazing and I hope to have a chance to blog about it this weekend.  A fellow student, Eric Humphrey (<a href="http://www.erichumphrey.com/" target="_blank">blog</a>, <a href="http://twitter.com/#!/lotsahelp" target="_blank">Twitter</a>), asked about automatically extracting <a href="http://msdn.microsoft.com/en-us/library/ms177409.aspx" target="_blank">XML deadlock graphs</a> from a <a href="http://msdn.microsoft.com/en-us/library/ms191006.aspx" target="_blank">SQL Trace</a> file.</p>
<p>I&#8217;m a big proponent of using <a href="http://msdn.microsoft.com/en-us/library/ms191443.aspx" target="_blank">server-side traces</a> for <a href="http://msdn.microsoft.com/en-us/library/ms188246.aspx" target="_blank">troubleshooting deadlocks</a>.  During my <a href="/technical-presentations/deadlocks/" target="_blank">deadlocks presentation</a>, I show how to manually extract XML deadlock graphs using <a href="http://msdn.microsoft.com/en-us/library/ms181091.aspx" target="_blank">SQL Server Profiler</a>:</p>
<p>
        <img src="http://tnbarkhouse.files.wordpress.com/2011/02/sqlserverprofiler_extractxdls.png?w=640" style="margin-left:25px;">
    </p>
<p>That works, but it&#8217;s a manual process, which is anathema to us automation adherents.</p>
<p>When processing XML deadlock graphs, I tend to:</p>
<ol>
<li>query the trace data, via the <a href="http://msdn.microsoft.com/en-us/library/ms188425.aspx" target="_blank">[sys].[fn_trace_gettable]</a> system function,</li>
<li><a href="http://msdn.microsoft.com/en-us/library/ms187928.aspx" target="_blank">cast</a> the <a href="http://msdn.microsoft.com/en-us/library/ms190762.aspx" target="_blank">[TextData]</a> value to the <a href="http://msdn.microsoft.com/en-us/library/ms187339.aspx" target="_blank">XML</a> data type, then</li>
<li>analyze the deadlocks with <a href="http://msdn.microsoft.com/en-us/library/ms189075.aspx" target="_blank">XQuery</a>.</li>
</ol>
<p>I can see the benefit of having a few loose *.XDL files, so I spent a little time writing a <a href="http://technet.microsoft.com/en-us/scriptcenter/dd742419.aspx" target="_blank">PowerShell</a> script that will automatically extract the XML deadlock graphs and save them as files.  <a href="http://s3.amazonaws.com/sqlserversleuth-blog-post-attachments/ExportXDLFromTraceFile_0001000100200008.zip" target="_blank">This zip archive</a> contains the script and sample trace files.</p>
<p>Here is an example of using the script (assuming that you extracted the files to the &#8220;C:\Temp\&#8221; directory):</p>
<pre style="margin-left:15px;">[String]$ScriptUtilityPath = 'C:\Temp\Export-XDLFromTraceFile.ps1';
[String]$OutputDirectoryPath = 'C:\Temp\';
[String]$SourceServerName = 'T-SQL001';
[String]$TraceFilePath = 'C:\Temp\DeadlockTrace_20100522T113514.trc';
&amp; $ScriptUtilityPath -TraceFilePath $TraceFilePath -OutputDirectoryPath $OutputDirectoryPath -SourceServerName $SourceServerName -FormatXML | Out-Null;</pre>
<p>Here&#8217;s another example that leverages PowerShell&#8217;s <a href="http://en.wikipedia.org/wiki/Composability" target="_blank">composable</a> nature:</p>
<pre style="margin-left:15px;">[String]$ScriptUtilityPath = 'C:\Temp\Export-XDLFromTraceFile.ps1';
[String]$OutputDirectoryPath = 'C:\Temp\';
[System.IO.FileInfo[]]$OutputFiles = @();
[String]$SourceDirectoryPath = 'C:\Temp\';
[String]$SourceServerName = 'T-SQL001';
[String]$TraceFilePath = '';
Get-ChildItem -LiteralPath $SourceDirectoryPath -Filter '*.trc' | ForEach-Object {
    $TraceFilePath = $_.FullName;
    $OutputFiles += @(&amp; $ScriptUtilityPath -TraceFilePath $TraceFilePath -OutputDirectoryPath $OutputDirectoryPath -SourceServerName $SourceServerName -FormatXML);
}
$OutputFiles | Select-Object -Property Name, @{Name='Size_bytes'; Expression={'{0:N0}' -f $_.Length}} | Format-Table -AutoSize;</pre>
<p>Let me know if this is useful to you, or if you have any suggestions to make it better.</p>
<p>NOTE: I haven&#8217;t had a chance to test the script with the SQL Server 2005 <a href="http://msdn.microsoft.com/en-us/library/ms162169.aspx" target="_blank">SQL Server Management Objects</a> (SMO) assemblies.  I suspect one or both of the following issues:</p>
<ul>
<li>Classes may reside in different assemblies—SMO has a <a href="http://msdn.microsoft.com/en-us/library/dd206977.aspx" target="_blank">less than stellar history of backward compatibility</a></li>
<li>The sample trace files were created on a SQL Server 2008 R2 instance, so they probably cannot be opened by the 9.0 tools</li>
</ul>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/tnbarkhouse.wordpress.com/254/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/tnbarkhouse.wordpress.com/254/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/tnbarkhouse.wordpress.com/254/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/tnbarkhouse.wordpress.com/254/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/tnbarkhouse.wordpress.com/254/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/tnbarkhouse.wordpress.com/254/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/tnbarkhouse.wordpress.com/254/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/tnbarkhouse.wordpress.com/254/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/tnbarkhouse.wordpress.com/254/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/tnbarkhouse.wordpress.com/254/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/tnbarkhouse.wordpress.com/254/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/tnbarkhouse.wordpress.com/254/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/tnbarkhouse.wordpress.com/254/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/tnbarkhouse.wordpress.com/254/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=sqlserversleuth.com&#038;blog=6775699&#038;post=254&#038;subd=tnbarkhouse&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://sqlserversleuth.com/2011/02/24/script-extracting-xml-deadlock-graphs-from-a-trace-file/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/a662186ae400e1e95ffca05d7b474fd7?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">tnbarkhouse</media:title>
		</media:content>

		<media:content url="http://tnbarkhouse.files.wordpress.com/2011/02/sqlserverprofiler_extractxdls.png" medium="image" />
	</item>
		<item>
		<title>The Presentations Won&#8217;t Be Posted Until After the PASS Summit</title>
		<link>http://sqlserversleuth.com/2009/10/31/the-presentations-wont-be-posted-until-after-the-pass-summit/</link>
		<comments>http://sqlserversleuth.com/2009/10/31/the-presentations-wont-be-posted-until-after-the-pass-summit/#comments</comments>
		<pubDate>Sat, 31 Oct 2009 05:10:45 +0000</pubDate>
		<dc:creator>tnbarkhouse</dc:creator>
				<category><![CDATA[SQL Server]]></category>
		<category><![CDATA[automation]]></category>
		<category><![CDATA[conferences]]></category>
		<category><![CDATA[escalation calls]]></category>
		<category><![CDATA[NTSSUG]]></category>
		<category><![CDATA[PASS]]></category>
		<category><![CDATA[speaking]]></category>
		<category><![CDATA[SQLDiag]]></category>
		<category><![CDATA[SQLSaturday]]></category>

		<guid isPermaLink="false">http://sqlserversleuth.com/?p=167</guid>
		<description><![CDATA[I&#8217;ve decided that the posting of my presentation materials (PowerPoint slide decks and sample code) will have to wait until I return from the 2009 PASS Community Summit. I apologize again for the delay. As I mentioned previously, I&#8217;ve been &#8230; <a href="http://sqlserversleuth.com/2009/10/31/the-presentations-wont-be-posted-until-after-the-pass-summit/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=sqlserversleuth.com&#038;blog=6775699&#038;post=167&#038;subd=tnbarkhouse&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve decided that the posting of my presentation materials (PowerPoint slide decks and sample code) will have to wait until I return from the <a href="http://summit2009.sqlpass.org/" target="_blank">2009 PASS Community Summit</a>.  I apologize again for the delay.</p>
<p>As I <a href="/2009/10/21/the-delay-continues/" target="_blank">mentioned previously</a>, I&#8217;ve been adding to and improving the demonstrations for the <a href="/technical-presentations/#SQLDiag" target="_blank">SQLDiag</a> presentation.  I was satisfied with the code (in terms of functionality, it still needed polishing and testing) until last week, when I got an escalation call about end-user complaints of poor performance with a customer&#8217;s application.  This type of case calls for the techniques covered in my presentation.  I then realized that October has been a bit of a dry spell in terms of complex issues that merited these techniques.</p>
<p>I ended up seeing a number of opportunities to further automate the process, pleased with the dual benefit of 1.) helping to solve the issue for the customer and 2.) having more to share with my audiences.  For example, I finally created a PowerShell script that automatically extracts a single <a href="http://msdn.microsoft.com/en-us/library/ms162833.aspx" target="_blank">SQLDiag</a> data set from a <a href="http://7-Zip.org/" target="_blank">7-Zip</a> archive and loads it into <a href="http://pal.codeplex.com/" target="_blank">PAL</a> and <a href="http://sqlnexus.codeplex.com/" target="_blank">SQL Nexus</a>.  This saves an <span style="font-weight:bold;">immense</span> amount of time!  The downside is that I added a significant set of new scripts that have to be refined and tested (but they are absolutely worth it!).</p>
<p>I have been putting the release of the presentation materials above many other tasks (including blogging, participating on <a href="/2009/10/12/my-first-forum-contribution/" target="_blank">forums</a>, and many responsibilities in my personal life), which has really added to my stress level.  It&#8217;s time to reprioritize&#8230; I need to enjoy some down-time with my wife, tie up a few loose ends at work, and prepare for the PASS conference.  I&#8217;m sorry to postpone further, but on the other hand, the quality and quantity of deliverables will be much greater this way.  I&#8217;m sure that you&#8217;ll find it worth the wait!</p>
<p>Expect the presentation materials the week of November 9th.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/tnbarkhouse.wordpress.com/167/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/tnbarkhouse.wordpress.com/167/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/tnbarkhouse.wordpress.com/167/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/tnbarkhouse.wordpress.com/167/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/tnbarkhouse.wordpress.com/167/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/tnbarkhouse.wordpress.com/167/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/tnbarkhouse.wordpress.com/167/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/tnbarkhouse.wordpress.com/167/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/tnbarkhouse.wordpress.com/167/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/tnbarkhouse.wordpress.com/167/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/tnbarkhouse.wordpress.com/167/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/tnbarkhouse.wordpress.com/167/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/tnbarkhouse.wordpress.com/167/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/tnbarkhouse.wordpress.com/167/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=sqlserversleuth.com&#038;blog=6775699&#038;post=167&#038;subd=tnbarkhouse&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://sqlserversleuth.com/2009/10/31/the-presentations-wont-be-posted-until-after-the-pass-summit/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/a662186ae400e1e95ffca05d7b474fd7?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">tnbarkhouse</media:title>
		</media:content>
	</item>
		<item>
		<title>Using PowerShell to Determine the Windows Installer Version</title>
		<link>http://sqlserversleuth.com/2009/07/08/using-powershell-to-determine-the-windows-installer-version/</link>
		<comments>http://sqlserversleuth.com/2009/07/08/using-powershell-to-determine-the-windows-installer-version/#comments</comments>
		<pubDate>Wed, 08 Jul 2009 17:51:21 +0000</pubDate>
		<dc:creator>tnbarkhouse</dc:creator>
				<category><![CDATA[PowerShell]]></category>
		<category><![CDATA[automation]]></category>
		<category><![CDATA[PowerShell command line(s)]]></category>
		<category><![CDATA[Windows administration]]></category>
		<category><![CDATA[Windows Installer]]></category>

		<guid isPermaLink="false">http://tnbarkhouse.wordpress.com/?p=61</guid>
		<description><![CDATA[I&#8217;m going to attempt a short post&#8230; Sometimes it&#8217;s necessary to determine the version of Windows Installer present on a system. The installation package for new products may be designed to use a feature added to a specific version of &#8230; <a href="http://sqlserversleuth.com/2009/07/08/using-powershell-to-determine-the-windows-installer-version/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=sqlserversleuth.com&#038;blog=6775699&#038;post=61&#038;subd=tnbarkhouse&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m going to attempt a short post&#8230;</p>
<p>Sometimes it&#8217;s necessary to determine the version of <a href="http://msdn.microsoft.com/en-us/library/cc185688(VS.85).aspx" target="_blank">Windows Installer</a> present on a system.  The <a href="http://msdn.microsoft.com/en-us/library/aa369294(VS.85).aspx" target="_blank">installation package</a> for new products may be designed to use a feature added to a specific version of Windows Installer.  It can be helpful to know whether you need to upgrade Windows Installer before attempting deployment of the new product.</p>
<p>According to the <a href="http://blogs.msdn.com/windows_installer_team/archive/2005/08/05/448386.aspx" target="_blank">Windows Installer Team</a>, the best way to determine the version of Windows Installer is to examine the version of the &#8220;MSI.dll&#8221; file.  The following PowerShell command lines do this.</p>
<p>NOTE: Sometimes I choose to issue individual PowerShell command lines rather than running a script.  I&#8217;ll explain this later, but even for very long command lines, they can be pasted into the command window without any problems.  It doesn&#8217;t matter if they wrap.  Also, you can paste several lines at once.</p>
<p>The command lines are:</p>
<p>    <code style="font-size:smaller;"></p>
<p style="text-align:left;">$OriginalErrorActionPreference = $ErrorActionPreference;</p>
<p style="text-align:left;">$ErrorActionPreference = 'SilentlyContinue';</p>
<p style="text-align:left;">Get-ChildItem -Path 'C:\Windows\Sys*[36][24]\' -Include ('MSI.dll', 'MSIExec.exe') -Recurse | Sort-Object -Property DirectoryName, Name | Select-Object -Property DirectoryName, Name, @{Name='FileSize';Expression={'{0:N0}' -f $_.Length}}, @{Name='LastWriteTime';Expression={$_.LastWriteTime.ToString('yyyy-MM-dd HH:mm:ss')}}, @{Name='Version';Expression={[System.Diagnostics.FileVersionInfo]::GetVersionInfo($_.FullName).FileVersion;}} | Format-List;</p>
<p style="text-align:left;">$ErrorActionPreference = $OriginalErrorActionPreference;</p>
<p>    </code></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/tnbarkhouse.wordpress.com/61/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/tnbarkhouse.wordpress.com/61/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/tnbarkhouse.wordpress.com/61/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/tnbarkhouse.wordpress.com/61/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/tnbarkhouse.wordpress.com/61/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/tnbarkhouse.wordpress.com/61/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/tnbarkhouse.wordpress.com/61/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/tnbarkhouse.wordpress.com/61/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/tnbarkhouse.wordpress.com/61/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/tnbarkhouse.wordpress.com/61/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/tnbarkhouse.wordpress.com/61/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/tnbarkhouse.wordpress.com/61/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/tnbarkhouse.wordpress.com/61/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/tnbarkhouse.wordpress.com/61/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=sqlserversleuth.com&#038;blog=6775699&#038;post=61&#038;subd=tnbarkhouse&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://sqlserversleuth.com/2009/07/08/using-powershell-to-determine-the-windows-installer-version/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/a662186ae400e1e95ffca05d7b474fd7?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">tnbarkhouse</media:title>
		</media:content>
	</item>
		<item>
		<title>Speaking at the PASS Community Summit 2009</title>
		<link>http://sqlserversleuth.com/2009/07/01/speaking-at-the-pass-community-summit-2009/</link>
		<comments>http://sqlserversleuth.com/2009/07/01/speaking-at-the-pass-community-summit-2009/#comments</comments>
		<pubDate>Thu, 02 Jul 2009 04:41:12 +0000</pubDate>
		<dc:creator>tnbarkhouse</dc:creator>
				<category><![CDATA[SQL Server]]></category>
		<category><![CDATA[automation]]></category>
		<category><![CDATA[conferences]]></category>
		<category><![CDATA[NTSSUG]]></category>
		<category><![CDATA[PASS]]></category>
		<category><![CDATA[PSSDiag]]></category>
		<category><![CDATA[speaking]]></category>
		<category><![CDATA[SQLDiag]]></category>

		<guid isPermaLink="false">http://tnbarkhouse.wordpress.com/?p=35</guid>
		<description><![CDATA[One of my abstracts was selected for the PASS Community Summit 2009! It is an immense honor to get to speak at the conference, and it&#8217;s humbling to see my name listed amongst those of so many renowned SQL Server &#8230; <a href="http://sqlserversleuth.com/2009/07/01/speaking-at-the-pass-community-summit-2009/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=sqlserversleuth.com&#038;blog=6775699&#038;post=35&#038;subd=tnbarkhouse&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>One of my abstracts was selected for the <a href="http://summit2009.sqlpass.org/" target="_blank">PASS Community Summit 2009</a>!  It is an immense honor to get to speak at the conference, and it&#8217;s humbling to see <a href="http://summit2009.sqlpass.org/Agenda/ProgramSessions.aspx" target="_blank">my name listed amongst those of so many renowned SQL Server experts</a>!  According to Andy Warren (<a href="http://www.sqlservercentral.com/blogs/andy_warren/" target="_blank">blog</a>, <a href="http://twitter.com/sqlandy" target="_blank">Twitter</a>), a member of the <a href="http://www.sqlpass.org/AboutPASS/BoardofDirectors.aspx" target="_blank">PASS Board of Directors</a>, I am one of <a href="http://www.sqlpass.org/Community/PASSBlog/articleType/ArticleView/articleId/88.aspx" target="_blank">thirteen speakers</a> who will be presenting at a PASS Summit for the first time.</p>
<p>I want to thank two friends and mentors who helped me to secure this opportunity, Peter DeBetta (<a href="http://sqlblog.com/blogs/peter_debetta/" target="_blank">blog</a>, <a href="http://twitter.com/debettap" target="_blank">Twitter</a>) and Jason Massie (<a href="http://blog.statisticsio.com/" target="_blank">blog</a>, <a href="http://twitter.com/statisticsio" target="_blank">Twitter</a>).  Both are <a href="https://mvp.support.microsoft.com/communities/mvp.aspx?product=1&amp;competency=SQL+Server" target="_blank">SQL Server MVPs</a> that I met through the <a href="http://northtexas.sqlpass.org/" target="_blank">North Texas SQL Server Users Group</a>.  Each has presented at previous PASS conferences and sat on committees to select conference speakers (Peter for <a href="http://www.devteach.com/TechChair.aspx" target="_blank">DevTeach</a>/<a href="http://www.sqlteach.com/TechChair.aspx" target="_blank">SQLTeach</a> and Jason for the <a href="http://www.sqlpass.org/Community/SpeakerResource.aspx" target="_blank">PASS</a> Summit).  Their advice has helped me get into speaking at the local user groups, position my abstracts for selection, and simply grow as a SQL Server professional!</p>
<p>Here are the details on my session:</p>
<table style="font-size:smaller;">
<tr>
<td style="font-weight:bold;vertical-align:top;white-space:nowrap;">Session Name:</td>
<td style="text-align:left;">Leveraging PSSDiag/SQLDiag for Efficient Troubleshooting</td>
</tr>
<tr>
<td style="font-weight:bold;vertical-align:top;white-space:nowrap;">Track:</td>
<td style="text-align:left;"><a href="http://summit2009.sqlpass.org/Agenda.aspx" target="_blank">Enterprise Database Administration and Deployment</a></td>
</tr>
<tr>
<td style="font-weight:bold;vertical-align:top;white-space:nowrap;">Description:</td>
<td style="text-align:left;">Over the years, <a href="http://blogs.msdn.com/psssql/" target="_blank">Microsoft Customer Service and Support</a> has developed a number of amazing tools for troubleshooting SQL Server. Thankfully many of these tools have been shared with the public. In this session I will demonstrate the configuration and usage of <a href="http://support.microsoft.com/default.aspx?scid=kb;en-us;830232" target="_blank">PSSDiag</a> (for SQL Server 2000) and <a href="http://msdn.microsoft.com/en-us/library/ms162833.aspx" target="_blank">SQLDiag</a> (for SQL Server 2005 and 2008), which collect valuable diagnostic data. We will then analyze the data using <a href="http://support.microsoft.com/default.aspx?scid=kb;en-us;944837" target="_blank">RML Utilities</a> as well as a few scripts of my own. Come and see how these tools can save you massive amounts of troubleshooting time!</td>
</tr>
<tr>
<td style="font-weight:bold;vertical-align:top;white-space:nowrap;">Prerequisites:</td>
<td style="text-align:left;">A basic understanding of SQL Server diagnostic data (such as <a href="http://msdn.microsoft.com/en-us/library/ms191006.aspx" target="_blank">traces</a>, <a href="http://msdn.microsoft.com/en-us/library/ms189082.aspx" target="_blank">server metadata</a>, and <a href="http://msdn.microsoft.com/en-us/library/ms191246.aspx" target="_blank">performance counters</a>)</td>
</tr>
<tr>
<td style="font-weight:bold;vertical-align:top;white-space:nowrap;">Session Goals:</td>
<td style="text-align:left;">
<ol>
<li>Familiarity with the setup and usage of the PSSDiag and SQLDiag utilities</li>
<li>Familiarity with analyzing diagnostic data with the RML Utilities</li>
<li>The ability to use PSSDiag/SQLDiag data to diagnose problems</li>
</ol>
</td>
</tr>
</table>
<p>I&#8217;ll post information on this blog as I refine the presentation and its demonstrations over the next few months.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/tnbarkhouse.wordpress.com/35/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/tnbarkhouse.wordpress.com/35/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/tnbarkhouse.wordpress.com/35/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/tnbarkhouse.wordpress.com/35/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/tnbarkhouse.wordpress.com/35/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/tnbarkhouse.wordpress.com/35/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/tnbarkhouse.wordpress.com/35/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/tnbarkhouse.wordpress.com/35/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/tnbarkhouse.wordpress.com/35/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/tnbarkhouse.wordpress.com/35/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/tnbarkhouse.wordpress.com/35/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/tnbarkhouse.wordpress.com/35/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/tnbarkhouse.wordpress.com/35/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/tnbarkhouse.wordpress.com/35/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=sqlserversleuth.com&#038;blog=6775699&#038;post=35&#038;subd=tnbarkhouse&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://sqlserversleuth.com/2009/07/01/speaking-at-the-pass-community-summit-2009/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/a662186ae400e1e95ffca05d7b474fd7?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">tnbarkhouse</media:title>
		</media:content>
	</item>
		<item>
		<title>My PowerShell Script Won A Contest!</title>
		<link>http://sqlserversleuth.com/2009/04/30/my-powershell-script-won-a-contest/</link>
		<comments>http://sqlserversleuth.com/2009/04/30/my-powershell-script-won-a-contest/#comments</comments>
		<pubDate>Fri, 01 May 2009 02:10:41 +0000</pubDate>
		<dc:creator>tnbarkhouse</dc:creator>
				<category><![CDATA[PowerShell]]></category>
		<category><![CDATA[SQL Server]]></category>
		<category><![CDATA[automation]]></category>
		<category><![CDATA[script utility]]></category>

		<guid isPermaLink="false">http://tnbarkhouse.wordpress.com/?p=15</guid>
		<description><![CDATA[Yesterday, I attended a Live Meeting for the PASS Database Administration Special Interest Group, presented by Buck Woody. The topic was on using PowerShell with SQL Server. Given that these are two of my favorite technologies, I decided to participate. &#8230; <a href="http://sqlserversleuth.com/2009/04/30/my-powershell-script-won-a-contest/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=sqlserversleuth.com&#038;blog=6775699&#038;post=15&#038;subd=tnbarkhouse&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Yesterday, I attended a <a href="http://office.microsoft.com/livemeeting" target="_blank">Live Meeting</a> for the <a href="http://www.sqlpass.org/" target="_blank">PASS</a> <a href="http://www.sqlpass.org/Community/SIGs/DatabaseAdministrationSIG/tabid/80/Default.aspx" target="_blank">Database Administration Special Interest Group</a>, presented by <a href="http://blogs.msdn.com/user/Profile.aspx?UserID=69458" target="_blank">Buck Woody</a>.  The topic was on using PowerShell with SQL Server.  Given that these are two of my favorite technologies, I decided to participate.</p>
<p>Since it was an introduction to PowerShell, the information was a bit below my skill level.  However, I did glean a few gems of knowledge.  Most of all, I found Buck&#8217;s presentation style very appealing.  Now I&#8217;m really going to have to listen to episode 41 of <a href="http://sqldownunder.com/PreviousShows/tabid/98/Default.aspx" target="_blank">SQL Down Under</a>.</p>
<p>Anyway, at the end of the presentation, Buck announced that, courtesy of SQL Server MVP <a href="http://sqlblog.com/blogs/rick_heiges/default.aspx" target="_blank">Rick Heiges</a>, a <a href="http://www.microsoft.com/click/thrive/thrivecard/" target="_blank">Microsoft Thrive card</a> would be awarded to the person that sent Buck the best PowerShell/SQL Server script.</p>
<p>I wrote a utility for myself back in January.  Sometimes when I get an escalation call, the front-line support personnel simply jump in with &#8220;I received an alert with error ___.&#8221;  Very few error codes are committed to my memory, so this doesn&#8217;t provide much information to me.  My utility simply looks up the error message in the <a href="http://msdn.microsoft.com/en-us/library/ms187382.aspx" target="_blank">[master].[sys].[messages]</a> table and then presents it in a web page.</p>
<p>I&#8217;ve been planning to publish the script utility on this blog for a little while, but just haven&#8217;t gotten around to it.  It&#8217;s simple, but pretty useful.</p>
<p>I decided to submit it for Buck&#8217;s contest, and (amazingly) I won!  Woohoo!  Check out the announcement on Buck&#8217;s blog: <a href="http://blogs.msdn.com/buckwoody/archive/2009/04/30/and-the-winner-is-get-sql-server-error-messages-from-powershell.aspx" target="_blank">And the Winner is &#8211; Get SQL Server Error Messages from PowerShell</a>.</p>
<p>When I redeemed the Microsoft Thrive, I received a voucher for a free certification exam.  I need to update my certifications, so this is very serendipitous.  The bigger deal, though, is the recognition.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/tnbarkhouse.wordpress.com/15/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/tnbarkhouse.wordpress.com/15/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/tnbarkhouse.wordpress.com/15/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/tnbarkhouse.wordpress.com/15/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/tnbarkhouse.wordpress.com/15/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/tnbarkhouse.wordpress.com/15/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/tnbarkhouse.wordpress.com/15/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/tnbarkhouse.wordpress.com/15/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/tnbarkhouse.wordpress.com/15/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/tnbarkhouse.wordpress.com/15/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/tnbarkhouse.wordpress.com/15/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/tnbarkhouse.wordpress.com/15/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/tnbarkhouse.wordpress.com/15/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/tnbarkhouse.wordpress.com/15/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=sqlserversleuth.com&#038;blog=6775699&#038;post=15&#038;subd=tnbarkhouse&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://sqlserversleuth.com/2009/04/30/my-powershell-script-won-a-contest/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/a662186ae400e1e95ffca05d7b474fd7?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">tnbarkhouse</media:title>
		</media:content>
	</item>
	</channel>
</rss>
