Not really the last vsvars32 you will ever need...but close

I took Peter avise and for a while I've been using Chris's vsvars32, however it had some drawbacks,

1. It did not work from a 64bit PowerShell

2. For some reason Get-Batchfile did not work for me, I had to modify to call "echo" explicitly.

I also added a helper VsInstallDir and a alias for devenv.

 Enjoy,

 Oscar

function global:VsInstallDir($version="10.0")

{

$VSKey = $null

  if (test-path HKLM:SOFTWARE\Wow6432Node\Microsoft\VisualStudio\$version)

  {

    $VSKey = get-itemproperty HKLM:SOFTWARE\Wow6432Node\Microsoft\VisualStudio\$version

  }

  else

  {

    if (test-path HKLM:SOFTWARE\Microsoft\VisualStudio\$version)

    {

        $VSKey = get-itemproperty HKLM:SOFTWARE\Microsoft\VisualStudio\$version

    }

  }

  if ($VSKey -eq $null)

  {

      throw "Visual Studio not installed"

  }

  [System.IO.Path]::GetDirectoryName($VsKey.InstallDir)

}

function Get-Batchfile ($file) {

    $cmd = "echo off & `"$file`" & set"

    cmd /c $cmd | Foreach-Object {

        $p, $v = $_.split('=')

        Set-Item -path env:$p -value $v

    }

}

function global:VsVars32($version="10.0")

{

  $VsInstallPath = VsInstallDir($version)

  $VsToolsDir = [System.IO.Path]::GetDirectoryName($VsInstallPath)

  $VsToolsDir = [System.IO.Path]::Combine($VsToolsDir, "Tools")

  $BatchFile = [System.IO.Path]::Combine($VsToolsDir, "vsvars32.bat")

  Get-Batchfile $BatchFile

  [System.Console]::Title = "Visual Studio shell"

}

set-alias devenv ((VsInstallDir)+"\devenv.exe") -scope global