传统的控制台一般没有象Powershell这么高级的变量系统。它们都是依赖于机器本身的环境变量,进行操作 。环境变量对于powershell显得很重要,因为它涵盖了许多操作系统的细节信息。此外,powershell中的变量只存在于powershell内部的会话中,一旦powershell关闭,这些变量就会自生自灭。但是如果环境变量被更新了,它会继续保存在操作系统中,即使其它程序也可以调用它。

一、读取特殊的环境变量

通过环境变量读取Windows操作系统的安装路径,和默认应用程序的安装路径。

  1. PS> $env:windir
  2. C:\Windows
  3. PS> $env:ProgramFiles
  4. C:\Program Files

通过$env:,这就提示powershell忽略基本的variable:驱动器,而是去环境变量env:驱动器中寻找变量。为了和其它变量保持一致,powershell环境变量也可以象其它变量那样使用。比如你可以把它插入到文本中。

  1. PS> "My computer name $env:COMPUTERNAME"
  2. My computer name DESKTOP-VEB85IN

二、查找环境变量

Powershell把所有环境变量的记录保存在env: 虚拟驱动中,因此可以列出所有环境变量 。一旦查出环境变量的名字就可以使用$env:name访问了。

  1. PS> ls env:
  2. Name Value
  3. ---- -----
  4. ALLUSERSPROFILE C:\ProgramData
  5. ANDROID_HOME D:\Software\android-sdk
  6. APPDATA C:\Users\quanzaiyu\AppData\Roaming
  7. BT_PANEL D:\BtSoft\panel
  8. BT_PYTHON C:\Program Files\python
  9. BT_SETUP D:\BtSoft
  10. ChocolateyInstall C:\ProgramData\chocolatey
  11. ChocolateyLastPathUpdate 132318402534823514
  12. ChocolateyToolsLocation C:\tools
  13. CommonProgramFiles C:\Program Files\Common Files
  14. CommonProgramFiles(x86) C:\Program Files (x86)\Common Files
  15. CommonProgramW6432 C:\Program Files\Common Files
  16. COMPUTERNAME DESKTOP-VEB85IN
  17. ComSpec C:\WINDOWS\system32\cmd.exe
  18. DART_SDK C:\Program Files\Dart\dart-sdk
  19. DriverData C:\Windows\System32\Drivers\DriverData
  20. ERLANG_HOME C:\Program Files\erl10.3
  21. FLUTTER_STORAGE_BASE_URL https://storage.flutter-io.cn
  22. FPS_BROWSER_APP_PROFILE_STRING Internet Explorer
  23. FPS_BROWSER_USER_PROFILE_ST... Default
  24. GIT_INSTALL_ROOT C:\Users\quanzaiyu\scoop\apps\git\current
  25. GOROOT C:\Users\quanzaiyu\scoop\apps\go\current
  26. HOME C:\Users\quanzaiyu
  27. HOMEDRIVE C:
  28. HOMEPATH \Users\quanzaiyu
  29. INTEL_DEV_REDIST C:\Program Files (x86)\Common Files\Intel\Shared Libraries\
  30. IOJS_ORG_MIRROR https://npm.taobao.org/mirrors/iojs
  31. JAVA_HOME C:\Program Files\Java\jdk1.8.0_201
  32. LOCALAPPDATA C:\Users\quanzaiyu\AppData\Local
  33. LOGONSERVER \\DESKTOP-VEB85IN
  34. MIC_LD_LIBRARY_PATH C:\Program Files (x86)\Common Files\Intel\Shared Libraries\compiler\lib\mic
  35. NODE_PATH C:\Users\quanzaiyu\scoop\apps\yarn\current\global\node_modules
  36. NODEJS_ORG_MIRROR https://npm.taobao.org/mirrors/node
  37. NODIST_IOJS_MIRROR https://npm.taobao.org/mirrors/iojs
  38. NODIST_NODE_MIRROR https://npm.taobao.org/mirrors/node
  39. NUMBER_OF_PROCESSORS 12
  40. NVM_IOJS_ORG_MIRROR https://npm.taobao.org/mirrors/iojs
  41. NVM_NODEJS_ORG_MIRROR https://npm.taobao.org/mirrors/node
  42. NVMW_IOJS_ORG_MIRROR https://npm.taobao.org/mirrors/iojs
  43. NVMW_NODEJS_ORG_MIRROR https://npm.taobao.org/mirrors/node
  44. NVMW_NPM_MIRROR https://npm.taobao.org/mirrors/npm
  45. OneDrive E:\OneDrive - OneDrive
  46. OneDriveCommercial E:\OneDrive - OneDrive
  47. OneDriveConsumer C:\Users\quanzaiyu\OneDrive
  48. OS Windows_NT
  49. Path C:\Program Files (x86)\Common Files\Intel\Shared Libraries\redist\intel64\compiler;C:...
  50. PATHEXT .COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC;.RB;.RBW;.PS1;LNK;.CPL
  51. PROCESSOR_IDENTIFIER Intel64 Family 6 Model 158 Stepping 10, GenuineIntel
  52. PROCESSOR_LEVEL 6
  53. PROCESSOR_REVISION 9e0a
  54. ProgramData C:\ProgramData
  55. ProgramFiles C:\Program Files
  56. ProgramFiles(x86) C:\Program Files (x86)
  57. ProgramW6432 C:\Program Files
  58. PSModulePath C:\Users\quanzaiyu\Documents\WindowsPowerShell\Modules;C:\Program Files\WindowsPowerS...
  59. PUB_HOSTED_URL https://pub.flutter-io.cn
  60. PUBLIC C:\Users\Public
  61. PyCharm C:\Program Files\JetBrains\PyCharm 2018.3.4\bin;
  62. SESSIONNAME Console
  63. SystemDrive C:
  64. SystemRoot C:\WINDOWS
  65. TEMP C:\Users\QUANZA~1\AppData\Local\Temp
  66. TMP C:\Users\QUANZA~1\AppData\Local\Temp
  67. UNRAR_LIB_PATH C:\Program Files\python\Lib\site-packages\unrar\UnRAR.dll
  68. USERDOMAIN DESKTOP-VEB85IN
  69. USERDOMAIN_ROAMINGPROFILE DESKTOP-VEB85IN
  70. USERNAME quanzaiyu
  71. USERPROFILE C:\Users\quanzaiyu
  72. WebStorm C:\Program Files\JetBrains\WebStorm 2018.3.4\bin;
  73. windir C:\WINDOWS
  74. WSLENV WT_SESSION::WT_PROFILE_ID
  75. WT_PROFILE_ID {61c54bbd-c2c6-5271-96e7-009a87ff44bf}
  76. WT_SESSION 975eec1c-e357-494b-bc9f-af524a5f7ebc

