使用PowerShell本地变量设置Windows环境变量报错求助
问题
尝试用本地PowerShell变量设置和查看Windows环境变量,代码如下:
$strAllowGPU_Group = "TF_FORCE_GPU_ALLOW_GROWTH" $strAllowGPU_True = "True" $strUserEnvs = "User" $strCUDAPath = "C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.8\bin" $strCheckForCUDA = "C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA" $strWhat = $env:${strAllowGPU_Group} [System.Environment]::SetEnvironmentVariable(${strAllowGPU_Group},${strAllowGPU_True}, ${strUserEnvs})
运行后出现错误:
At C:\Users\pgmrdlm\My Drive (pgmrdlm@gmail.com)\DSLR Notes and
backup\Software\Scripts\CudaForPixinsight\CudaForPixinsight.ps1:50
char:13$strWhat = $env:${strAllowGPU_Group}~~~~~ Variable reference is not valid. ':' was not followed by a valid variable name character. Consider using ${} todelimit the name. At C:\Users\pgmrdlm\My Drive
(pgmrdlm@gmail.com)\DSLR Notes and
backup\Software\Scripts\CudaForPixinsight\CudaForPixinsight.ps1:50
char:18$strWhat = $env:${strAllowGPU_Group}~~~~~~~~~~~~~~~~~~~~ Unexpected token '${strAllowGPU_Group}' in expression or statement.
- CategoryInfo : ParserError: (:) [], ParseException
- FullyQualifiedErrorId : InvalidVariableReferenceWithDrive
硬编码方式可以正常创建持久化环境变量:
[System.Environment]::SetEnvironmentVariable('TF_FORCE_GPU_ALLOW_GROWTH','True', 'User')
不清楚用变量时的正确写法,寻求帮助。
解决方案
1. 读取环境变量的正确写法
PowerShell中通过变量引用环境变量名时,$env:${变量名}的格式不符合语法规范,正确写法有两种:
- 使用
.NET方法读取(和设置逻辑统一,推荐):$strWhat = [System.Environment]::GetEnvironmentVariable($strAllowGPU_Group, $strUserEnvs) - 通过环境变量驱动器读取:
$strWhat = (Get-Item "env:$strAllowGPU_Group").Value
2. 设置环境变量的写法修正
设置代码的语法本身可行,但可以去掉变量外层多余的${},直接使用变量名让代码更简洁:
[System.Environment]::SetEnvironmentVariable($strAllowGPU_Group, $strAllowGPU_True, $strUserEnvs)
修正后的完整代码
$strAllowGPU_Group = "TF_FORCE_GPU_ALLOW_GROWTH" $strAllowGPU_True = "True" $strUserEnvs = "User" $strCUDAPath = "C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.8\bin" $strCheckForCUDA = "C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA" # 读取目标环境变量 $strWhat = [System.Environment]::GetEnvironmentVariable($strAllowGPU_Group, $strUserEnvs) # 设置持久化环境变量 [System.Environment]::SetEnvironmentVariable($strAllowGPU_Group, $strAllowGPU_True, $strUserEnvs) # 可选:让当前PowerShell会话立即生效新的环境变量 $env:$strAllowGPU_Group = $strAllowGPU_True
补充说明
- 使用
.NET的Get/SetEnvironmentVariable方法可以统一处理用户级、系统级环境变量,行为更稳定; - 如果只需要临时在当前会话生效环境变量,直接赋值
$env:变量名 = 值即可,无需调用.NET方法。
内容的提问来源于stack exchange,提问作者OldAndRetired
相关产品推荐
相关产品推荐

