我目前正在开发一个.Net Framework C# WinForms应用程序,它使用System.Management.Automation
执行PowerShell脚本。
当PowerShell脚本执行时,我希望有一种方法可以在脚本执行时捕获脚本中的每一行代码,而不是最初只是将整个文件作为字符串阅读。
我正在用这种方式构建一台机器,并希望它的功能类似于CNC机器的HMI。
看起来Powershell.HistoryString()
给出了历史,但我认为它只会一次全部归还。
让我知道如果我可以提供更多的信息.谢谢!
1条答案
按热度按时间b1zrtrql1#
下面是一个最小的C#示例,使用**PowerShell SDK和
System.Management.Automation.Language.Parser
**,PowerShell语言解析器:限制:
foreach
和while
)视为 * 单一 * 语句。字符串
语言解析器是需要的,因为PowerShell语句可以跨多行,所以你需要知道哪些行块构成了一个语句。
示例输出:
型
[1]例如,
foreach
语句的AST表示是System.Management.Automation.Language.LoopStatementAst
类型,它有一个.Condition
和一个.Body
属性,你必须单独调用这些属性,并决定何时执行主体。带有 labeledbreak
和continue
语句的 * 嵌套 * 循环跨越语句边界,几乎不可能用这种方式处理。