首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >C# PowerShell - AddScript作为多个语句

C# PowerShell - AddScript作为多个语句
EN

Stack Overflow用户
提问于 2020-03-31 11:02:42
回答 1查看 1K关注 0票数 3

我很难找到一种在C#中执行多行多语句C#脚本的方法,这样所有的结果都可以从Invoke()方法中获得。看来,PowerShell.AddScript添加的命令始终是流水线化的。但是,我希望它们作为多个语句被读取、解析和执行,并将各个语句的所有结果写入输出

这有可能吗?

我现在做的是:

代码语言:javascript
运行
复制
            using PowerShell powerShell = PowerShell.Create();
            powerShell.AddCommand("Set-ExecutionPolicy").AddArgument("Unrestricted").AddParameter("Scope", "CurrentUser").AddStatement();
            powerShell.AddScript(@"multiple powershell statements 
            on multiple rows, some of them writing to output"); //No intermediate results will be logged or printed as the script is added as a single pipeline
            powerShell.AddScript("$?"); //This is to echo the execution status of the last command into results
            var results = powerShell.Invoke();

结果集合只包含一个结果,即最后一个$的回波?语句,然后查询该语句以查找pass/ find信息。我还查询错误流,但这与问题无关。

问题是:作为用户输入接收PowerShell脚本,因此不能修改它并将其添加为语句。我正在考虑逐行添加脚本,但它会破坏可能的多行管道、代码块等。因此,要达到我想要的结果,我需要自己解析脚本,这听起来很复杂。是否有任何优雅的解决方案来接收调用()的所有结果,最重要的是,从用户输入中添加一个复杂的脚本,而不会将它作为一个管道压在一起,将一个命令的结果提供给另一个

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-03-31 12:12:10

简单地说,$? 使用字符串连接将语句追加到所接收的语句,并在此之前加上; (语句分隔符):

代码语言:javascript
运行
复制
powerShell.AddScript(@"multiple powershell statements 
            on multiple rows, some of them writing to output" + ";$?");

这样,所有语句都作为一个脚本block提交。

.AddScript() 调用不是累积的--最后一次“获胜”。

或者,将.AddStatement() .AddScript() 附加到每个.AddScript()调用中,类似于您已经对更改执行策略的.AddCommand()调用所做的操作。

但是,使用单一的.AddScript() 调用,只传递单的PowerShell代码段更为有效,如上面所示。

最后,强制的安全警告

我接收PowerShell脚本作为用户输入

除非首先检查输入并对其进行消毒,否则只有在信任源的情况下才执行它。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60949050

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档