在 C# 中执行 PowerShell 脚本时调用响应为空

Posted

技术标签:

【中文标题】在 C# 中执行 PowerShell 脚本时调用响应为空【英文标题】:Invoke response empty when execute PowerShell scripts in C# 【发布时间】:2022-01-04 10:02:45 【问题描述】:

我目前正在编写一些代码来使用 C# 执行 PowerShell。

这是我的代码

            Runspace runspace = RunspaceFactory.CreateRunspace();

            runspace.Open();

            // create a pipeline and feed it the script text
            PowerShell ps = PowerShell.Create();

            ps.Commands.AddScript(scriptText);

           // execute the script
            Collection<PSObject> results = ps.Invoke();

            //Close the runspace
            runspace.Close();

            // convert the script result into a single string
            StringBuilder stringBuilder = new StringBuilder();
            
            foreach (PSObject obj in results)
            
                stringBuilder.AppendLine(obj.ToString());
            
            return stringBuilder.ToString();

我将通过 scriptText 变量传递我的命令。

我尝试了一些命令,例如“Get-Process”、“Get-Service”……,效果很好。

但是当我从GetBios module 尝试“Get-BIOS”时,它没有。它返回一个空结果。

我以管理员权限在系统的 PowerShell 上运行“Get-BIOS”命令,它显示了很多我想要的信息。

到目前为止我已经尝试过:

-在执行时使用 app.manifest 文件要求管理员权限

<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />

-或者尝试先执行这个先安装模块

scriptText = "安装模块 GetBIOS"

然后执行

scriptText = "获取 BIOS"

但它们都不起作用。

我该如何解决这个问题,或者我们可以有其他方法吗?

提前致谢。

【问题讨论】:

您可以从解决它为什么不返回任何内容开始:在调用ps.Invoke() 后检查ps.HadErrorsps.Streams.Error 哦,我看到“术语 'Get-BIOS' 未被识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写,或者如果路径已包含,请验证路径是否正确,然后重试。”错误。谢谢。 【参考方案1】:

我想通了。

只需尝试更改项目的目标框架。

我已更改为 .NET 4.8 并且可以正常工作。

【讨论】:

以上是关于在 C# 中执行 PowerShell 脚本时调用响应为空的主要内容,如果未能解决你的问题,请参考以下文章

通过 C# 代码执行 Powershell 命令

从 C# 异步运行多个 PowerShell 脚本

SQLServer用powershell实现多台服务器批量执行SQL脚本

从 C# 应用程序的脚本中调用 PowerShell 函数

无法从 C# 调用 Powershell 函数

在 C# 中使用不同的凭据调用远程 powershell 脚本