10
10
[switch ] $x64 = $false ,
11
11
[switch ] $svr50 = $false ,
12
12
[switch ] $svrc50 = $false ,
13
+ [alias (" a" )]
14
+ [string ] $alias = $null ,
13
15
[parameter (Position = 1 , ValueFromRemainingArguments = $true )]
14
16
[string []]$args = @ ()
15
17
)
@@ -18,12 +20,18 @@ $userKrePath = $env:USERPROFILE + "\.kre"
18
20
$userKrePackages = $userKrePath + " \packages"
19
21
$globalKrePath = $env: ProgramFiles + " \KRE"
20
22
$globalKrePackages = $globalKrePath + " \packages"
23
+ $feed = $env: KRE_NUGET_API_URL
24
+
25
+ if (! $feed )
26
+ {
27
+ $feed = " https://www.myget.org/F/aspnetvnext/api/v2" ;
28
+ }
21
29
22
30
$scriptPath = $myInvocation.MyCommand.Definition
23
31
24
32
function Kvm-Help {
25
33
@"
26
- K Runtime Environment Version Manager - Build 538
34
+ K Runtime Environment Version Manager - Build 10002
27
35
28
36
USAGE: kvm <command> [options]
29
37
@@ -35,29 +43,34 @@ kvm upgrade [-x86][-x64] [-svr50][-svrc50] [-g|-global] [-proxy <ADDRESS>]
35
43
-f|-force upgrade even if latest is already installed
36
44
-proxy <ADDRESS> use given address as proxy when accessing remote server
37
45
38
- kvm install <semver>|<alias>|<nupkg> [-x86][-x64] [-svr50][-svrc50] [-g|-global]
39
- install requested KRE from feed
46
+ kvm install <semver>|<alias>|<nupkg>|latest [-x86][-x64] [-svr50][-svrc50] [-a|-alias <alias>] [-g|-global] [-f|-force]
47
+ <semver>|<alias> install requested KRE from feed
48
+ <nupkg> install requested KRE from package on local filesystem
49
+ latest install latest KRE from feed
40
50
add KRE bin to path of current command line
51
+ -p|-persistent add KRE bin to PATH environment variables persistently
52
+ -a|-alias <alias> set alias <alias> for requested KRE on install
41
53
-g|-global install to machine-wide location
42
54
-f|-force install even if specified version is already installed
43
55
44
56
kvm use <semver>|<alias>|none [-x86][-x64] [-svr50][-svrc50] [-p|-persistent] [-g|-global]
45
- <semver>|<alias> add KRE bin to path of current command line
57
+ <semver>|<alias> add KRE bin to path of current command line
46
58
none remove KRE bin from path of current command line
47
59
-p|-persistent add KRE bin to PATH environment variables persistently
48
60
-g|-global combined with -p to change machine PATH instead of user PATH
49
61
50
62
kvm list
51
- list KRE versions installed
63
+ list KRE versions installed
52
64
53
65
kvm alias
54
66
list KRE aliases which have been defined
55
67
56
68
kvm alias <alias>
57
69
display value of named alias
58
70
59
- kvm alias <alias> <semver> [-x86][-x64] [-svr50][-svrc50]
60
- set alias to specific version
71
+ kvm alias <alias> <semver>|<alias> [-x86][-x64] [-svr50][-svrc50]
72
+ <alias> The name of the alias to set
73
+ <semver>|<alias> The KRE version to set the alias to. Alternatively use the version of the specified alias
61
74
62
75
"@ | Write-Host
63
76
}
@@ -109,21 +122,19 @@ function Kvm-Global-Setup {
109
122
110
123
function Kvm-Global-Upgrade {
111
124
$persistent = $true
125
+ $alias = " default"
112
126
If (Needs- Elevation) {
113
127
$arguments = " & '$scriptPath ' upgrade -global $ ( Requested- Switches) "
114
128
Start-Process " $psHome \powershell.exe" - Verb runAs - ArgumentList $arguments - Wait
115
129
break
116
130
}
117
- $version = Kvm- Find-Latest (Requested- Platform " svr50" ) (Requested- Architecture " x86" )
118
- Kvm- Global- Install $version
119
- Kvm- Alias- Set " default" $version
131
+ Kvm- Global- Install " latest"
120
132
}
121
133
122
134
function Kvm-Upgrade {
123
135
$persistent = $true
124
- $version = Kvm- Find-Latest (Requested- Platform " svr50" ) (Requested- Architecture " x86" )
125
- Kvm- Install $version
126
- Kvm- Alias- Set " default" $version
136
+ $alias = " default"
137
+ Kvm- Install " latest"
127
138
}
128
139
129
140
function Add-Proxy-If-Specified {
@@ -152,30 +163,26 @@ param(
152
163
)
153
164
Write-Host " Determining latest version"
154
165
155
- $url = " https://www.myget.org/F/aspnetvnext/api/v2 /GetUpdates()?packageIds=%27KRE-$platform -$architecture %27&versions=%270.0%27&includePrerelease=true&includeAllVersions=false"
166
+ $url = " $feed /GetUpdates()?packageIds=%27KRE-$platform -$architecture %27&versions=%270.0%27&includePrerelease=true&includeAllVersions=false"
156
167
157
168
$wc = New-Object System.Net.WebClient
158
169
$wc.Credentials = new-object System.Net.NetworkCredential(" aspnetreadonly" , " 4d8a2d9c-7b80-4162-9978-47e918c9658c" )
159
170
Add-Proxy - If- Specified($wc )
160
171
[xml ]$xml = $wc.DownloadString ($url )
161
172
162
- $version = Select-Xml " //d:Version" - Namespace @ {d = ' http://schemas.microsoft.com/ado/2007/08/dataservices' } $xml
173
+ $version = Select-Xml " //d:Version" - Namespace @ {d = ' http://schemas.microsoft.com/ado/2007/08/dataservices' } $xml
163
174
164
175
return $version
165
176
}
166
177
167
- function Kvm-Install-Latest {
168
- Kvm- Install (Kvm- Find-Latest (Requested- Platform " svr50" ) (Requested- Architecture " x86" ))
169
- }
170
-
171
178
function Do-Kvm-Download {
172
179
param (
173
180
[string ] $kreFullName ,
174
181
[string ] $packagesFolder
175
182
)
176
183
$parts = $kreFullName.Split (" ." , 2 )
177
184
178
- $url = " https://www.myget.org/F/aspnetvnext/api/v2 /package/" + $parts [0 ] + " /" + $parts [1 ]
185
+ $url = " $feed /package/" + $parts [0 ] + " /" + $parts [1 ]
179
186
$kreFolder = Join-Path $packagesFolder $kreFullName
180
187
$kreFile = Join-Path $kreFolder " $kreFullName .nupkg"
181
188
@@ -189,13 +196,13 @@ param(
189
196
}
190
197
}
191
198
192
- Write-Host " Downloading" $kreFullName " from https://www.myget.org/F/aspnetvnext/api/v2/ "
199
+ Write-Host " Downloading" $kreFullName " from $feed "
193
200
194
201
# Downloading to temp location
195
202
$kreTempDownload = Join-Path $packagesFolder " temp"
196
203
$tempKreFile = Join-Path $kreTempDownload " $kreFullName .nupkg"
197
204
198
- if (Test-Path $kreTempDownload ) {
205
+ if (Test-Path $kreTempDownload ) {
199
206
del " $kreTempDownload \*" - recurse
200
207
} else {
201
208
md $kreTempDownload - Force | Out-Null
@@ -208,7 +215,7 @@ param(
208
215
209
216
Do - Kvm- Unpack $tempKreFile $kreTempDownload
210
217
211
- md $kreFolder - Force | Out-Null
218
+ md $kreFolder - Force | Out-Null
212
219
Write-Host " Installing to $kreFolder "
213
220
mv " $kreTempDownload \*" $kreFolder
214
221
}
@@ -233,7 +240,7 @@ param(
233
240
# make it a nupkg again
234
241
Rename-Item $kreZip $kreFile
235
242
}
236
-
243
+
237
244
If (Test-Path ($kreFolder + " \[Content_Types].xml" )) {
238
245
Remove-Item ($kreFolder + " \[Content_Types].xml" )
239
246
}
@@ -256,10 +263,17 @@ param(
256
263
break
257
264
}
258
265
266
+ if ($versionOrAlias -eq " latest" ) {
267
+ $versionOrAlias = Kvm- Find-Latest (Requested- Platform " svr50" ) (Requested- Architecture " x86" )
268
+ }
269
+
259
270
$kreFullName = Requested- VersionOrAlias $versionOrAlias
260
271
261
272
Do - Kvm- Download $kreFullName $globalKrePackages
262
273
Kvm- Use $versionOrAlias
274
+ if (! [string ]::IsNullOrWhiteSpace($alias )) {
275
+ Kvm- Alias- Set $alias $versionOrAlias
276
+ }
263
277
}
264
278
265
279
function Kvm-Install {
@@ -276,36 +290,44 @@ param(
276
290
del $kreFolder - Recurse - Force
277
291
$folderExists = $false ;
278
292
}
279
-
293
+
280
294
if ($folderExists ) {
281
295
Write-Host " Target folder '$kreFolder ' already exists"
282
296
} else {
283
297
$tempUnpackFolder = Join-Path $userKrePackages " temp"
284
298
$tempKreFile = Join-Path $tempUnpackFolder " $kreFullName .nupkg"
285
-
286
- if (Test-Path $tempUnpackFolder ) {
299
+
300
+ if (Test-Path $tempUnpackFolder ) {
287
301
del " $tempUnpackFolder \*" - recurse
288
302
} else {
289
303
md $tempUnpackFolder - Force | Out-Null
290
304
}
291
305
copy $versionOrAlias $tempKreFile
292
-
306
+
293
307
Do - Kvm- Unpack $tempKreFile $tempUnpackFolder
294
308
md $kreFolder - Force | Out-Null
295
309
Write-Host " Installing to $kreFolder "
296
310
mv " $tempUnpackFolder \*" $kreFolder
297
311
}
298
312
299
- $kreBin = " $kreFolder \bin"
300
- Write-Host " Adding" $kreBin " to process PATH"
301
- Set-Path (Change- Path $env: Path $kreBin ($globalKrePackages , $userKrePackages ))
302
- }
303
- else
304
- {
305
- $kreFullName = Requested- VersionOrAlias $versionOrAlias
313
+ $packageVersion = Package- Version $kreFullName
314
+ Kvm- Use $packageVersion
315
+ if (! [string ]::IsNullOrWhiteSpace($alias )) {
316
+ Kvm- Alias- Set $alias $packageVersion
317
+ }
318
+ }
319
+ else
320
+ {
321
+ if ($versionOrAlias -eq " latest" ) {
322
+ $versionOrAlias = Kvm- Find-Latest (Requested- Platform " svr50" ) (Requested- Architecture " x86" )
323
+ }
324
+ $kreFullName = Requested- VersionOrAlias $versionOrAlias
306
325
307
326
Do - Kvm- Download $kreFullName $userKrePackages
308
327
Kvm- Use $versionOrAlias
328
+ if (! [string ]::IsNullOrWhiteSpace($alias )) {
329
+ Kvm- Alias- Set $alias $versionOrAlias
330
+ }
309
331
}
310
332
}
311
333
@@ -325,7 +347,7 @@ function Kvm-List {
325
347
}
326
348
327
349
filter List-Parts {
328
- $hasBin = Test-Path ($_.FullName + " \bin" )
350
+ $hasBin = Test-Path ($_.FullName + " \bin" )
329
351
if (! $hasBin ) {
330
352
return
331
353
}
@@ -363,7 +385,7 @@ param(
363
385
Write-Host " Removing KRE from process PATH"
364
386
Set-Path (Change- Path $env: Path " " ($globalKrePackages , $userKrePackages ))
365
387
366
- if ($persistent ) {
388
+ if ($persistent ) {
367
389
Write-Host " Removing KRE from machine PATH"
368
390
$machinePath = [Environment ]::GetEnvironmentVariable(" Path" , [System.EnvironmentVariableTarget ]::Machine)
369
391
$machinePath = Change- Path $machinePath " " ($globalKrePackages , $userKrePackages )
@@ -378,7 +400,7 @@ param(
378
400
if ($kreBin -eq $null ) {
379
401
Write-Host " Cannot find $kreFullName , do you need to run 'kvm install $versionOrAlias '?"
380
402
return
381
- }
403
+ }
382
404
383
405
Write-Host " Adding" $kreBin " to process PATH"
384
406
Set-Path (Change- Path $env: Path $kreBin ($globalKrePackages , $userKrePackages ))
@@ -399,7 +421,7 @@ param(
399
421
Write-Host " Removing KRE from process PATH"
400
422
Set-Path (Change- Path $env: Path " " ($globalKrePackages , $userKrePackages ))
401
423
402
- if ($persistent ) {
424
+ if ($persistent ) {
403
425
Write-Host " Removing KRE from user PATH"
404
426
$userPath = [Environment ]::GetEnvironmentVariable(" Path" , [System.EnvironmentVariableTarget ]::User)
405
427
$userPath = Change- Path $userPath " " ($globalKrePackages , $userKrePackages )
@@ -414,12 +436,12 @@ param(
414
436
if ($kreBin -eq $null ) {
415
437
Write-Host " Cannot find $kreFullName , do you need to run 'kvm install $versionOrAlias '?"
416
438
return
417
- }
439
+ }
418
440
419
441
Write-Host " Adding" $kreBin " to process PATH"
420
442
Set-Path (Change- Path $env: Path $kreBin ($globalKrePackages , $userKrePackages ))
421
443
422
- if ($persistent ) {
444
+ if ($persistent ) {
423
445
Write-Host " Adding $kreBin to user PATH"
424
446
$userPath = [Environment ]::GetEnvironmentVariable(" Path" , [System.EnvironmentVariableTarget ]::User)
425
447
$userPath = Change- Path $userPath $kreBin ($globalKrePackages , $userKrePackages )
@@ -438,15 +460,20 @@ param(
438
460
[string ] $name
439
461
)
440
462
md ($userKrePath + " \alias\" ) - Force | Out-Null
441
- Write-Host " Alias '$name ' is set to" (Get-Content ($userKrePath + " \alias\" + $name + " .txt" ))
463
+ $aliasFilePath = $userKrePath + " \alias\" + $name + " .txt"
464
+ if (! (Test-Path $aliasFilePath )) {
465
+ Write-Host " Alias '$name ' does not exist"
466
+ } else {
467
+ Write-Host " Alias '$name ' is set to" (Get-Content ($userKrePath + " \alias\" + $name + " .txt" ))
468
+ }
442
469
}
443
470
444
471
function Kvm-Alias-Set {
445
472
param (
446
473
[string ] $name ,
447
474
[string ] $value
448
475
)
449
- $kreFullName = " KRE- " + ( Requested- Platform " svr50 " ) + " - " + (Requested - Architecture " x86 " ) + " . " + $value
476
+ $kreFullName = Requested- VersionOrAlias $value
450
477
451
478
Write-Host " Setting alias '$name ' to '$kreFullName '"
452
479
md ($userKrePath + " \alias\" ) - Force | Out-Null
@@ -471,6 +498,13 @@ param(
471
498
return $null
472
499
}
473
500
501
+ function Package-Version () {
502
+ param (
503
+ [string ] $kreFullName
504
+ )
505
+ return $kreFullName -replace ' [^.]*.(.*)' , ' $1'
506
+ }
507
+
474
508
function Requested-VersionOrAlias () {
475
509
param (
476
510
[string ] $versionOrAlias
@@ -496,7 +530,7 @@ param(
496
530
)
497
531
if ($svr50 -and $svrc50 ) {
498
532
Throw " This command cannot accept both -svr50 and -svrc50"
499
- }
533
+ }
500
534
if ($svr50 ) {
501
535
return " svr50"
502
536
}
@@ -512,7 +546,7 @@ param(
512
546
)
513
547
if ($x86 -and $x64 ) {
514
548
Throw " This command cannot accept both -x86 and -x64"
515
- }
549
+ }
516
550
if ($x86 ) {
517
551
return " x86"
518
552
}
@@ -534,7 +568,7 @@ param(
534
568
foreach ($removePath in $removePaths ) {
535
569
if ($portion.StartsWith ($removePath )) {
536
570
$skip = $true
537
- }
571
+ }
538
572
}
539
573
if (! $skip ) {
540
574
$newPath = $newPath + " ;" + $portion
@@ -574,7 +608,6 @@ function Requested-Switches() {
574
608
switch - wildcard ($command + " " + $args.Count ) {
575
609
" setup 0" {Kvm- Global- Setup}
576
610
" upgrade 0" {Kvm- Global- Upgrade}
577
- # "install 0" {Kvm-Global-Install-Latest}
578
611
" install 1" {Kvm- Global- Install $args [0 ]}
579
612
# "list 0" {Kvm-Global-List}
580
613
" use 1" {Kvm- Global- Use $args [0 ]}
@@ -584,7 +617,6 @@ function Requested-Switches() {
584
617
switch - wildcard ($command + " " + $args.Count ) {
585
618
" setup 0" {Kvm- Global- Setup}
586
619
" upgrade 0" {Kvm- Upgrade}
587
- # "install 0" {Kvm-Install-Latest}
588
620
" install 1" {Kvm- Install $args [0 ]}
589
621
" list 0" {Kvm- List}
590
622
" use 1" {Kvm- Use $args [0 ]}
0 commit comments