首页 > 解决方案 > 在 powershell 中设置环境变量

问题描述

cmd中,您可以访问cmd之外的环境变量cmd,但有没有办法做到这一点,那就是 powershell?


背景:在命令
提示符(cmd.exe_ %COMSPEC%_ ) 但我还没有找到在 powershell 中执行此操作的方法。在中,您甚至可以使用nd 定义一个变量,以便在 cmd 之外使用它。前任:%PROGRAMFILES%cmd%VariableName%appdatacmdsetx

setx testbat "%HOMEDRIVE%%HOMEPATH%\Desktop\Programs\test.bat"

然后你可以像这样在快捷方式中使用它:

%testbat%

带有 cmd 变量的快捷方式向导

但是,我无法使用 Powershell 变量复制它。


我试过的:

  1. 我看到了这一点,想知道是否可以在 powershell 中考虑到这一点来创建环境变量:
$env:test = "C:\Users\Neko"

然后我重新启动并尝试cmd在搜索提示(搜索提示)中使用它

C:\Users\Neko>cd %test%
The system cannot find the path specified.
C:\Users\Neko>echo %test%
%test%

果然,当我gci env:重新启动后它甚至没有出现在powershell中因为这不起作用我删除了变量并有了一个想法:

PS C:\Users\Neko> gci env:

Name                           Value
----                           -----
ALLUSERSPROFILE                C:\ProgramData
APPDATA                        C:\Users\Neko\AppData\Roaming
CommonProgramFiles             C:\Program Files\Common Files
CommonProgramFiles(x86)        C:\Program Files (x86)\Common Files
CommonProgramW6432             C:\Program Files\Common Files
COMPUTERNAME                   XXXXXXXXX
ComSpec                        C:\Windows\system32\cmd.exe
DriverData                     C:\Windows\System32\Drivers\DriverData
HOMEDRIVE                      C:
HOMEPATH                       \Users\Neko
LOCALAPPDATA                   C:\Users\Neko\AppData\Local
LOGONSERVER                    \\XXXXXXXXX
NUMBER_OF_PROCESSORS           8
OneDrive                       C:\Users\Neko\OneDrive
OneDriveConsumer               C:\Users\Neko\OneDrive
OS                             Windows_NT
POWERSHELL_DISTRIBUTION_CHA... MSI:Windows 10 Pro Education
PROCESSOR_ARCHITECTURE         AMD64
PROCESSOR_IDENTIFIER           Intel64 Family 6 Model 126 Stepping 5, GenuineIntel
PROCESSOR_LEVEL                6
PROCESSOR_REVISION             7e05
ProgramData                    C:\ProgramData
ProgramFiles                   C:\Program Files
ProgramFiles(x86)              C:\Program Files (x86)
ProgramW6432                   C:\Program Files
PSModulePath                   C:\Users\Neko\Documents\WindowsPowerShell\Modules;C:\Program Files\WindowsPowerShell\M...
PUBLIC                         C:\Users\Public
SystemDrive                    C:
SystemRoot                     C:\Windows
TEMP                           C:\Users\Neko\AppData\Local\Temp
test                           C:\Users\Neko
TMP                            C:\Users\Neko\AppData\Local\Temp
USERDOMAIN                     XXXXXXXXX
USERDOMAIN_ROAMINGPROFILE      XXXXXXXXX
USERNAME                       Neko
USERPROFILE                    C:\Users\Neko
windir                         C:\Windows
WSLENV                         WT_SESSION::WT_PROFILE_ID
WT_PROFILE_ID                  XXXXXXXXX
WT_SESSION                     XXXXXXXXX


PS C:\Users\Neko> del "env:test"
PS C:\Users\Neko> gci env:

Name                           Value
----                           -----
ALLUSERSPROFILE                C:\ProgramData
APPDATA                        C:\Users\Neko\AppData\Roaming
CommonProgramFiles             C:\Program Files\Common Files
CommonProgramFiles(x86)        C:\Program Files (x86)\Common Files
CommonProgramW6432             C:\Program Files\Common Files
COMPUTERNAME                   XXXXXXXXX
ComSpec                        C:\Windows\system32\cmd.exe
DriverData                     C:\Windows\System32\Drivers\DriverData
HOMEDRIVE                      C:
HOMEPATH                       \Users\Neko
LOCALAPPDATA                   C:\Users\Neko\AppData\Local
LOGONSERVER                    \\XXXXXXXXX
NUMBER_OF_PROCESSORS           8
OneDrive                       C:\Users\Neko\OneDrive
OneDriveConsumer               C:\Users\Neko\OneDrive
OS                             Windows_NT
Path                           C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPo...
PATHEXT                        .COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC;.CPL
POWERSHELL_DISTRIBUTION_CHA... MSI:Windows 10 Pro Education
PROCESSOR_ARCHITECTURE         AMD64
PROCESSOR_IDENTIFIER           Intel64 Family 6 Model 126 Stepping 5, GenuineIntel
PROCESSOR_LEVEL                6
PROCESSOR_REVISION             7e05
ProgramData                    C:\ProgramData
ProgramFiles                   C:\Program Files
ProgramFiles(x86)              C:\Program Files (x86)
ProgramW6432                   C:\Program Files
PSModulePath                   C:\Users\Neko\Documents\WindowsPowerShell\Modules;C:\Program Files\WindowsPowerShell\M...
PUBLIC                         C:\Users\Public
SystemDrive                    C:
SystemRoot                     C:\Windows
TEMP                           C:\Users\Neko\AppData\Local\Temp
TMP                            C:\Users\Neko\AppData\Local\Temp
USERDOMAIN                     XXXXXXXXX
USERDOMAIN_ROAMINGPROFILE      XXXXXXXXX
USERNAME                       Neko
USERPROFILE                    C:\Users\Neko
windir                         C:\Windows
WSLENV                         WT_SESSION::WT_PROFILE_ID
WT_PROFILE_ID                  XXXXXXXXX
WT_SESSION                     XXXXXXXXX
  1. 然后我检查了该cmd set命令是否具有与它相同的结果gci env:,因此我尝试使用setx它来查看它是否也出现在 powershell 中:
setx test "Test"

重新启动后,它确实

PS C:\Users\Neko> $env:test
Test

我意识到变量都存储在注册表中,当然我可以编辑注册表:

Set-Itemproperty -path 'HKCU:\Environment' -Name 'Test' -value 'Test'

但感觉和类似的东西不一样setx


结论
我想了解是否有一个true-powershell -esque 命令可以定义我可以在 powershell 之外使用的环境变量,就像setx在 cmd 中一样。我不是在寻找完整的脚本,只是命令或类似$env:variable = "value".


更新
是的,您也可以创建一个函数来执行此操作,技术上可能是单行的,而不是我正在寻找的。我希望能够使用内置 cmdlet在 powershell 中创建环境变量。一些“真正的powershell”

标签: powershellwindows-10environment-variables

解决方案


Powershell 本身提供了这些方法来与环境变量交互:

  • 环境提供者驱动
  • 项 cmdlet
  • .NET System.Environment 类
  • 在 Windows 上,系统控制面板

因此,要将持久环境变量 (PSModulePath) 设置$newpath为机器级别的值,您可以使用

[Environment]::SetEnvironmentVariable("PSModulePath", $newpath, 'Machine')

要获取环境变量,您可以使用

$path = [Environment]::GetEnvironmentVariable('PSModulePath', 'Machine')

或变量语法

$Env:PSModulePath

这是文档。


推荐阅读