-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathenv.ps1
115 lines (106 loc) · 3.21 KB
/
env.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
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
#######################################################################################
<#
获取环境变量列表.
默认为用户级别, 如需查看系统级别, 需要添加 sys 参数(注意这是函数参数, 而不是命令行选项...)
[System.Environment]::GetEnvironmentVariables() 的可选范围有3个:
Machine, Process, User, 暂时还不清楚 Process 表示的具体范围, 可能精确到某个进程???
#>
function EnvList {
param (
$scope ## 默认为空
)
if ($scope -eq 'sys') {
[System.Environment]::GetEnvironmentVariables("machine");
} else {
[System.Environment]::GetEnvironmentVariables("user");
}
}
<#
获取指定的环境变量值.
默认为用户级别, 如需查看系统级别, 需要添加 sys 参数(注意这是函数参数, 而不是命令行选项...)
#>
function EnvGet {
param (
## 目标变量名, 默认为 path
$key='path',
## 环境变量级别
$scope='user'
)
if ($scope -eq 'sys') {
[System.Environment]::GetEnvironmentVariable($key, "machine");
} else {
[System.Environment]::GetEnvironmentVariable($key, "user");
}
}
<#
3个参数, 第3个参数 val 设置为空则表示将此环境变量删除.
#>
function EnvSet {
param (
$key = '',
$val = '',
$scope = 'user'
)
## if (($key -eq '') -or ($val -eq '')) {
if ($key -eq '') {
return
}
if ($scope -eq 'sys') {
[System.Environment]::SetEnvironmentVariable($key, $val, "machine");
} else {
[System.Environment]::SetEnvironmentVariable($key, $val, "user");
}
}
#######################################################################################
<#
查看 Path 环境变量.
默认查看用户级别, 如需查看系统级别, 需要添加 sys 参数(注意这是函数参数, 而不是命令行选项...)
#>
function PathList {
param (
$scope = 'user'
)
if ($scope -eq 'sys') {
$Paths = [System.Environment]::GetEnvironmentVariable("path", "machine");
} else {
$Paths = [System.Environment]::GetEnvironmentVariable("path", "user");
}
$Paths -split ";"
}
<#
新增一个 Path 环境变量, 这里只设置用户级别而不是系统级别.
#>
function PathAdd {
param (
$TargetPath = ''
)
if ($TargetPath -eq ''){
return;
}
$Paths = [System.Environment]::GetEnvironmentVariable("path", "user");
$NewPaths = ($Paths + ';' + $TargetPath);
[System.Environment]::SetEnvironmentVariable("path", $NewPaths, "user");
}
<#
从用户级别的 Path 环境变量中移除一个成员.
#>
function PathDel {
param (
$TargetPath
)
if ($TargetPath -eq ''){
return;
}
$Paths = [System.Environment]::GetEnvironmentVariable("path", "user");
$PathArray = ($Paths -split ";")
## 构造空数组.
$NewPathArray = @()
## powershell 中的 for/foreach 循环是表达式, 与管道操作 foreach-object 是两回事.
foreach ($Path in $PathArray) {
if ($Path -ne $TargetPath) {
$NewPathArray += $Path;
}
}
$NewPaths = ($NewPathArray -join ';')
[System.Environment]::SetEnvironmentVariable("path", $NewPaths, "user");
}