You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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 ${} to

delimit 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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 03:15:55