SeaShellI’ve been pretty quiet lately and for good reason.  My company (Code Owls LLC) has just released their first commercial software product. 

The product is SeeShell, and it aims to fill a void that exists in the PowerShell space: visualizing data.

PowerShell gives you access to tons of data sources: WMI objects, performance counters, event logs, files, databases, system events, etc.  And with PowerShell remoting these data sources can be remote, multiplying the amount of data accessible by the size of your network.  Clearly getting the data is no longer a problem – PowerShell has evolved to fill this gap.

PowerShell is still limited in the ways it can show this data: tables and lists.  To be sure, these are very useful, but there are times when they are simply the wrong choice.

An Example of Awesomeness

Ever wanted to correlate an event log against a performance counter?  I’m not talking about a systems monitoring or Big Data situation – just a time when you wanted to snoop out a performance counter’s relationship to a set of events that appear in the event log.   Perhaps you have a hunch and just want to confirm it.  Maybe an app is consuming memory at specific events and never releasing it.

Think about how you might solve that problem on your own for a minute … no seriously, think about it for a minute …

… and then see how the problem is solved using SeeShell.  This script:

   1: import-module seeshell
   3: {
   4:   get-counter '\memory\available bytes' -continuous | `
   5:     select -expand countersamples
   6: } | out-chart -name memory -type spline -plot CookedValue -by Timestamp
   8: {
   9:   $i = 0;
  10:   while( $true ){
  11:     $e = get-eventlog -log application -source MyApp -newest 1 | `
  12:       where {$_.index -gt $i };
  14:     if( $e ) {
  15:       $i = $e.index;
  16:       $e
  17:     }
  18:   }
  19: } | out-chart -name memory -type timeline -plot Message -by TimeGenerated

produces this visualization:


that shows a clear relationship between the Starting Operations event logged by the application and a massive consumption of memory (around .5 Gigabytes) that immediately follows it. 

The visualization overlays the events logged by MyApp on to the performance counter data values. The events and the counter share a common axis: the timestamp of the counter sample or event.  SeeShell is smart enough to see that the X axis of the counter and the X axis of the event series are both datetimes, and assumes that you want them plotted on a common scale.

This is one small example of what SeeShell can do.  If you think this is cool, head on over to the SeeShell product demos page and check out the videos there.  Your mind will explode with joy.


I’m a visual thinker – I find it far easier to intuit the meaning of data when it is presented visually than numerically.  Gauging the reactions of those who’ve seen a SeeShell demo, I can see that there are many others in the same boat.

I’m also lazy – not the procrastinating or passive-aggressive kind of lazy, but the good kind of lazy that makes me want to have flexible tools I can bend to my current needs.  It’s the reason I’ve globbed on to PowerShell for most of my software tooling on Windows. 

PowerShell provides a platform where:

  • tools are small and simple
  • each tool does one thing very well
  • simple tools can be composed to solve complex problems

SeeShell aims to be one of those simple tools, nothing more.