PowerShell 技能连载 - 查找一个脚本中的所有变量

在前一个技能中我们掩饰了如何分析一段脚本块的内容并且搜索变量或命令。这种技术也适用于基于文本的脚本。以下脚本将会检查自己并且提取出变量和命令:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
$filepath = $PSCommandPath
$tokens = $errors = $null

$ast = [System.Management.Automation.Language.Parser]::ParseFile($filepath, [ref]$tokens, [ref]$errors )

# find variables
$ast.FindAll( { $true }, $true) |
Where-Object { $_.GetType().Name -eq 'VariableExpressionAst' } |
Select-Object -Property VariablePath -ExpandProperty Extent |
Select-Object -Property * -ExcludeProperty *ScriptPosition |
Out-GridView -Title 'Variables'


# find commands
$ast.FindAll( { $true }, $true) |
Where-Object { $_.GetType().Name -eq 'CommandAst' } |
Select-Object -ExpandProperty Extent |
Select-Object -Property * -ExcludeProperty *ScriptPosition |
Out-GridView -Title 'Commands'

请确保将脚本保存到硬盘,或为 $filepath 指定一个不同的实际存在的脚本路径。

PowerShell 技能连载 - 查找一个脚本中的所有变量

http://blog.vichamp.com/2017/06/15/finding-all-variables-in-a-script/

作者

吴波

发布于

2017-06-15

更新于

2022-07-06

许可协议

评论