powershell - 在 powershell 中设置环境变量
问题描述
在cmd
中,您可以访问cmd
之外的环境变量cmd
,但有没有办法做到这一点,那就是 powershell?
背景:在命令
提示符(cmd.exe
_ %COMSPEC%
_ ) 但我还没有找到在 powershell 中执行此操作的方法。在中,您甚至可以使用nd 定义一个变量,以便在 cmd 之外使用它。前任:%PROGRAMFILES%
cmd
%VariableName%
appdata
cmd
setx
setx testbat "%HOMEDRIVE%%HOMEPATH%\Desktop\Programs\test.bat"
然后你可以像这样在快捷方式中使用它:
%testbat%
但是,我无法使用 Powershell 变量复制它。
我试过的:
- 我看到了这一点,想知道是否可以在 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
- 然后我检查了该
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”
解决方案
Powershell 本身提供了这些方法来与环境变量交互:
- 环境提供者驱动
- 项 cmdlet
- .NET System.Environment 类
- 在 Windows 上,系统控制面板
因此,要将持久环境变量 (PSModulePath) 设置$newpath
为机器级别的值,您可以使用
[Environment]::SetEnvironmentVariable("PSModulePath", $newpath, 'Machine')
要获取环境变量,您可以使用
$path = [Environment]::GetEnvironmentVariable('PSModulePath', 'Machine')
或变量语法
$Env:PSModulePath
这是文档。
推荐阅读
- android - Youtube API - 程序类型已经存在:com.google.api.services.youtube.YouTube$Builder
- c++ - C++ 将 std::string 转换为 char
- angular - 从Angular中的路由路径中删除目录
- sql - SAS:PROC SQL:如何在不创建新列的情况下将字符格式(dd/mm/yyyy)读取为日期格式?
- database - OneToOne 关系中的孤儿
- android - 如何更改ActionBar上的溢出按钮(3个垂直点)和ToolbarItem的文本颜色?
- annotations - 大型数据集的图像标注
- java - Javax.Validation - 允许 null 但如果值不是则验证
- javascript - 在 firebase 函数中使用 google apis
- javascript - Vue 组件 $emit 触发两次