【发布时间】: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、函数、脚本文件或可运行程序的名称。请检查名称的拼写,或者如果路径已包含,请验证路径是否正确,然后重试。”错误。谢谢。
标签: c# powershell invoke bios