<?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/"
	>

<channel>
	<title>Technical Jargon &#187; PowerShell</title>
	<atom:link href="http://www.jeremyskinner.co.uk/category/powershell/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.jeremyskinner.co.uk</link>
	<description>On Error Resume Coding</description>
	<lastBuildDate>Sun, 08 Aug 2010 13:36:41 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Using Mercurial with Windows Powershell</title>
		<link>http://www.jeremyskinner.co.uk/2010/04/21/using-mercurial-with-windows-powershell/</link>
		<comments>http://www.jeremyskinner.co.uk/2010/04/21/using-mercurial-with-windows-powershell/#comments</comments>
		<pubDate>Wed, 21 Apr 2010 08:12:00 +0000</pubDate>
		<dc:creator>Jeremy Skinner</dc:creator>
				<category><![CDATA[PowerShell]]></category>
		<category><![CDATA[mercurial]]></category>

		<guid isPermaLink="false">http://www.jeremyskinner.co.uk/2010/04/21/using-mercurial-with-windows-powershell/</guid>
		<description><![CDATA[Last month I wrote about using git with Windows Powershell by making use of a custom prompt function as well as tab expansion. My sample code for the git tab expansion and Mark’s custom prompt are now available on GitHub in the posh-git project. I’ve also ported both the prompt and the tab expansion to [...]]]></description>
			<content:encoded><![CDATA[<p>Last month I wrote about using <a href="http://www.jeremyskinner.co.uk/2010/03/07/using-git-with-windows-powershell/">git with Windows Powershell</a> by making use of a custom prompt function as well as tab expansion. My sample code for the git tab expansion and <a href="http://www.markembling.info/view/git-powershell-revisited">Mark’s custom prompt</a> are now available on GitHub in the <a href="http://github.com/dahlbyk/posh-git">posh-git project</a>.</p>
<p>I’ve also ported both the prompt and the tab expansion to work with <a href="http://mercurial.selenic.com">Mercurial</a>. </p>
<p><a href="http://www.jeremyskinner.co.uk/wp-content/uploads/2010/04/image.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.jeremyskinner.co.uk/wp-content/uploads/2010/04/image_thumb.png" width="530" height="292" /></a> </p>
<p>Much like the git prompt, the Mercurial prompt shows the name of the branch as well as other information. The prompt shows the following information:</p>
<ul>
<li>“hg” – Identifies this as a mercurial repository (so I can tell whether I’m using git or mercurial) </li>
<li>“default” – We’re currently on the “default” branch </li>
<li>“+&lt;number&gt;” – Number of files that have been added but not yet committed </li>
<li>“~&lt;number&gt;” – Number of files that have been modified but not yet committed </li>
<li>“-&lt;number&gt;” – Number of files that have been removed but not yet committed </li>
<li>“?&lt;number&gt;” – Number of untracked files in the repository </li>
<li>“!&lt;number&gt;” – Number of missing files </li>
</ul>
<p>I’ve also written some basic tab expansion functionality that provides completion for hg commands as well as hgtk commands (the <a href="http://tortoisehg.bitbucket.org/">TortoiseHg</a> command line tool).</p>
<p>Code can be found in the <a href="http://github.com/jeremyskinner/posh-hg">posh-hg repository</a> (somewhat ironically hosted on GitHub).</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jeremyskinner.co.uk/2010/04/21/using-mercurial-with-windows-powershell/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Using Git with Windows Powershell</title>
		<link>http://www.jeremyskinner.co.uk/2010/03/07/using-git-with-windows-powershell/</link>
		<comments>http://www.jeremyskinner.co.uk/2010/03/07/using-git-with-windows-powershell/#comments</comments>
		<pubDate>Sun, 07 Mar 2010 16:01:00 +0000</pubDate>
		<dc:creator>Jeremy Skinner</dc:creator>
				<category><![CDATA[PowerShell]]></category>
		<category><![CDATA[git]]></category>

		<guid isPermaLink="false">http://www.jeremyskinner.co.uk/2010/03/07/using-git-with-windows-powershell/</guid>
		<description><![CDATA[Whenever I’m working with a Git repository I tend to do so from a Windows Powershell command line running inside Console. I prefer this to the UNIX-like “git bash” that comes with msysgit and it’s fairly straightforward to extend Powershell to provide git integration. Custom Prompt The first thing that I have is a custom [...]]]></description>
			<content:encoded><![CDATA[<p>Whenever I’m working with a <a href="http://git-scm.com/">Git</a> repository I tend to do so from a Windows Powershell command line running inside <a href="http://console.sourceforge.net">Console</a>. I prefer this to the UNIX-like “git bash” that comes with msysgit and it’s fairly straightforward to extend Powershell to provide git integration.</p>
<h3>Custom Prompt</h3>
<p>The first thing that I have is a custom prompt when I’m within a Git repository:</p>
<p><a href="http://www.jeremyskinner.co.uk/wp-content/uploads/2010/03/gitprompt.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="gitprompt" border="0" alt="gitprompt" src="http://www.jeremyskinner.co.uk/wp-content/uploads/2010/03/gitprompt_thumb.png" width="437" height="250" /></a> </p>
<p>This prompt shows various pieces of information about the current git repository:</p>
<ul>
<li>“1.3” – The name of the current branch that I’m working on </li>
<li>“+0” – The number of files that have been added since the last commit </li>
<li>“~1” – The number of files that have been modified since the last commit </li>
<li>“-0” – The number of files that have been deleted since the last commit </li>
<li>“!” – Whether or not there are untracked files in the working directory </li>
</ul>
<p>Essentially this is implemented by writing a custom “prompt” function inside your Powershell profile. My colleague <a href="http://www.markembling.info">Mark Embling</a>&#160;<a href="http://www.markembling.info/view/my-ideal-powershell-prompt-with-git-integration">wrote about this in detail.</a> </p>
<h3></h3>
<h3>Tab Expansion</h3>
<p>I also use a custom TabExpansion function that provides tab-completion for common git commands.</p>
<p>For example, if I type “git ch&lt;tab&gt;” then powershell will insert “git checkout”. This is taken further by providing auto-completion for branch names and remote names, so typing “git push &lt;tab&gt;” would automatically fill in “git push origin” and “git push origin &lt;tab&gt;” would then cycle through my local branches.</p>
<p>To implement a custom TabExpansion function, you’ll need to open your Powershell profile (stored in Documents\WindowsPowershell\Profile.ps1). If this file doesn’t exist, then you’ll need to create it. </p>
<p>Next, create a function called “TabExpansion”. This function takes two arguments – the last word that was entered before the user hit the tab key as well as the entire line that has been entered into the prompt. Inside this function, we want to parse the entire line in order to extract the last “block” (ie the last piece of input not separated by a semicolon or a pipe):</p>
<div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:4318B029-7F5A-4155-A9CF-329C469B73B3:a6e697e7-27f0-4182-a26a-e7da4d0a3d5b" class="wlWriterEditableSmartContent">

<div class="wp_syntax"><div class="code"><pre class="powershell" style="font-family:monospace;"><span style="color: #0000FF;">function</span> TabExpansion<span style="color: #000000;">&#40;</span><span style="color: #800080;">$line</span><span style="color: pink;">,</span> <span style="color: #800080;">$lastWord</span><span style="color: #000000;">&#41;</span> <span style="color: #000000;">&#123;</span>
  <span style="color: #800080;">$LineBlocks</span> <span style="color: pink;">=</span> <span style="color: #000000;">&#91;</span><span style="color: #008080;">regex</span><span style="color: #000000;">&#93;</span>::Split<span style="color: #000000;">&#40;</span><span style="color: #800080;">$line</span><span style="color: pink;">,</span> <span style="color: #800000;">'[|;]'</span><span style="color: #000000;">&#41;</span>
  <span style="color: #800080;">$lastBlock</span> <span style="color: pink;">=</span> <span style="color: #800080;">$LineBlocks</span><span style="color: #000000;">&#91;</span><span style="color: pink;">-</span><span style="color: #000000;">1</span><span style="color: #000000;">&#93;</span> 
<span style="color: #000000;">&#125;</span></pre></div></div>

</div>
<p>Next, we can use a regular expression to see whether the block begins with “git “. If so, then we’ll hand the input off to a function called “gitTabExpansion”:</p>
<div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:4318B029-7F5A-4155-A9CF-329C469B73B3:a11b36de-cfe9-4e47-a4c8-d0d871d1a729" class="wlWriterEditableSmartContent">

<div class="wp_syntax"><div class="code"><pre class="powershell" style="font-family:monospace;"><span style="color: #0000FF;">function</span> TabExpansion<span style="color: #000000;">&#40;</span><span style="color: #800080;">$line</span><span style="color: pink;">,</span> <span style="color: #800080;">$lastWord</span><span style="color: #000000;">&#41;</span> <span style="color: #000000;">&#123;</span>
  <span style="color: #800080;">$LineBlocks</span> <span style="color: pink;">=</span> <span style="color: #000000;">&#91;</span><span style="color: #008080;">regex</span><span style="color: #000000;">&#93;</span>::Split<span style="color: #000000;">&#40;</span><span style="color: #800080;">$line</span><span style="color: pink;">,</span> <span style="color: #800000;">'[|;]'</span><span style="color: #000000;">&#41;</span>
  <span style="color: #800080;">$lastBlock</span> <span style="color: pink;">=</span> <span style="color: #800080;">$LineBlocks</span><span style="color: #000000;">&#91;</span><span style="color: pink;">-</span><span style="color: #000000;">1</span><span style="color: #000000;">&#93;</span> 
&nbsp;
  <span style="color: #0000FF;">switch</span> <span style="color: #FF0000;">-regex</span> <span style="color: #000000;">&#40;</span><span style="color: #800080;">$lastBlock</span><span style="color: #000000;">&#41;</span> <span style="color: #000000;">&#123;</span>
    <span style="color: #800000;">'git (.*)'</span> <span style="color: #000000;">&#123;</span> gitTabExpansion<span style="color: #000000;">&#40;</span><span style="color: #800080;">$lastBlock</span><span style="color: #000000;">&#41;</span> <span style="color: #000000;">&#125;</span>
  <span style="color: #000000;">&#125;</span>
<span style="color: #000000;">&#125;</span></pre></div></div>

</div>
<p>The gitTabExpansion again uses regular expressions to identify what the user has entered and acts appropriately:</p>
<div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:4318B029-7F5A-4155-A9CF-329C469B73B3:fd3b117b-e058-432f-a1db-5ca3a836626a" class="wlWriterEditableSmartContent">

<div class="wp_syntax"><div class="code"><pre class="powershell" style="font-family:monospace;"><span style="color: #0000FF;">function</span> gitTabExpansion<span style="color: #000000;">&#40;</span><span style="color: #800080;">$lastBlock</span><span style="color: #000000;">&#41;</span> <span style="color: #000000;">&#123;</span>
     <span style="color: #0000FF;">switch</span> <span style="color: #FF0000;">-regex</span> <span style="color: #000000;">&#40;</span><span style="color: #800080;">$lastBlock</span><span style="color: #000000;">&#41;</span> <span style="color: #000000;">&#123;</span>
&nbsp;
        <span style="color: #008000;">#Handles git branch -x -y -z &lt;branch name&gt;</span>
        <span style="color: #800000;">'git branch -(d|D) (\S*)$'</span> <span style="color: #000000;">&#123;</span>
          gitLocalBranches<span style="color: #000000;">&#40;</span><span style="color: #800080;">$matches</span><span style="color: #000000;">&#91;</span><span style="color: #000000;">2</span><span style="color: #000000;">&#93;</span><span style="color: #000000;">&#41;</span>
        <span style="color: #000000;">&#125;</span>
&nbsp;
        <span style="color: #008000;">#handles git checkout &lt;branch name&gt;</span>
        <span style="color: #008000;">#handles git merge &lt;brancj name&gt;</span>
        <span style="color: #800000;">'git (checkout|merge) (\S*)$'</span> <span style="color: #000000;">&#123;</span>
          gitLocalBranches<span style="color: #000000;">&#40;</span><span style="color: #800080;">$matches</span><span style="color: #000000;">&#91;</span><span style="color: #000000;">2</span><span style="color: #000000;">&#93;</span><span style="color: #000000;">&#41;</span>
        <span style="color: #000000;">&#125;</span>
&nbsp;
        <span style="color: #008000;">#handles git &lt;cmd&gt;</span>
        <span style="color: #008000;">#handles git help &lt;cmd&gt;</span>
        <span style="color: #800000;">'git (help )?(\S*)$'</span> <span style="color: #000000;">&#123;</span>      
          gitCommands<span style="color: #000000;">&#40;</span><span style="color: #800080;">$matches</span><span style="color: #000000;">&#91;</span><span style="color: #000000;">2</span><span style="color: #000000;">&#93;</span><span style="color: #000000;">&#41;</span>
        <span style="color: #000000;">&#125;</span>
&nbsp;
        <span style="color: #008000;">#handles git push remote &lt;branch&gt;</span>
        <span style="color: #008000;">#handles git pull remote &lt;branch&gt;</span>
        <span style="color: #800000;">'git (push|pull) (\S+) (\S*)$'</span> <span style="color: #000000;">&#123;</span>
          gitLocalBranches<span style="color: #000000;">&#40;</span><span style="color: #800080;">$matches</span><span style="color: #000000;">&#91;</span><span style="color: #000000;">3</span><span style="color: #000000;">&#93;</span><span style="color: #000000;">&#41;</span>
        <span style="color: #000000;">&#125;</span>
&nbsp;
        <span style="color: #008000;">#handles git pull &lt;remote&gt;</span>
        <span style="color: #008000;">#handles git push &lt;remote&gt;</span>
        <span style="color: #800000;">'git (push|pull) (\S*)$'</span> <span style="color: #000000;">&#123;</span>
          gitRemotes<span style="color: #000000;">&#40;</span><span style="color: #800080;">$matches</span><span style="color: #000000;">&#91;</span><span style="color: #000000;">2</span><span style="color: #000000;">&#93;</span><span style="color: #000000;">&#41;</span>
        <span style="color: #000000;">&#125;</span>
    <span style="color: #000000;">&#125;</span>	
<span style="color: #000000;">&#125;</span></pre></div></div>

</div>
<p>Hopefully the comments are pretty self explanatory. The gitLocalBranches, gitCommands and gitRemotes functions invoke the appropriate git command and parse the output:</p>
<div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:4318B029-7F5A-4155-A9CF-329C469B73B3:116dea06-fe5e-4c8b-8703-680ee61f5bfe" class="wlWriterEditableSmartContent">

<div class="wp_syntax"><div class="code"><pre class="powershell" style="font-family:monospace;"><span style="color: #0000FF;">function</span> gitCommands<span style="color: #000000;">&#40;</span><span style="color: #800080;">$filter</span><span style="color: #000000;">&#41;</span> <span style="color: #000000;">&#123;</span>
  <span style="color: #800080;">$cmdList</span> <span style="color: pink;">=</span> <span style="color: pink;">@</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>
  <span style="color: #800080;">$output</span> <span style="color: pink;">=</span> git help
  <span style="color: #0000FF;">foreach</span><span style="color: #000000;">&#40;</span><span style="color: #800080;">$line</span> <span style="color: #0000FF;">in</span> <span style="color: #800080;">$output</span><span style="color: #000000;">&#41;</span> <span style="color: #000000;">&#123;</span>
    <span style="color: #0000FF;">if</span><span style="color: #000000;">&#40;</span><span style="color: #800080;">$line</span> <span style="color: #FF0000;">-match</span> <span style="color: #800000;">'^   (\S+) (.*)'</span><span style="color: #000000;">&#41;</span> <span style="color: #000000;">&#123;</span>
      <span style="color: #800080;">$cmd</span> <span style="color: pink;">=</span> <span style="color: #800080;">$matches</span><span style="color: #000000;">&#91;</span><span style="color: #000000;">1</span><span style="color: #000000;">&#93;</span>
      <span style="color: #0000FF;">if</span><span style="color: #000000;">&#40;</span><span style="color: #800080;">$filter</span> <span style="color: #FF0000;">-and</span> <span style="color: #800080;">$cmd</span>.StartsWith<span style="color: #000000;">&#40;</span><span style="color: #800080;">$filter</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span> <span style="color: #000000;">&#123;</span>
        <span style="color: #800080;">$cmdList</span> <span style="color: pink;">+=</span> <span style="color: #800080;">$cmd</span>.Trim<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>
      <span style="color: #000000;">&#125;</span>
      <span style="color: #0000FF;">elseif</span><span style="color: #000000;">&#40;</span><span style="color: #FF0000;">-not</span> <span style="color: #800080;">$filter</span><span style="color: #000000;">&#41;</span> <span style="color: #000000;">&#123;</span>
        <span style="color: #800080;">$cmdList</span> <span style="color: pink;">+=</span> <span style="color: #800080;">$cmd</span>.Trim<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>
      <span style="color: #000000;">&#125;</span>
    <span style="color: #000000;">&#125;</span>
  <span style="color: #000000;">&#125;</span>
&nbsp;
  <span style="color: #800080;">$cmdList</span> <span style="color: pink;">|</span> <span style="color: #008080; font-weight: bold;">sort</span>
 <span style="color: #000000;">&#125;</span>
&nbsp;
<span style="color: #0000FF;">function</span> gitRemotes<span style="color: #000000;">&#40;</span><span style="color: #800080;">$filter</span><span style="color: #000000;">&#41;</span> <span style="color: #000000;">&#123;</span>
  <span style="color: #0000FF;">if</span><span style="color: #000000;">&#40;</span><span style="color: #800080;">$filter</span><span style="color: #000000;">&#41;</span> <span style="color: #000000;">&#123;</span>
    git remote <span style="color: pink;">|</span> <span style="color: #0000FF;">where</span> <span style="color: #000000;">&#123;</span> <span style="color: #000080;">$_</span>.StartsWith<span style="color: #000000;">&#40;</span><span style="color: #800080;">$filter</span><span style="color: #000000;">&#41;</span> <span style="color: #000000;">&#125;</span>
  <span style="color: #000000;">&#125;</span>
  <span style="color: #0000FF;">else</span> <span style="color: #000000;">&#123;</span>
    git remote
  <span style="color: #000000;">&#125;</span>
<span style="color: #000000;">&#125;</span>
&nbsp;
<span style="color: #0000FF;">function</span> gitLocalBranches<span style="color: #000000;">&#40;</span><span style="color: #800080;">$filter</span><span style="color: #000000;">&#41;</span> <span style="color: #000000;">&#123;</span>
   git branch <span style="color: pink;">|</span> <span style="color: #0000FF;">foreach</span> <span style="color: #000000;">&#123;</span> 
      <span style="color: #0000FF;">if</span><span style="color: #000000;">&#40;</span><span style="color: #000080;">$_</span> <span style="color: #FF0000;">-match</span> <span style="color: #800000;">&quot;^\*?\s*(.*)&quot;</span><span style="color: #000000;">&#41;</span> <span style="color: #000000;">&#123;</span> 
        <span style="color: #0000FF;">if</span><span style="color: #000000;">&#40;</span><span style="color: #800080;">$filter</span> <span style="color: #FF0000;">-and</span> <span style="color: #800080;">$matches</span><span style="color: #000000;">&#91;</span><span style="color: #000000;">1</span><span style="color: #000000;">&#93;</span>.StartsWith<span style="color: #000000;">&#40;</span><span style="color: #800080;">$filter</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span> <span style="color: #000000;">&#123;</span>
          <span style="color: #800080;">$matches</span><span style="color: #000000;">&#91;</span><span style="color: #000000;">1</span><span style="color: #000000;">&#93;</span>
        <span style="color: #000000;">&#125;</span>
        <span style="color: #0000FF;">elseif</span><span style="color: #000000;">&#40;</span><span style="color: #FF0000;">-not</span> <span style="color: #800080;">$filter</span><span style="color: #000000;">&#41;</span> <span style="color: #000000;">&#123;</span>
          <span style="color: #800080;">$matches</span><span style="color: #000000;">&#91;</span><span style="color: #000000;">1</span><span style="color: #000000;">&#93;</span>
        <span style="color: #000000;">&#125;</span>
      <span style="color: #000000;">&#125;</span> 
   <span style="color: #000000;">&#125;</span>
<span style="color: #000000;">&#125;</span></pre></div></div>

</div>
<p>At the moment the functionality is quite limited but already I find this extremely useful when working with git repositories – it has already saved me countless keystrokes throughout the day.</p>
<p>I have also created similar functionality for Mercurial repositories which <a href="http://www.jeremyskinner.co.uk/2010/04/21/using-mercurial-with-windows-powershell/">I’ve posted about here</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jeremyskinner.co.uk/2010/03/07/using-git-with-windows-powershell/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>A better command prompt: PowerShell, PowerTab and Console</title>
		<link>http://www.jeremyskinner.co.uk/2009/08/23/a-better-command-prompt/</link>
		<comments>http://www.jeremyskinner.co.uk/2009/08/23/a-better-command-prompt/#comments</comments>
		<pubDate>Sun, 23 Aug 2009 15:48:55 +0000</pubDate>
		<dc:creator>Jeremy Skinner</dc:creator>
				<category><![CDATA[PowerShell]]></category>

		<guid isPermaLink="false">http://www.jeremyskinner.co.uk/?p=181</guid>
		<description><![CDATA[Now that I&#8217;ve started using git, I&#8217;ve found myself using the command line a lot more for every-day tasks. My command shell of choice is Windows PowerShell, which is a lot more powerful than the antiquated cmd.exe. There are two tools that I&#8217;ve found make PowerShell significantly easier to use. The first is PowerTab which [...]]]></description>
			<content:encoded><![CDATA[<p>
Now that I&#8217;ve started using <a href="http://git-scm.com/">git</a>, I&#8217;ve found myself using the command line a lot more for every-day tasks. My command shell of choice is <a href="http://www.microsoft.com/windowsserver2003/technologies/management/powershell/default.mspx">Windows PowerShell</a>, which is a lot more powerful than the antiquated cmd.exe.
</p>
<p>
There are two tools that I&#8217;ve found make PowerShell significantly easier to use. The first is <a href="http://thepowershellguy.com/blogs/posh/pages/powertab.aspx">PowerTab</a> which provides IntelliSense-like autocompletion for directory paths, PowerShell commands and .NET types.
</p>
<p><img src="http://www.jeremyskinner.co.uk/wp-content/uploads/2009/08/powertab.JPG" alt="powertab" title="powertab" width="524" height="319" class="alignnone size-full wp-image-187" /></p>
<p>
The second tool that I use is <a href="http://sourceforge.net/projects/console/">Console</a> which is an application that can host a variety of shells including cmd.exe, bash and PowerShell.
</p>
<p><a href="http://www.jeremyskinner.co.uk/wp-content/uploads/2009/08/Console.jpg"><br />
<img src="http://www.jeremyskinner.co.uk/wp-content/uploads/2009/08/Console.jpg" alt="Console" title="Console" width="550" height="389" class="alignnone size-full wp-image-188" /><br />
</a></p>
<p>
My two favourite features of Console are its improved copy/paste support and the ability to have tabbed shells.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jeremyskinner.co.uk/2009/08/23/a-better-command-prompt/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>
