如何在PowerShell中获取变量名的字符串表示(不含$符号)
获取PowerShell变量的名称字符串(不含$符号)
方法1:使用内置Get-Variable命令(最可靠)
当你明确知道变量的字面名称时,直接通过Get-Variable获取变量对象,其Name属性就是不带$的变量名:
$name = "John" # 获取变量名 $varName = (Get-Variable -Name name).Name # 输出结果:name Write-Output $varName
这个方法适用于所有作用域内的变量,包括全局、脚本、局部作用域,只要能指定正确的变量名称即可。
方法2:动态获取变量名(适用于变量引用场景)
如果需要通过变量本身的引用来获取名称(比如将变量作为参数传递给函数时),可以借助PowerShell的抽象语法树(AST)解析实现:
function Get-VarName { param( [Parameter(Mandatory)] $InputVar ) # 解析当前命令行的AST,提取变量表达式 $ast = [Management.Automation.Language.Parser]::ParseInput( $MyInvocation.Line.Trim(), [ref]$null, [ref]$null ) $varAst = $ast.Find({ $args[0] -is [Management.Automation.Language.VariableExpressionAst] }, $false) # 返回不带$的变量名 return $varAst.VariablePath.UserPath } # 使用示例 $age = 30 Get-VarName $age # 输出 age
这个方法可以处理大多数简单场景,若命令行包含复杂表达式,可能需要调整AST查找逻辑。
注意事项
- 不要通过变量值反向查找名称,多个变量可能持有相同值,结果不可靠。
- 对于
$PSVersionTable这类自动变量,同样可以用Get-Variable方法获取名称。
内容的提问来源于stack exchange,提问作者Just a learner
相关产品推荐
相关产品推荐

