-
Notifications
You must be signed in to change notification settings - Fork 0
/
EasyRun.psm1
87 lines (83 loc) · 1.89 KB
/
EasyRun.psm1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
function Get-ScriptPath {
if ($env:EasyRunExcludePath) {
$exculdePattern = @($env:EasyRunExcludePath -split ';')
}
$paths = ($env:Path -split ';' | Sort-Object -Unique).Where({
if (-not $_ -or -not $_.StartsWith($HOME)) {
return $false
}
foreach ($p in $exculdePattern) {
if ($_ -and $_ -like $p) {
return $false
}
}
Test-Path $_ -PathType Container
})
if ($PWD -notin $paths) {
$paths += $PWD.Path
}
return $paths
}
function Get-ScriptTargets([string]$prefix) {
$scripts = @{}
foreach ($path in Get-ScriptPath) {
foreach ($f in (Get-ChildItem "$path/$prefix*.py", "$path/$prefix*.pl", "$path/$prefix*.js")) {
$scripts[$f.Name] += @($f.FullName)
}
}
$targets = @()
foreach ($t in $scripts.Keys) {
$targets += $scripts[$t].Count -eq 1 ? $t : $scripts[$t]
}
return $targets
}
function Get-ScriptFile([string]$target) {
if ($target -match '\\' -or $target -match '/') {
return @($target)
}
$files = @()
foreach ($path in Get-ScriptPath) {
if (Test-Path -Path "$path/$target") {
$files += "$path/$target"
}
}
return $files
}
function Invoke-PScript {
param(
[ArgumentCompleter(
{
param (
$commandName,
$parameterName,
$wordToComplete,
$commandAst,
$fakeBoundParameters
)
Get-ScriptTargets $wordToComplete
})] $target
)
if ($target.Length -le 0) {
throw "Usage: Invoke-PScript [script]"
}
$fs = @(Get-ScriptFile $target)
if ($fs.Count -gt 1) {
throw "Multi Scriptfile Found: $fs"
}
elseif ($fs.Count -lt 1) {
throw "No Script File Found: $target"
}
if ($fs[0] -like '*.py') {
$bin = $env:EasyRunPython ?? 'python.exe'
}
elseif ($fs -like '*.pl') {
$bin = $env:EasyRunPerl ?? 'perl.exe'
}
elseif ($fs -like '*.js') {
$bin = $env:EasyRunNode ?? 'node.exe'
}
else {
throw "Dont know how to execute script($target) for extension: $((Get-Item $fs[0]).Extension)"
}
& $bin $fs[0] @Args
}