-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathPathProvider.ps1
91 lines (72 loc) · 1.74 KB
/
PathProvider.ps1
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
88
89
90
91
function Get-ScriptDirectory
{
$Invocation = (Get-Variable MyInvocation -Scope 1).Value
Split-Path $Invocation.MyCommand.Path
}
Import-Module "$(Get-ScriptDirectory)\lib\PSProviderFramework.dll"
if ([bool](Get-PSDrive PATHs -ErrorAction SilentlyContinue))
{
Remove-PSDrive -Name PATH
}
New-PSDrive -Name PATH -PSProvider containerscriptprovider -Root / -moduleinfo $(new-module -name PathProvider {
function GetChildItems {
[cmdletbinding()]
param([string]$path,[bool]$recurse)
GetEnvPathItems | % { $psprovider.writeitemobject($_, $path, $false) }
}
function IsItemContainer {
[cmdletbinding()]
[outputtype('bool')]
param([string]$path)
($path -eq "")
}
function ItemExists {
[cmdletbinding()]
[outputtype('bool')]param([string]$path)
$ie = ($path -eq "") -or [bool]@(GetEnvPathItems | ? { $_ -eq $path })
return $ie
}
function NewItem {
[cmdletbinding()]
param(
[string]$path,
[string]$itemTypeName,
[Object]$newItemValue
)
$new = @(GetEnvPathItems) + @($NewItemValue)
SetEnvPath $new
$psprovider.writeverbose("NewItem")
}
function RemoveItem {
[cmdletbinding()]
param([string]$path,[bool]$recurse)
$new = GetEnvPathItems | ? { $_ -ne $path }
SetEnvPath($new)
}
function RenameItem {
[cmdletbinding()] param([string]$path, [string]$newName)
}
function GetEnvPathItems()
{
$p = $Env:Path
if ($p)
{
$p.Split(";")
}
else
{
@()
}
}
function SetEnvPath([string[]]$items)
{
if ($items)
{
$Env:Path = [string]::Join(";", ( $items | Get-Unique ) )
}
else
{
$Env:Path="";
}
}
});