System.Diagnostics立即关闭进程Powershell

问题描述

我遇到一个问题,我试图通过MSI Installer部署驱动程序安装,它包含.CAT和.INF文件并将它们输出到目录,通常从这里,基础架构工程师可以右键单击.INF文件并按安装,但是我们正在尝试简化此过程并使该步骤自动化。

通过C#,我有一个利用System.Diagnostics.Process命名空间的类来生成Powershell进程,以运行包含以下简单命令的Powershell脚本:

var process = new System.Diagnostics.Process();

var newProcessInfo = new System.Diagnostics.processstartinfo();

string powerShellScript = @"C:\PowershellScript\DriverInstall.ps1"

newProcessInfo.FileName = @"C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe"

newProcessInfo.Verb = "runas";  
string newArgs = "-File " + powerShellScript;
newProcessInfo.Arguments = newArgs;
process.StartInfo = newProcessInfo;
process.Start();

Powershell脚本命令如下:

Get-ChildItem "C:\DriverLocation" -Recurse -Filter "*inf" | ForEach-Object {PNPUtil.exe /add-driver $_.FullName /install }

从powershell运行此程序时,它可以按预期工作,但是,如果我尝试从C#类生成一个powershell进程,则它不起作用,出现一些红色错误消息文本,但进程窗口会立即生成关闭,所以我无法确定错误是什么。

本质上,我要么需要将Powershell进程的输出输出到文本文件,要么需要Powershell窗口保持不变,以便可以确定为什么从System.Diagnostics.Process命名空间运行时脚本无法运行。

我试图编辑注册表,以便Powershell保持打开状态而无济于事。

请不要建议使用System.Management.Automation.Powershell命名空间,因为在我们的项目方案中无法使用.NET Core。

感谢您抽出宝贵的时间阅读本文,对您的帮助非常感谢。

解决方法

解决方案是在powershell脚本中指定执行策略,当从powershell窗口运行时,它具有本地管理员权限,因此不需要指定执行策略,但是由于它是从单独的进程中产生的,因此只具有远程访问权限,因此它将不允许脚本执行..从未设法输出特定的错误消息,而是通过消除过程确定了解决方案。

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope LocalMachine