Daniel Little Coding Blog
Daniel Little Coding Blog

A blog about .net development and the web.

Daniel Little
Author

Daniel Little (lavinski) is a Brisbane based software developer.

Share


Our Newsletter


Like this blog? Get each new post as soon it's posted.

Tags


Twitter


My PowerShell Profile

Daniel LittleDaniel Little

This is my PowerShell profile, it does a few nice things such as add open and edit commands to the shell. Most importantly though it customizes my prompt to shorten it while still showing how deep I am in the directory hierarchy. I've also set up poshgit as well as a few other helpers and functions.

function Open($path) {
    explorer $path
}

function Edit {

    [CmdletBinding()]
    Param(

        [Parameter(Mandatory = $False, ValueFromPipeline = $True, ValueFromRemainingArguments = $True, Position = 0)] 
        $File
    )

    Process {
        $app = "C:\Program Files (x86)\Notepad++\notepad++.exe"

        if ($File -ne $null) {
            $parameters = '"' + $File + '"'

            $options = New-Object "System.Diagnostics.ProcessStartInfo"
            $options.FileName = $app
            $options.Arguments = $parameters
            $options.WorkingDirectory = $pwd

            $temp = [Diagnostics.Process]::Start($options).WaitForInputIdle(500)
        }
        Invoke-Item $app
    }
}

# This was already here
function elevate-process
{
    $file, [string]$arguments = $args;
    $psi = new-object System.Diagnostics.ProcessStartInfo $file;
    $psi.Arguments = $arguments;
    $psi.Verb = "runas";

    $psi.WorkingDirectory = get-location;
    [System.Diagnostics.Process]::Start($psi);
}
set-alias sudo elevate-process;


# WebGet
function get-html([string]$url)
{
    $webClient = (New-Object System.Net.WebClient);
    $webClient.DownloadString($url);
}

function shorten-path([string] $path) { 
   $loc = $path.Replace($HOME, '~') 
   # remove prefix for UNC paths
   $loc = $loc -replace '^[^:]+::', ''
   # make path shorter like tabs in Vim,
   # handle paths starting with \\ and . correctly
   return ($loc -replace '\\(\.?)([^\\])[^\\]*(?=\\)','\$1$2') 
}

function prompt { 
    # our theme
    $cdelim = [ConsoleColor]::DarkCyan 
    $chost = [ConsoleColor]::Green 
    $cloc = [ConsoleColor]::Cyan 
    $default = [ConsoleColor]::White 

    # Reset color, which can be messed up by Enable-GitColors
    $Host.UI.RawUI.ForegroundColor = $default

    write-host (shorten-path (pwd).Path) "" -n -f $cloc
    Write-VcsStatus
    return '> '
}

# gci . *.cs -Recurse | select-string . | Group Filename | Measure-Object Count -Min -Max -Average
function CountLines($directory)
{
    $pattern = "*.cs"
    $directories = [System.IO.Directory]::GetDirectories($directory)
    $files = [System.IO.Directory]::GetFiles($directory, $pattern)

    $lineCount = 0

    foreach($file in $files) {
        $lineCount += [System.IO.File]::ReadAllText($file).Split("`n").Count
    }

    foreach($subdirectory in $directories) {
        $lineCount += CountLines $subdirectory
    }

    $lineCount
}

$msbuildPath = "C:\Windows\Microsoft.NET\Framework\v4.0.30319\"
$gitPath = (Get-Item "Env:LocalAppData").Value + "\GitHub\PortableGit_93e8418133eb85e81a81e5e19c272776524496c6\cmd\"

$env:path += ";$gitPath;$msbuildPath;"


function Enable-Git {
    . 'C:\Users\me\Documents\WindowsPowerShell\Modules\posh-git\profile.example.ps1'
}

#Write-Host "For git use 'Enable-Git'"

function Load-Profile
{
    . $Profile
}

function Edit-Profile
{
    edit "C:\Users\me\Documents\WindowsPowerShell\Profile.ps1"
}

function Git-Log([switch]$OneLine, $Length)
{
    $Length = 1000;

    if ($OneLine) {
        git log --pretty=oneline -n $Length
    } else {
        git log -n $Length
    }   
}
Daniel Little
Author

Daniel Little

Daniel Little (lavinski) is a Brisbane based software developer.

Comments