# encoding: ascii
# api: powershell
# title: Invoke-V2Script
# description: Function may be useful for people who want to play with CTP1 for PowerShell 3 but need to use v2 scripts (and prefer ISE over PowerShell.exe)
# version: 0.1
# type: function
# author: BartekB
# license: CC0
# function: Invoke-V2Script
# x-poshcode-id: 2963
# x-archived: 2012-01-14T07:03:15
# x-published: 2012-09-23T06:31:00
#
#
# Function may be useful for people who want to play with CTP1 for PowerShell 3 but need to use v2 scripts.
function Invoke-V2Script {
<#
.Synopsis
Will run script currently edited in ISE using powershell V2.
.Description
Will run script currently edited ISE. If it's not saved - it will automatically save it.
Difference between this command and F5 is that script will be launched using powershell V2.
.Example
Invoke-Script
Will run a script/ scriptblock using currently opened file.
#>
[CmdletBinding()]
param ()
if ($file = $psISE.CurrentFile) {
if (Test-Path $file.FullPath) {
Write-Verbose 'File exists...'
if (-not $File.IsSaved) {
$file.Save()
}
} else {
Write-Verbose 'Save a file as random .ps1 and run'
$NewName = Join-Path ([io.path]::GetTempPath()) ([io.path]::GetRandomFileName() + '.ps1')
$file.SaveAs($NewName)
$FullName = (Get-Item $NewName).FullName
powershell -Version 2 -NoProfile -File $FullName
return
}
if ((Get-Item $file.FullPath).extension -eq '.ps1') {
Write-Verbose 'Normal script, need to run it!'
powershell -Version 2 -NoProfile -File $file.FullPath
}
} else {
throw 'No file opened in current tab or tried to use it outside PowerShell ISE!'
}
}
try {
$psISE.CurrentPowerShellTab.AddOnsMenu.Submenus.Add('Invoke V2 Script', { Invoke-V2Script }, 'CTRL + F5')
} catch {
Write-Warning 'Could not add shortcut. Adding menu item without it...'
$psISE.CurrentPowerShellTab.AddOnsMenu.Submenus.Add('Invoke V2 Script', { Invoke-V2Script }, $null)
}