gpt4 book ai didi

powershell - 使用Powershell从文件中提取功能主体

转载 作者:行者123 更新时间:2023-12-02 23:23:39 25 4
gpt4 key购买 nike

如何提取Powershell函数定义的内容?
假设代码是这样的,

Function fun1($choice){
switch($choice)
{
1{
"within 1"
}
2{
"within 2"
}
default{
"within default"
}

}

}

fun1 1

我只需要函数定义的内容,而无需其他文本。

最佳答案

使用PowerShell 3.0+ Language namespace AST解析器:

$code = Get-Content -literal 'R:\source.ps1' -raw
$name = 'fun1'

$body = [Management.Automation.Language.Parser]::ParseInput($code, [ref]$null, [ref]$null).
Find([Func[Management.Automation.Language.Ast,bool]]{
param ($ast)
$ast.name -eq $name -and $ast.body
}, $true) | ForEach {
$_.body.extent.text
}

在$ body中输出一个多行字符串:
{
switch($choice)
{
1{
"within 1"
}
2{
"within 2"
}
default{
"within default"
}

}

}

要提取第一个函数定义主体,而不管其名称如何:
$body = [Management.Automation.Language.Parser]::ParseInput($code, [ref]$null, [ref]$null).
Find([Func[Management.Automation.Language.Ast,bool]]{$args[0].body}, $true) | ForEach {
$_.body.extent.text
}

要提取以 function关键字开头的整个函数定义,请使用 $_.extent.text:
$fun = [Management.Automation.Language.Parser]::ParseInput($code, [ref]$null, [ref]$null).
Find([Func[Management.Automation.Language.Ast,bool]]{$args[0].body}, $true) | ForEach {
$_.extent.text
}

关于powershell - 使用Powershell从文件中提取功能主体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42548059/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com