三、创建新的环境变量

创建新环境变量的方法和创建其它变量一样,只需要指定env:环境变量名称即可。

以下,临时创建两个环境变量,只在当前会话中起效:

  1. PS> $env:TestVar1="This is my environment variable"
  2. PS> $env:TestVar2="Hollow, environment variable"
  3. PS> ls env:Test*
  4. Name Value
  5. ---- -----
  6. TestVar1 This is my environment variable
  7. TestVar2 Hollow, environment variable

四、删除和更新环境变量

在powershell删除和更新环境变量和常规变量一样。例如要删除环境变量中的 windir:

  1. PS> del env:windir
  2. PS> $env:windir
  3. PS>

可以更新环境变量$env:OS 为linux redhat。

  1. PS> $env:OS
  2. Windows_NT
  3. PS> $env:OS="Redhat Linux"
  4. PS> $env:OS
  5. Redhat Linux

这样直接操作环境变量,会不会不安全?事实上很安全,因为$env:中的环境变量只是机器环境变量的一个副本,即使你更改了它,下一次重新打开时,又会恢复如初。(.NET方法更新环境变量除外)

我们可以将受信任的文件夹列表追加到环境变量的末尾,这样就可以直接通过相对路径执行这些文件下的文件或者脚本,甚至省略扩展名都可以。

  1. PS> md .myscript
  2. Directory:
  3. Mode LastWriteTime Length Name
  4. ---- ------------- ------ ----
  5. d---- 2011/11/29 18:20 myscript
  6. PS> cd .myscript
  7. PSmyscript> "write-host 'Hollow , Powershell'" > hollow.ps1
  8. PSmyscript> .hollow.ps1
  9. Hollow , Powershell
  10. PSmyscript> cd ..
  11. PS> $env:Path+=";C:PowerShellmyscript"
  12. PS> hollow.ps1
  13. Hollow , Powershell
  14. PS> hollow
  15. Hollow , Powershell

五、环境变量永久生效

上述对于环境变量的操作只会影响当前powershell会话,并没有更新在机器上。

.NET方法:[environment]::SetEnvironmentvariable 操作可以立刻生效。

下面的例子对当前用户设置环境变量,经测试,重新打开powershell仍然存在

  1. PS> [environment]::SetEnvironmentvariable("Path", ";c:\powershellscript", "User")
  2. PS> [environment]::GetEnvironmentvariable("Path", "User")
  3. ;c:\powershellscript

当然,也可以手动添加到Powershell配置文件:
%UserProfile%\My Documents\WindowsPowerShell\profile.ps1

  1. $env:test="Hello world"

当然,去 此电脑 -> 右键“属性”跳到(控制面板\所有控制面板项\系统) -> 高级系统设置 -> 环境变量 中设置也可以。