PowerShell中如何获取名称存储在变量中的环境变量的值
PowerShell 获取动态名称环境变量值的实现方案
你当前使用的 $val = invoke-expression "$env:$varName" 方案存在*代码注入安全风险*:如果$varName`来自不可信输入,构造的恶意值会被直接作为代码执行,生产环境不建议使用。
推荐以下更安全简洁的替代方案:
- 原生动态变量写法(最高效、最推荐日常使用)
直接使用PowerShell内置的动态变量名语法,和直接写$env:TEMP效果完全一致,无额外性能开销和安全风险:$varName = 'TEMP' $val = ${env:$varName} - .NET 环境类静态方法(适合需要精细控制的场景)
调用.NET标准库的环境变量读取接口,支持指定环境变量的作用范围(进程级、用户级、机器级),跨平台行为一致:# 默认读取当前进程作用域的环境变量 $val = [Environment]::GetEnvironmentVariable($varName) # 可选指定作用域示例:读取系统机器级的环境变量 # $val = [Environment]::GetEnvironmentVariable($varName, [EnvironmentVariableTarget]::Machine) - 环境驱动器读取(适合需要获取变量全属性的场景)
从PowerShell内置的env:驱动器读取完整的环境变量对象,可同时获取变量的只读状态、创建时间等额外属性:$val = (Get-Item "env:$varName").Value
内容的提问来源于stack exchange,提问作者René Nyffenegger
相关产品推荐
相关产品推荐

