~/src/www.mokhan.ca/xlgmokha [main]
cat powerfull-shell.md
powerfull-shell.md 7101 bytes | 2010-04-27 00:00
symlink: /opt/dotnet/powerfull-shell.md

Power(full) Shell

One of the coolest things about powershell is being able to customize the shell. Here’s what my shell looks like now.

When I’m working on a project using git, my prompt looks like this.

It now tells me what branch i am on. Whoa… All I had to do was drop a modified version of profile.ps1 into “c:\users\mo\documents\WindowsPowerShell”. If the “WindowsPowerShell” folder doesn’t exist, then create it. That’s what I did. This is also using posh-git. If you checkout the source you’ll find an example of the profile.ps1 that you can use.

Leveraging this file you can load other scripts every time you pop open a powershell. Like if you wanted to load a sweet twitter script. Here’s my current script…

    Import-Module d:/scripts/posh-git/posh-git
    d:\scripts\twitter-on-powershell\twitter-on-powershell.ps1
    d:\scripts\vsvars2010.ps1
    function prompt {
        $user_location = $env:username + '@' +
    [System.Environment]::MachineName + ' /' + ([string]$pwd).replace('\',
    '/').replace(':', '').tolower() + ' ~'
        $host.UI.RawUi.WindowTitle = $pwd
        Write-Host($user_location) -foregroundcolor green
        # Git Prompt
        $Global:GitStatus = Get-GitStatus
        Write-GitStatus $GitStatus
        return "> "
    }
    if(-not (Test-Path Function:\DefaultTabExpansion)) {
        Rename-Item Function:\TabExpansion DefaultTabExpansion
    }
    function TabExpansion($line, $lastWord) {
        $lastBlock = [regex]::Split($line, '[|;]')[-1]
        switch -regex ($lastBlock) {
            # Execute git tab completion for all git-related commands
            'git (.*)' { GitTabExpansion $lastBlock }
            # Fall back on existing tab expansion
            default { DefaultTabExpansion $line $lastWord }
        }
    }
    Enable-GitColors


The cool part is that everything you write in a powershell console can be dropped right in to a .ps1 file and run as a script. I’m actively learning…