在 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.HadErrors
和ps.Streams.Error
哦,我看到“术语 'Get-BIOS' 未被识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写,或者如果路径已包含,请验证路径是否正确,然后重试。”错误。谢谢。
【参考方案1】:
我想通了。
只需尝试更改项目的目标框架。
我已更改为 .NET 4.8 并且可以正常工作。
【讨论】:
以上是关于在 C# 中执行 PowerShell 脚本时调用响应为空的主要内容,如果未能解决你的问题,请参考以下文章